zoukankan      html  css  js  c++  java
  • ECS实例RAM角色实践

    原文链接

    摘要: ECS实例RAM角色快速入门 概述 以往部署在ECS实例中的应用程序如果需要访问阿里云其他云产品的API,通常需要借助于AccessKeyId和AccessKeySecret(下文简称AK)来实现。AK是用户访问阿里云API的密钥,具有相应账户的完整权限。

    ECS实例RAM角色快速入门

    概述

    以往部署在ECS实例中的应用程序如果需要访问阿里云其他云产品的API,通常需要借助于AccessKeyId和AccessKeySecret(下文简称AK)来实现。AK是用户访问阿里云API的密钥,具有相应账户的完整权限。但是为了方便应用程序对AK的管理,用户通常需要将AK保存在应用程序的配置文件中或以其他方式保存在实例中。这在一定程度上增加了AK管理上的复杂性且降低了AK的保密性,尤其是对有多地域一致性部署需求的用户,AK将随着镜像及镜像创建的实例扩散出去。在需要更换AK时,也需要逐台实例(和镜像)进行更新和重新部署。此外,使用AK虽然简单,但AK的权限过大,无法做到精细的权限控制。

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

    本文接下来将详细介绍ECS实例使用RAM角色的正确姿势,为了方便读者随本篇样例快速入门,全文将基于OpenAPI Explorer操作(OpenAPI Explorer将各产品的API及参数以可视化的方式展现出来,并能自动生成Java,Python等SDK的样例代码)。具体分为以下几个步骤:

    1. 通过RAM创建角色,并配置授权策略
    2. 指定RAM角色创建ECS实例
    3. 在实例内部访问实例元数据URL获取STS临时凭证
    4. 基于临时凭证,使用Python SDK访问OSS

    注:OpenAPI Explorer通过已登录用户信息获取当前账号临时AK,对当前账号线上资源发起线上资源操作,请小心操作。同时创建实例操作也会产生一定的费用!操作完成后请及时释放实例。

    创建RAM角色&配置策略

    1. 创建RAM角色。找到OpenAPI Explorer RAM产品下CreateRole API。其中RoleName参数可以根据自己的需要填写,如本文填“RamRoleTest”。AssumeRolePolicyDocument填如下内容,表示该角色为一个服务角色,受信云服务(此处为ECS)可以扮演该角色:
      {
      "Statement": [
      {
        "Action": "sts:AssumeRole",
        "Effect": "Allow",
        "Principal": {
          "Service": [
            "ecs.aliyuncs.com"
          ]
        }
      }
      ],
      "Version": "1"
      }
      
      1.png
    2. 创建授权策略。找到CreatePolicy API。其中PolicyName本文填“RamRolePolicyTest”。PolicyDocument填以下内容,表示该角色具有OSS只读权限。
      {
      "Statement": [
      {
        "Action": [
          "oss:Get*",
          "oss:List*"
        ],
        "Effect": "Allow",
        "Resource": "*"
      }
      ],
      "Version": "1"
      }
      
      当希望通过子账号创建指定RAM角色的ECS实例时,还需要在上述“Statement”节点中额外增加ECS相关的权限和PassRole权限,如下所示。其中“...”需要替换成具体的ECS RAM Action,或替换成“ecs:*”表示所有Action。
      {
        "Action": ...,
        "Resource": "*",
        "Effect": "Allow"
      },
      {
        "Action": "ram:PassRole",
        "Resource": "*",
        "Effect": "Allow"
      }
      
      2.png
    3. 为角色附加授权。找到AttachPolicyToRole API。其中PolicyType填“Custom”,PolicyName填第2步创建的“RamRolePolicyTest”,RoleName填第1步创建的“RamRoleTest”。 3.png

    指定角色创建实例

    1. 创建实例。找到OpenAPI Explorer ECS产品下的CreateInstance API,参数可根据实际情况进行填写,主要需要填写的参数有:RegionId、ImageId、ecs.n1.tiny、VSwitchId和RamRoleName。由于ECS实例RAM角色目前只支持VPC实例,所以VSwitchId是必须的,RamRoleName则填之前创建的RamRoleTest。 5.png
    2. 设置密码和启动实例。从ECS控制台“实例标签页”重置实例密码,并启动实例。

    获取STS临时凭证

    从ECS控制台远程连接实例,并登陆到实例中。访问http://100.100.100.200/latest/meta-data/ram/security-credentials/RamRoleTest获取STS临时凭证,其中路径最后为实例名。
    6.png

    基于临时凭证访问OSS

    1. 命令行输入pip install oss2安装OSS python SDK
    2. 执行下述命令进行测试,其中oss2.StsAuth中的前三个参数分别对应于上述URL返回的AccessKeyId、AccessKeySecret和SecurityToken。
    import oss2
    from itertools import islice
    
    auth = oss2.StsAuth(<AccessKeyId>, <AccessKeySecret>, <SecurityToken>)
    bucket = oss2.Bucket(auth, "oss-cn-qingdao.aliyuncs.com", "bozhi-qd")
    
    for b in islice(oss2.ObjectIterator(bucket), 10):
        print(b.key)
    

    7.png

    相关文档

    1. 支持RAM的云服务列表
    2. RAM产品文档
    3. RAM中可对ECS资源进行授权的Action
    4. ECS实例元数据
    5. OSS STS授权访问
    6. OSS python SDK管理文件

    原文链接

  • 相关阅读:
    javascript运算符
    javascript字符串转数字
    javascript的变量声明和数据类型
    javascript的历史和入门
    CSS中定位
    CSS中盒子模型
    CSS操作表格的边框和表格的属性示例代码
    常用的CSS样式示例代码
    CSS伪类选择器
    CSS选择器
  • 原文地址:https://www.cnblogs.com/iyulang/p/6957031.html
Copyright © 2011-2022 走看看