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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 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.访问 获取 STS 临时凭证。路径最后一部分是 RAM 角色名称,您应替换为自己的创建的 RAM 角色名称。

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

示例输出结果如下:

[root@local ~]# curl 
{
   
"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

原文链接

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
22天前
|
弹性计算 监控 负载均衡
|
2天前
|
存储 人工智能 编解码
阿里云服务器计算型c8i、通用型g8i和计算型c8a、通用型g8a实例区别及选择参考
在选择阿里云服务器计算型和通用型实例规格的时候,有的用户不清楚计算型c8i、通用型g8i与计算型c8a、通用型g8a实例的区别,他们都是采用阿里云全新CIPU架构,可提供稳定的算力输出、更强劲的I/O引擎以及芯片级的安全加固。但是计算型c8i和通用型g8i实例用的是Intel处理器,计算型c8a和通用型g8a实例用的是AMD处理器。本文将详细介绍阿里云服务器计算型c8i、通用型g8i与计算型c8a、通用型g8a实例各自的性能和区别,以及适合的用户群体,帮助用户更好地选择适合自己的云服务器实例。
|
5天前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c8i实例解析:实例规格性能及使用场景和最新价格参考
计算型c8i实例作为阿里云服务器家族中的重要成员,以其卓越的计算性能、稳定的算力输出、强劲的I/O引擎以及芯片级的安全加固,广泛适用于机器学习推理、数据分析、批量计算、视频编码、游戏服务器前端、高性能科学和工程应用以及Web前端服务器等多种场景。本文将全面介绍阿里云服务器计算型c8i实例,从规格族特性、适用场景、详细规格指标、性能优势、实际应用案例,到最新的活动价格,以供大家参考。
|
10天前
|
存储 弹性计算 缓存
阿里云服务器通用型g8i实例性能与使用场景介绍及最新收费标准参考
阿里云ECS通用型g8i服务器采用阿里云全新CIPU架构,可提供稳定的算力输出、更强劲的I/O引擎以及芯片级的安全加固。ECS通用型g8i实例支持开启或关闭超线程配置,单台g8i实例最高支持100万IOPS。阿里云ECS通用型g8i实例CPU采用Intel®Xeon®Emerald Rapids或者Intel®Xeon®Sapphire Rapids,主频不低于2.7 GHz,全核睿频3.2GHz。本文为大家介绍通用型g8i实例性能与使用场景介绍及最新收费标准,以供参考。
|
15天前
|
SQL 缓存 测试技术
构建高性能RESTful API:最佳实践与避坑指南###
—— 本文深入探讨了构建高性能RESTful API的关键技术要点,从设计原则、状态码使用、版本控制到安全性考虑,旨在为开发者提供一套全面的最佳实践框架。通过避免常见的设计陷阱,本文将指导你如何优化API性能,提升用户体验,确保系统的稳定性和可扩展性。 ###
54 12
|
29天前
|
数据可视化 API 索引
ES常见Index API操作最佳实践!
【10月更文挑战第21天】
59 1
ES常见Index API操作最佳实践!
|
11天前
|
弹性计算 缓存 数据挖掘
阿里云服务器经济型e和通用算力型u1实例区别及选择参考
在阿里云目前的活动中,经济型e和通用算力型u1实例是两个比较热门的云服务器实例规格,收费标准相对其他计算型、通用型和内存型实例来说要更低一些,经济型e实例ECS云服务器2核2G3M带宽新购和续费都是99元1年,通用算力型u1实例2核4G5M带宽新购和续费都只要199元1年、4核8G云服务器955.58元1年。有的新手用户并不清楚他们之间的区别及如何选择,本文将介绍阿里云服务器中的经济型e实例和通用算力型u1实例的特点、区别以及新手选择参考。
|
19天前
|
存储 缓存 安全
阿里云服务器内存型r7、r8a、r8y、r8i实例区别及选择参考
随着阿里云2024年金秋云创季的开始,目前在阿里云的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y和内存型r8i这几个实例规格,相比于活动内的经济型e和通用算力型u1等实例规格来说,这些实例规格等性能更强,虽然这几个实例规格的云服务器通常处理器与内存的配比为都是1:8,但是他们在处理器、存储、网络、安全等方面等性能并不是一样的,所以他们的适用场景也有着不同。本文为大家介绍内存型r7、r8a、r8y、r8i实例的性能、适用场景的区别以及选择参考。
|
16天前
|
JSON 缓存 API
构建高效RESTful API的最佳实践
【10月更文挑战第34天】在数字时代的浪潮中,后端开发扮演着至关重要的角色。本文将带你深入探索如何构建高效的RESTful API,从设计原则到实际编码技巧,再到性能优化和错误处理,我们将一一解锁这些技能。你将学会如何打造一个既优雅又强大的后端服务,让你的应用程序在激烈的市场竞争中脱颖而出。那么,让我们一起踏上这段精彩的旅程吧!
28 2
|
22天前
|
机器学习/深度学习 弹性计算 编解码
阿里云服务器c7/c8a/c8y/c8i/g7/g8a/g8y/g8i/r7/r8a/r8y/r8i实例区别及选择参考
在阿里云目前的活动中,除了特价的轻量应用服务器和经济型e及通用算力型u1实例之外,属于计算型实例的实例有计算型c7/c8a/c8y/c8i,属于通用型实例的有通用型g7/g8a/g8y/g8i,属于内存型实例的有内存型r7/r8a/r8y/r8i。本文将详细介绍阿里云服务器中的c7、c8a、c8y、c8i、g7、g8a、g8y、g8i、r7、r8a、r8y、r8i等实例规格的性能、适用场景及选择参考,帮助用户更好地选择合适的云服务器实例。
下一篇
无影云桌面