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

借助于实例 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"
}

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

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

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

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

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。

如果您希望授权子账号创建指定 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

原文链接

时间: 2024-08-30 21:08:19

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

阿里云服务器ECS安装linux CentOS 6.8教程

一.先登录你的阿里云账号.前提是你要有云服务器,怎么购买我们这里就不写教程了.登录进去以后点击管理控制台,点击云服务器ECS 二.然后点击实例 三.找到需要修改装系统的实例 点击管理 四.如果服务器还在运行,先停止掉,然后点击更换系统盘. 五.选择公共镜像-->选择CentOS 版本这里我们选择的是6.8 64位.登录名默认root.设置登录密码点击确定更换.如果你的阿里云账号绑定了手机,这里需要手机验证码. 输入验证码以后更换成功 点击查看,他正在启动中,等待一会... 六.大概30秒以后启动

云服务器 ECS 服务器访问异常问题排查指引

因各种因素,用户通过私网或本地公网访问云服务器 ECS 上相关业务时,可能出现访问异常的情况.本文先对整个链路上,可能引发访问异常的相关因素及症状进行说明,然后阐述了出现异常时的排查思路及处理办法.最后对工单提交时的注意事项进行了说明.  注:本文相关说明不考虑阿里云 CDN 或第三方 CDN 网络相关因素的影响.   ECS 访问异常关联因素及症状示意图 从客户端到服务端的整个链路上,可能引发访问异常的相关因素主要如下ECS 访问异常关联因素示意图所示: 相关因素可能导致的症状,主要如下ECS

云服务器ECS是什么鬼?看完这篇就懂了

近十年来,云计算概念大肆崛起,而作为一个新兴概念很多专业概念还不为人熟知,比如云服务器ecs就是其中一个.云服务器ecs作为一个专有名词频繁出现在搜索榜单中.那么今天笔者就与大家聊一聊这看似高深莫测的云服务器ecs究竟是什么鬼? 为了更好地了解云服务器ecs,我们可以想一下平时这个专业名词的应用场景.仔细回想,你会发现,似乎和云服务器没什么太大的差别.的确如此. 云服务器ecs的概念与作用 云服务器(Elastic Compute Service,简称 ECS)是一种简单高效.处理能力可弹性伸缩

云服务器 ECS 安全 &gt; ECS数据安全最佳实践

ECS数据安全最佳实践 本文档从云服务器ECS使用的角度出发,结合相关产品和运维架构经验,介绍如何打造云端的数据安全. 适用对象 本文档适用于刚开始接触阿里云的个人或者中小企业用户. 主要内容 定期备份数据 合理设计安全域 安全组规则设置 登录口令设置 服务器端口安全 系统漏洞防护 应用漏洞防护 安全情报收集 定期备份数据 数据备份是容灾的基础,目的是降低因系统故障.操作失误.以及安全问题而导致数据丢失的风险.云服务器ECS自带有快照备份的功能,合理运用ECS快照功能即可满足大部分用户数据备份的

云服务器 ECS 数据恢复:磁盘空间满的问题处理(Windows /Linux ) 及最佳实践

磁盘空间满的问题处理(Windows /Linux ) 及最佳实践 磁盘空间满的问题处理(Windows /Linux)及最佳实践 本文主要介绍window.Linux系统磁盘空间不足时对应的处理方法. 适用对象 适用于使用阿里云ECS的用户. 主要内容 云服务器 ECS Linux磁盘空间满排查处理 云服务器 ECS window磁盘空间满排查处理 ECS Linux磁盘空间满排查处理 Windows磁盘空间满排查处理 解决Windows磁盘空间满的问题,有以下处理方式: 释放磁盘空间 扩充磁

云服务器ECS安全组实践(一)

应用上云除了对资源生命周期管理和应用交付是一个转变,更重要是思维方式的转变.本篇文章就简单介绍下上云的一个重要概念安全组(Security Group).本文是安全组系列的第一篇,主要介绍安全组的基本概念.约束和如何配置入网规则. 安全组的基本概念和约束 安全组在云端提供类似虚拟防火墙功能,用于设置单个或多个 ECS 实例的网络访问控制,它是重要的安全隔离手段.在创建 ECS 实例时,必须选择一个安全组.您还可以添加安全组规则,对该安全组下的所有 ECS 实例的出方向和入方向进行网络控制. 安全

云服务器 ECS 安全:如何提高ECS实例的安全性

如何提高ECS实例的安全性 云服务器 ECS 实例是一个虚拟的计算环境,包含了 CPU.内存.操作系统.磁盘.带宽等最基础的服务器组件,是 ECS 提供给每个用户的操作实体. 我们基本可以理解为一个实例就等同于一台虚拟机,那么我们在本地维护的虚拟机一般会做虚拟机实例级别的安全防护,以防止虚拟机被攻击和入侵等.同样的,云上的ECS实例也需要做安全性防护. ECS实例放置在云上,除了置身于阿里云自身的安全平台外,用户也需要根据实际的需求进一步定制化安全,所以说ECS的安全是阿里云和用户共同构建的.如

ECS实例RAM角色实践

ECS实例RAM角色快速入门 概述 以往部署在ECS实例中的应用程序如果需要访问阿里云其他云产品的API,通常需要借助于AccessKeyId和AccessKeySecret(下文简称AK)来实现.AK是用户访问阿里云API的密钥,具有相应账户的完整权限.但是为了方便应用程序对AK的管理,用户通常需要将AK保存在应用程序的配置文件中或以其他方式保存在实例中.这在一定程度上增加了AK管理上的复杂性且降低了AK的保密性,尤其是对有多地域一致性部署需求的用户,AK将随着镜像及镜像创建的实例扩散出去.在

云服务器 ECS 镜像迁移:应用迁云之镜像迁移-(5)阿里云上跨VPC和区域、账号镜像迁移实践

应用迁云之镜像迁移-(5)阿里云上跨VPC和区域.账号镜像迁移实践 目前,阿里云上的镜像迁移主要需求场景如下: 跨VPC迁移ECS实例比如从VPC A迁移到VPC B环境中. 跨区域迁移ECS实例比如从上海区域迁移到杭州区域. 跨账号迁移ECS实例比如从账号A迁移到账户B. 阿里云提供ECS实例快照和自定义镜像,支持系统盘和数据盘的功能,并且自定义镜像可以跨区域复制和共享给其他账号使用.基于这些功能特性,您可以实现跨VPC.跨区域.跨账号的镜像迁移. 跨VPC镜像迁移流程如下: 跨区域镜像迁移流