详情页标题前

阿里云ECS云服务器使用实例RAM角色访问其他云产品-云淘科技

详情页1

本文以部署在ECS实例上的Python访问OSS为例,详细介绍了如何借助ECS实例RAM角色,使实例内部的应用程序可以使用STS临时凭证访问其他云产品

前提条件

已创建一个ECS实例。如未创建,具体操作,请参见自定义购买实例。

背景信息

相比传统的AccessKeyID和AccessKeySecret(下文简称AK)方式,使用RAM角色方式访问阿里云其他产品更加便捷,无需特别管理。本文主要介绍使用RAM角色方式访问其他云产品的操作方法。

  • AK方式:针对以往部署在ECS实例中的应用程序,如果需要访问阿里云其他云产品,您通常需要借助AK来实现。AK是您访问阿里云API的密钥,具有相应账号的完整权限。为了方便应用程序对AK的管理,您通常需要将AK保存在应用程序的配置文件中或以其他方式保存在ECS实例中,这在一定程度上增加了AK管理的复杂性,并且降低了AK的保密性。甚至,如果您需要实现多地域一致性部署,AK会随着镜像以及使用镜像创建的实例扩散出去。这种情况下,当您需要更换AK时,您就需要逐台更新和重新部署实例和镜像。

  • RAM角色方式:现在借助于ECS实例RAM角色,您可以将RAM角色和ECS实例关联起来,实例内部的应用程序可以通过STS临时凭证访问其他云产品。其中STS临时凭证由系统自动生成和更新,应用程序可以使用指定的实例元数据URL获取STS临时凭证,无需特别管理。同时借助于RAM,通过对角色和授权策略的管理,您可以达到不同实例对不同云产品或相同云产品具有各自访问权限的目的。

重要

为了方便您随本文样例快速入门,文档里所有操作均在OpenAPI开发者门户完成。OpenAPI Explorer通过已登录用户信息获取当前账号临时AK,对当前账号发起线上资源操作,请谨慎操作。创建实例操作会产生费用。操作完成后请及时释放实例。

操作步骤

为了使ECS借助实例RAM角色,实现内部Python可以使用STS临时凭证访问OSS,您需要完成以下步骤。

步骤一:创建RAM角色并配置授权策略

  1. 创建RAM角色。

    通过调用RAM产品下的API CreateRole创建RAM角色。其中:

    • RoleName:设置RAM角色的名称。根据自己的需要填写,本示例中为EcsRamRoleTest。

    • AssumeRolePolicyDocument:表示信任策略。指定允许扮演该RAM角色的一个或多个主体,这个主体可以是阿里云账号、阿里云服务或身份提供商。填写如下内容,表示允许扮演该RAM角色的可信实体为当前阿里云账号下的云服务,以受信云服务为ECS为例。

      {
          "Statement": [
              {
                  "Action": "sts:AssumeRole", 
                  "Effect": "Allow", 
                  "Principal": {
                      "Service": [
                          "ecs.aliyuncs.com"
                      ]
                  }
              }
          ], 
          "Version": "1"
      }

  2. 创建授权策略。

    通过调用RAM产品下的API CreatePolicy创建授权策略。其中:

    • PolicyName:设置授权策略的名称。本示例中为EcsRamRolePolicyTest。

    • PolicyDocument:输入授权策略内容。本示例中填写如下内容,表示该RAM角色具有OSS只读权限。

      {
          "Statement": [
              {
                  "Action": [
                      "oss:Get*", 
                      "oss:List*"
                  ], 
                  "Effect": "Allow", 
                  "Resource": "*"
              }
          ], 
          "Version": "1"
      }

  3. 为RAM角色添加权限。

    通过调用RAM产品下的API AttachPolicyToRole为RAM角色添加权限。其中:

    • PolicyType:填写Custom。

    • PolicyName:填写第2步创建的策略名称,如本示例中的EcsRamRolePolicyTest。

    • RoleName:填写第1步创建的角色名称,如本示例中的EcsRamRoleTest。

步骤二:指定RAM角色创建并设置ECS实例

您可以通过以下任一方式为ECS实例指定RAM角色:

  • 为已创建的ECS实例授予RAM角色

    通过调用ECS产品下的API AttachInstanceRamRole为已有的VPC类型ECS实例授予RAM角色,设置信息如下:

    • RegionId:为实例所在的地域ID。

    • RamRoleName:RAM角色的名称。本示例中为EcsRamRoleTest。

    • InstanceIds:需要添加实例RAM角色的VPC类型ECS实例ID。本示例中为[“i-bXXXXXXXX”]。

  • 指定RAM角色创建并设置ECS实例

    1. 创建ECS实例。

      通过调用ECS产品下的API CreateInstance创建ECS实例。其中,您需要根据实际情况填写请求参数,必须填写的参数包括:

      • RegionId:实例所在地域ID。本示例中为cn-hangzhou。

      • ImageId:实例的镜像文件ID。本示例中为centos_7_03_64_40G_alibase_20170503.vhd。

      • InstanceType:实例的资源规格。本示例中为ecs.g6.large。

      • VSwitchId:实例所在的VPC虚拟交换机。因为ECS实例RAM角色目前只支持VPC类型ECS实例,所以VSwitchId是必需的。

      • RamRoleName:RAM角色的名称。本示例中为EcsRamRoleTest。

      可选:如果您希望授权子账号创建指定RAM角色的ECS实例,那么子账号除了拥有创建ECS实例的权限之外,还需要增加PassRole权限。所以,您需要创建一个如下所示的自定义授权策略并绑定到子账号上。

      {
          "Statement": [
              {
                  "Action": "[ECS RAM Action]", 
                  "Resource": "*", 
                  "Effect": "Allow"
              }, 
              {
                  "Action": "ram:PassRole", 
                  "Resource": "*", 
                  "Effect": "Allow"
              }
          ], 
          "Version": "1"
      }
      • 如果是创建ECS实例,[ECS RAM Action]可以是ecs:CreateInstance,您也可以根据实际情况添加更多的权限。

      • 如果您需要为子账号授予所有ECS操作权限,[ECS RAM Action]应该替换为ecs:*

      说明

      关于[ECS RAM Action]的取值,更多信息,请参见鉴权规则。

    2. 设置密码并启动实例。

      具体操作,请参见在实例内部重置登录密码和启动实例。

    3. 使用API或在控制台设置ECS实例使其可以访问公网。

      以API方式为实例分配公网IP为例,确保实例可以正常访问公网。具体操作,请参见AllocatePublicIpAddress。

步骤三:在实例内部访问实例元数据URL获取STS临时凭证

重要

STS临时凭证失效前半小时会生成新的STS临时凭证,在这半小时内,新旧STS临时凭证均可使用。

  1. 远程连接ECS实例。关于连接方式的介绍,请参见连接方式概述。
  2. 访问http://100.100.100.200/latest/meta-data/ram/security-credentials/EcsRamRoleTest获取STS临时凭证。

    说明

    本示例中使用curl命令访问上述URL,路径最后一部分是RAM角色名称,您应当替换为自己创建的RAM角色名称。如果您使用的是Windows ECS实例,请参见实例元数据。

    示例输出结果如下:

    [root@local ~]# curl http://100.100.100.200/latest/meta-data/ram/security-credentials/EcsRamRoleTest
    {
    "AccessKeyId" : "STS.J8XXXXXXXXXX4",
    "AccessKeySecret" : "9PjfXXXXXXXXXBf2XAW",
    "Expiration" : "2017-06-09T09:17:19Z",
    "SecurityToken" : "CAIXXXXXXXXXXXwmBkleCTkyI+",
    "LastUpdated" : "2017-06-09T03:17:18Z",
    "Code" : "Success"
    }

步骤四:基于临时凭证使用Python SDK访问OSS

本示例中,我们基于STS临时凭证使用Python SDK列举实例所在地域的某个OSS存储空间(Bucket)里的10个文件。

准备工作

  • 已远程连接ECS实例。

  • ECS实例已安装Python。如果您用的是Linux ECS实例,必须安装pip。

  • ECS实例所在的地域已创建了存储空间(Bucket),并已获取Bucket的名称和Endpoint。

    例如,Bucket名称为ramroletest,Endpoint为oss-cn-hangzhou.aliyuncs.com

操作步骤

  1. 执行pip install oss2命令,安装OSS Python SDK。

    说明

    如果您用的是Windows ECS实例,请参见《对象存储OSS SDK参考》的安装Python SDK。

  2. 执行以下命令进行访问测试。

    import oss2
    from itertools import islice
    auth = oss2.StsAuth(, , )
    bucket = oss2.Bucket(auth, , )
    for b in islice(oss2.ObjectIterator(bucket), 10):
      print(b.key)

    其中:

    • oss2.StsAuth中的3个参数分别对应于步骤三中返回的AccessKeyIdAccessKeySecretSecurityToken

    • oss2.Bucket中后面2个参数是Endpoint和Bucket名称。

    示例输出结果如下:

    [root@local ~]# python
    Python 2.7.5 (default, Nov  6 2016, 00:28:07)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import oss2
    >>> from itertools import islice
    >>> auth = oss2.StsAuth("STS.J8XXXXXXXXXX4", "9PjfXXXXXXXXXBf2XAW", "CAIXXXXXXXXXXXwmBkleCTkyI+")
    >>> bucket = oss2.Bucket(auth, "oss-cn-hangzhou.aliyuncs.com", "ramroletest")
    >>> for b in islice(oss2.ObjectIterator(bucket), 10):
    ...     print(b.key)
    ...
    ramroletest.txt
    test.shh

腾讯云1折,限时活动,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/153743.html

(0)
上一篇 2023年12月9日 下午5:11
下一篇 2023年12月9日
详情页2

相关推荐

  • 阿里云云原生大数据计算服务 MaxComputeMaxCompute项目设置RAM子账号为超级管理员-云淘科技

    本文为您介绍在MaxCompute项目中如何将RAM子账号设置为超级管理员,并提供了超级管理员在成员管理、权限管理等方面的使用建议。 背景信息 日常工作中,为了保障数据安全,通常主账号为特定人员管理,使用MaxCompute的大部分用户都只持有RAM子账号。但是项目的所有者(Owner)只能为主账号,且MaxCompute的很多权限管理需要项目所有者才可以操…

    2023年12月10日
  • 阿里云日志服务SLS日志索引表-云淘科技

    本文为您提供CloudLens的日志索引表。 云产品分类 CloudLens应用 日志类型 存储 CloudLens for SLS 重要日志(消费组延迟日志、Logtail告警日志、Logtail采集日志、Logtail状态日志) 详细日志 任务运行日志(定时SQL任务运行日志、数据导入、投递等任务的运行日志) 错误日志 审计日志 监控指标 CloudLe…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云对象存储OSSPython管理存储空间读写权限-云淘科技

    存储空间(Bucket)是存储对象(Object)的容器。对象都隶属于存储空间。本文介绍如何设置和获取存储空间读写权限(ACL)。 注意事项 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心。 本…

    阿里云对象存储 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云对象存储OSS使用RAM用户访问密钥发起请求-云淘科技

    您可以为RAM用户授予特定的权限,通过RAM用户访问密钥长期访问您的OSS资源。相较于阿里云账号访问密钥,使用RAM用户访问密钥访问OSS资源更加安全。 步骤一:创建RAM用户 使用阿里云账号登录RAM控制台。 在左侧导航栏,选择身份管理 > 用户。 在用户页面,单击创建用户。 在创建用户页面的用户账号信息区域,设置用户基本信息。 登录名称:可包含英文…

    阿里云对象存储 2023年12月10日
  • 阿里云ECS云服务器ECS安全组实践(安全组设置)-云淘科技

    在安全组的使用过程中,通常会将所有的云服务器放置在同一个安全组中,从而可以减少初期配置的工作量。但从长远来看,业务系统网络的交互将变得复杂和不可控。在执行安全组变更时,您将无法明确添加和删除规则的影响范围。 背景信息 合理规划和区分不同的安全组将使您的系统更加便于调整,梳理应用提供的服务并对不同应用进行分层。这里推荐您对不同的业务规划不同的安全组,并设置不同…

    阿里云服务器 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。