云服务器 ECS 最佳实践:借助于实例 RAM 角色访问其它云产品 API

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
对象存储 OSS,20GB 3个月
云服务器ECS,u1 2核4GB 1个月
简介:


借助于实例 RAM 角色访问其它云产品 API

概述

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

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

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

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

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

操作步骤

1. 创建 RAM 角色并配置授权策略

按以下步骤创建 RAM 角色并配置授权策略。

1.创建 RAM 角色。找到 OpenAPI Explorer RAM 产品下 CreateRole API。其中:

  • RoleName:设置角色的名称。根据自己的需要填写,本示例中为 EcsRamRoleTest。
  • AssumeRolePolicyDocument: 填写如下内容,表示该角色为一个服务角色,受信云服务(本示例中为 ECS)可以扮演该角色。
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
  "Service": [
    "ecs.aliyuncs.com"
  ]
}
}
],
"Version": "1"
}


image

2.创建授权策略。找到 OpenAPI Explorer RAM 产品下 CreatePolicy API。其中:

  • PolicyName:设置授权策略的名称。本示例中为 EcsRamRolePolicyTest。
  • PolicyDocument:输入授权策略内容。本示例中填写如下内容,表示该角色具有 OSS 只读权限。
{
"Statement": [
{
"Action": [
  "oss:Get*",
  "oss:List*"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}


image

3.为角色附加授权。找到 OpenAPI Explorer RAM 产品下 AttachPolicyToRole API。其中:

  • PolicyType:填写 Custom。
  • PolicyName:填写第 2 步创建的策略名称,如本示例中的 EcsRamRolePolicyTest。
  • RoleName:填写第 1 步创建的角色名称,如本示例中的 EcsRamRoleTest。


image


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

按以下步骤指定 RAM 角色创建并设置 ECS 实例。

1.创建实例。找到 OpenAPI Explorer ECS 产品下的 CreateInstance API,根据实际情况填写请求参数。必须填写的参数包括:

  • RegionId:实例所在地域。本示例中为 cn-hangzhou。
  • ImageId:实例的镜像。本示例中为 centos_7_03_64_40G_alibase_20170503.vhd。
  • InstanceType:实例的规格。本示例中为 ecs.xn4.small。
  • VSwitchId:实例所在的 VPC 网络虚拟交换机。因为 ECS 实例 RAM 角色目前只支持 VPC 网络的实例,所以 VSwitchId 是必需的。
  • RamRoleName:RAM 角色的名称。本示例中为 EcsRamRoleTest。


image


如果您希望授权子账号创建指定 RAM 角色的 ECS 实例,那么子账号除了拥有创建 ECS 实例的权限之外,还需要增加 PassRole 权限。所以,您需要创建一个如下所示的自定义授权策略并绑定到子账号上。如果是创建 ECS 实例,[ECS RAM Action] 可以是 ecs:CreateInstance,您也可以根据实际情况添加更多的权限,详见 RAM 中可对 ECS 资源进行授权的 Action。如果您需要为子账号授予所有 ECS 操作权限,[ECS RAM Action] 应该替换为 ecs:*。

{
"Statement": [
{
"Action": "[ECS RAM Action]", 
"Resource": "*",
"Effect": "Allow"
},
{
"Action": "ram:PassRole",
"Resource": "*",
"Effect": "Allow"
],
"Version": "1"
}

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

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

3. 在实例内部访问实例元数据 URL 获取 STS 临时凭证

按以下步骤获取实例的 STS 临时凭证。

1.远程连接实例。

2.访问 http://100.100.100.200/latest/meta-data/ram/security-credentials/EcsRamRoleTest 获取 STS 临时凭证。路径最后一部分是 RAM 角色名称,您应替换为自己的创建的 RAM 角色名称。

本示例中使用 curl 命令访问上述 URL。如果您使用的是 Windows ECS 实例,参考 ECS 用户指南 的 实例元数据 获取 STS 临时凭证。

示例输出结果如下:

[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"
}

4. 基于临时凭证,使用 Python SDK 访问 OSS

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

前提条件

您已经远程连接到 ECS 实例。

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

您在实例所在的地域已经创建了存储空间(Bucket),并已经获取 Bucket 的名称和 Endpoint。本示例中,Bucket 名称为 ramroletest,Endpoint 为 oss-cn-hangzhou.aliyuncs.com。

操作步骤

按以下步骤使用 Python SDK 访问 OSS。

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

2.如果您用的是 Windows ECS 实例,参考 对象存储 OSS SDK 参考 的 安装 Python SDK。
执行下述命令进行测试,其中:

  • oss2.StsAuth 中的 3 个参数分别对应于上述 URL 返回的 AccessKeyId、AccessKeySecret 和 SecurityToken。
  • oss2.Bucket 中后 2 个参数是 Bucket 的名称和 Endpoint。
import oss2
from itertools import islice
auth = oss2.StsAuth(<AccessKeyId>, <AccessKeySecret>, <SecurityToken>)
bucket = oss2.Bucket(auth, <您的 Endpoint>, <您的 Bucket 名称>)
for b in islice(oss2.ObjectIterator(bucket), 10):
  print(b.key)

示例输出结果如下。

[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.sh

原文链接

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
12天前
|
弹性计算 大数据 数据处理
阿里云服务器实例哪些属于入门级,哪些是企业级?有何区别?
阿里云服务器的实例规格从级别上来说分为入门级和企业级,从实例规格种类上来说,又分为突发性能型、共享型、计算型、通用型、内存型、大数据型等,2024年截止目前在阿里云的活动中,可选的云服务器实例规格有轻量应用服务器、经济型e、通用算力型u1、计算型c7、计算型c7a、计算型c8a、计算型c8y、通用型g7、通用型g7a、通用型g8a、通用型g8i、通用型g8y、内存型r7、内存型r8y等,有的新手用户不是很清楚2024年阿里云活动中的云服务器实例哪些属于入门级,哪些是企业级?有何区别?下面根据官方的各种资料介绍为大家解答下这些疑问,帮助您能更清楚地了解阿里云服务器,快速找到自己对云服务器产品的需
阿里云服务器实例哪些属于入门级,哪些是企业级?有何区别?
|
1天前
|
编解码 缓存 安全
阿里云目前活动内各云服务器实例规格适用场景与价格参考
目前阿里云的活动中,云服务器有多种不同实例规格可选,实例规格定义了实例的基本属性:CPU和内存(包括CPU型号、主频等),但是不同实例规格所适用的场景是不一样的,价格也有很大差别,有的用户初次选购阿里云服务器可能并不知道这些实例规格的具体适用场景,下面是小编整理汇总的2024年截止目前阿里云的活动中云服务器实例规格适用场景与活动价格,以供参考。
阿里云目前活动内各云服务器实例规格适用场景与价格参考
|
8天前
|
弹性计算 供应链
阿里云服务器付费模式包年包月、按量付费、抢占式实例选择说明
阿里云ECS提供包年包月、按量付费和抢占式实例三种计费方式。选择建议:稳定需求选包年包月,动态需求选按量付费,无状态应用选抢占式实例以降低成本。可结合使用按量付费、预留实例券和节省计划以平衡灵活性和成本。需要资源保障则组合按量付费和资源保障。具体详情和规定可参考阿里云ECS官方文档
39 7
|
9天前
|
存储 弹性计算 运维
深度解读:阿里云服务器ECS经济型e实例配置整理和性能参数表
阿里云推出经济型ECS e系列服务器,适用于个人开发者、学生和小微企业。该系列采用Intel Xeon Platinum处理器,支持多种CPU内存配比,性价比高,2核2G3M配置只需99元/年,新老用户不限量购买且续费不涨价。提供相同可用性SLA和安全标准,具备ESSD Entry云盘等企业级特性。适合中小型网站、开发测试和轻量级应用
|
10天前
|
存储 弹性计算 运维
阿里云服务器ECS经济型e实例特点、适用场景和使用常见问题解答
阿里云新推经济型e系列服务器,适用于个人开发者、学生和小微企业。该系列基于Intel Xeon Platinum处理器,提供1:1、1:2、1:4内存比选项,性价比高,不限购,续费不涨价。2核2G3M配置只需99元/年,企业用户2核4G5M服务器199元/年。具备价格优惠、品质保障、充足供应和多样化配置等特点。支持IPv4/IPv6,仅限专有网络VPC。实例规格和性能指标详表见原文,适合中小型网站、开发测试和轻量级应用。更多信息访问阿里云ECS页面。
|
10天前
|
弹性计算 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使用阿里云API或SDK从函数计算调用ECS实例的服务如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
37 4
|
10天前
|
存储 弹性计算 运维
阿里云服务器ECS经济型e实例详细介绍
阿里云新推经济型e系列服务器,适用于个人开发者、学生和小微企业。该系列采用Intel Xeon Platinum处理器,支持多种CPU内存配比,性价比高,不限购,续费不涨价。2核2G3M配置仅需99元/年,企业用户2核4G5M服务器199元/年。具备价格优势、品质保障和充足供应,但性能可能不及企业级实例。支持IPv4/IPv6,仅限专有网络VPC。更多规格和性能指标可见官方文档。
阿里云服务器ECS经济型e实例详细介绍
|
13天前
|
API 数据库
工作流JBPM操作API启动实例&查询任务
工作流JBPM操作API启动实例&查询任务
15 0
|
15天前
|
缓存 开发框架 .NET
阿里云服务器经济型e和通用算力型u1实例与轻量应用服务器区别及选择参考
在目前阿里云的活动中,价格比较优惠的云服务器有轻量应用服务器和经济型e和通用算力型u1实例的云服务器,尤其是轻量应用服务器2核2G3M带宽61元1年,经济型e实例2核2G3M带宽99元1年,通用算力型u1实例2核4G5M带宽199元1年,是用户关注度最高的几款云服务器。有的新手用户由于是初次使用阿里云服务器,对于轻量应用服务器和经济型e和通用算力型u1实例的相关性能并不是很清楚,本文为大家做个简单的介绍,以供参考。
阿里云服务器经济型e和通用算力型u1实例与轻量应用服务器区别及选择参考
|
8天前
|
存储 弹性计算 固态存储
阿里云服务器CPU内存配置详细指南,如何选择合适云服务器配置?
阿里云服务器配置选择涉及CPU、内存、公网带宽和磁盘。个人开发者或中小企业推荐使用轻量应用服务器或ECS经济型e实例,如2核2G3M配置,适合低流量网站。企业用户则应选择企业级独享型ECS,如通用算力型u1、计算型c7或通用型g7,至少2核4G配置,公网带宽建议5M,系统盘可选SSD或ESSD云盘。选择时考虑实际应用需求和性能稳定性。
108 6