You need to enable JavaScript to run this app.
导航

使用实例IAM角色访问其他云产品

最近更新时间2023.07.18 20:38:38

首次发布时间2023.07.18 20:38:38

前言

借助ECS实例IAM角色,使实例内部的应用程序可以使用STS临时凭证访问其他云产品

关于实验

预计部署时间:30分钟
级别:初级
相关产品:ECS
受众: 通用

环境说明

  1. 如果还没有火山引擎账号,点击此链接注册账号

  2. 如果您还没有VPC,请先点击链接创建VPC

  3. 云服务器ECS:Centos 7

  4. 在ECS主机上准备 Python 运行环境


实验步骤

步骤1:创建 ECS 实例

参考如下链接,进行 ECS 实例的创建,这里不在赘述
通过向导购买实例

步骤2:创建 IAM 角色并配置信任服务和授权策略

  1. 进入'访问控制'页面,选择角色, 新建角色 Ecs_Sts_role



  1. 编辑角色信任关系为如下策略
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Principal": {
                "Service": [
                    "ecs",
                    "Volc_ECS"
                ]
            }
        }
    ]
}
  1. 给角色绑定如下自定义策略(可自行根据需求调整自定义策略)
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "tos:*"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "Volc_InfluxDB_Proxy:Write"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

步骤3:调用实例IAM 角色附加到一个已创建的ECS

调用ECS的API接口AssociateInstancesIamRole,将角色赋予实例,接口详情文档
角色名字为:Ecs_Sts_role

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

[root@lxb-jms TOS]# curl -sq  http://100.96.0.96/volcstack/latest/iam/security_credentials/Ecs_Sts_role |jq
{
  "ExpiredTime": "2022-11-09T15:48:00+08:00",
  "CurrentTime": "2022-11-09T09:48:00+08:00",
  "AccessKeyId": "AKTPOGU3NWE5NTY5NDU2NDkwMTg2MWExMzEwNWQxMDY1NzI",
  "SecretAccessKey": "NmZiYmRiOTk0MGEyNDhjNjgwZDMyODJkMDg3ZDRlNjA",
  "SessionToken": "STSeyJBY2NvdW50SWQiOjIxMDAxOTg2NDQsIklkZW50aXR5VHlwZSI6NCwiSWRlbnRpdHlJZCI6MTM4NDc2MSwiQ2hhbm5lbCI6IlZvbGNfRUNTIiwiQWNjZXNzS2V5SWQiOiJBS1RQT0dVM05XRTVOVFk1TkRVMk5Ea3dNVGcyTVdFeE16RXdOV1F4TURZMU56SSIsIlNpZ25lZFNlY3JldEFjY2Vzc0tleSI6ImtKUzI4UXRvSkk0dzFYNHNubCtxMzFJMm5TSGlMQVZwSGpWODRieGlqUjAweG9yRGovT2JRTks3dHJuK2VWTTAiLCJFeHBpcmVkVGltZSI6MTY2Nzk4MDA4MCwiUG9saWN5U3RyaW5nIjoiIiwiU2lnbmF0dXJlIjoiZTUwMGM3MzM3MjViY2E3NjQzMWM2NTZjYjMwOWYxYmVkMDhiMzBkZjhmNTExYTdkNmE2NGU3ZTMzNWYwNzkwYiIsIlNlc3Npb25OYW1lIjoiZWNzOmkteWJ1YmVqYWI0cjM4ZGdhNHhhZ2w6MTEtMDkgMDk6NDg6MDAiLCJPcmlnaW5hbElkZW50aXR5VHlwZSI6M30="
}

注意临时 token 的有效期,程序中需要定时获取并自行提取临时认证信息

步骤5: 基于临时凭证,访问TOS文件

示例代码如下:

  1. $ak: 步骤4获取的到临时access key

  2. $sk: 步骤4获取到的临时secret key

  3. $sesson_token: 步骤4 获取到的session_token

[root@lxb-jms TOS]# cat tos.py
import boto3

service_name = 's3'
endpoint_url = 'https://tos-s3-cn-beijing.ivolces.com'
region_name = 'cn-beijing'
access_key = '$ak'
secret_key = '$sk'
session_token  = '$session_token'

if __name__ == "__main__":
    s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key,
                      aws_secret_access_key=secret_key,aws_session_token=session_token)

    response = s3.list_buckets()
    
    for bucket in response.get('Buckets', []):
        print(bucket.get('Name'))
[root@lxb-jms TOS]# python3 tos.py 
lxb-bucket


如果您有其他问题,欢迎您联系火山引擎技术支持服务