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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
对象存储OSS,敏感数据保护2.0 200GB 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

原文链接

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
10天前
|
弹性计算
学生申请阿里云服务器流程,云工开物免费领取云服务器
学生可免费领取或低价购买阿里云服务器。通过“云工开物”计划,学生可申领300元无门槛代金券,用于购买指定云服务器产品。新用户可选38元/年的轻量应用服务器,老用户可选99元/年的ECS服务器,续费同价。具体优惠及操作流程可参考阿里云官方页面。
|
24天前
|
存储 弹性计算 固态存储
如何给轻量服务器升级套餐配置?附上云服务器配置攻略
本文介绍了阿里云轻量应用服务器升级配置的流程及注意事项,并提供云服务器选型攻略。内容涵盖升级前的数据备份、操作步骤、系统盘扩容及机房限制等,同时结合业务类型、访问量、带宽、存储等因素,指导用户合理选择ECS实例规格与配置,助您高效稳定部署应用。
|
29天前
|
存储 弹性计算 运维
阿里云服务器ECS是什么?你真的了解吗?云服务器解析
阿里云服务器ECS是阿里云提供的虚拟服务器服务,用户可按需租赁使用,无需自建机房。它具备高可用、高安全、弹性伸缩、节约成本等优势,适用于网站搭建、数据应用、运维测试等多种场景。本文详解ECS组成、架构、使用方法及与传统服务器的区别。
128 1
|
1月前
|
存储 弹性计算 运维
阿里云服务器介绍:什么是ECS、使用场景及租用流程(图解)
阿里云服务器ECS是阿里云提供的虚拟化计算服务,用户可按需租赁使用,无需自建机房。它具备高可用、高安全、弹性伸缩、成本节约等优势,适用于网站搭建、数据应用、运维测试等多种场景。本文详解ECS组成、架构、使用方法及与传统服务器的区别。
313 3
|
1月前
|
存储 弹性计算 Linux
阿里云服务器从零到精通的购买指南,云服务器购买流程及注意事项参考
对于许多初次接触阿里云服务器的用户而言,如何选择云服务器配置以及在选购过程中有哪些注意事项,是新手用户比较关心的问题。本文为大家展示阿里云服务器选购的完整指南,涵盖了通过云服务器ECS产品页下单的详细步骤,以及通过阿里云的活动选购价格比较实惠的云服务器。重点是介绍每一步的注意事项,以供初次选购阿里云服务器的个人开发者和企业用户参考,尽量一次选购好,避免出现买错从新买的情况出现。
|
1月前
|
弹性计算
阿里云服务器租用费用:企业用配置推荐ECS u1性价比首选
阿里云企业专享服务器推荐ECS u1实例,2核4G配置,5M带宽,80G系统盘,年费199元,适合企业用户,续费同价。更多优惠配置可选,助力企业高效上云。
|
1月前
|
存储 弹性计算 安全
阿里云服务器购买价格:云服务器按量、包年包月收费标准与最新活动价格表参考
阿里云服务器按量、包年包月收费标准价格表参考,轻量应用云服务器2核2G38元1年起,经济型e实例2核2G3M带宽99元1年,通用算力型u1实例2核4G5M带宽199元1年。选择不同的实例规格,价格不一样,同时不同地域之间的云服务器价格也有所差异,下面是小编整理的阿里云服务器按量与包年包月收费标准和最新活动价格表,以供参考。
|
17天前
|
机器学习/深度学习 弹性计算 编解码
阿里云服务器4核8G配置:ECS实例规格、CPU型号及使用场景说明
阿里云4核8G服务器提供多种ECS实例规格,如高主频计算型hfc8i、ecs.c9i、计算型c8i、通用算力型u1、经济型e等,适配不同应用场景,涵盖高性能计算、AI推理、Web服务、数据分析等领域。
|
1月前
|
存储 弹性计算 运维
阿里云服务器全解析:ECS是什么、应用场景、租用流程及优缺点分析
阿里云ECS(Elastic Compute Service)是阿里云提供的高性能、高可用的云计算服务,支持弹性扩展、多样化实例类型和多种计费模式。适用于网站搭建、数据处理、运维测试等多种场景,具备分钟级交付、安全可靠、成本低、易运维等优势,是企业及开发者上云的理想选择。
331 5
|
1月前
|
弹性计算 负载均衡 安全
阿里云轻量应用服务器与ECS区别
阿里云轻量应用服务器与ECS云服务器对比:轻量版适合新手和小型应用,套餐化设计,含大流量,易上手但性能和灵活性有限;ECS为专业版,配置灵活,性能强,适合企业级应用,但操作复杂,生态丰富,按需计费。两者定位不同,适用于不同场景。

热门文章

最新文章