云服务器ecs 外网访问 通过ECS实例RAM角色授权ECS访问其他云资源

当ECS实例或部署在ECS实例上的应用需要访问其他云资源时,必须先通过访问凭证来验证身份信息和访问权限。实例RAM角色允许您将一个角色关联到ECS实例

当ECS实例或部署在ECS实例上的应用需要访问其他云资源时,必须先通过访问凭证来验证身份信息和访问权限。实例RAM角色允许您将一个角色关联到ECS实例,使ECS实例及其上的应用基于STS临时凭证访问其他云资源,无需透露长期AccessKey,既可减少密钥泄露的风险,也可借助访问控制RAM精细化控制资源访问权限,避免权限过度分配。本文主要介绍如何创建实例RAM角色并授予给ECS实例,以及如何基于实例RAM角色获取临时访问凭证

说明

实例RAM角色是一种可信实体为阿里云服务的RAM角色,即允许云服务扮演的角色,用于解决跨服务访问问题。关于RAM角色的详细说明,请参见。

功能优势

基于实例RAM角色获取临时访问凭证验证身份信息和访问权限控制,有以下优势:

使用限制

为ECS实例授予实例RAM角色存在以下限制:

创建实例RAM角色并授予给ECS

重要

若您的账户为RAM用户(子账号),请先联系阿里云账号(主账号)获取使用和配置实例RAM角色的权限。具体操作,请参见授权RAM用户使用ECS资源。

权限策略参考如下

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

通过控制台创建和授予

登录RAM控制台,创建实例RAM角色并为其授权。

创建可信实体为阿里云服务的RAM角色。

选择身份管理 > 角色,单击创建角色,按照界面提示完成角色创建。注意以下参数(其他参数按需填写,可参见):

为已创建的实例RAM角色授权。

将系统策略或已创建的自定义权限策略授权给RAM用户,使其拥有相关的资源访问或操作权限。例如,授予RAM角色访问OSS的权限AliyunOSSReadOnlyAccess。

说明

支持添加系统策略或自定义策略。若系统策略不满足您的需求,可新建自定义策略。具体操作,请参见创建自定义权限策略。

授予实例RAM角色给ECS实例。

登录ECS管理控制台。

在左侧导航栏,选择实例与镜像 > 实例。

在页面左侧顶部,选择目标资源所在的资源组和地域。

找到要操作的ECS实例,选择

> 实例设置 > 授予/收回RAM角色。

在对话框中,选择创建好的实例RAM角色,单击确定完成授予。

通过API创建和授予

创建并配置实例RAM角色

调用CreateRole接口创建实例RAM角色。

按如下策略设置参数AssumeRolePolicyDocument:

{     "Statement": [     {         "Action": "sts:AssumeRole",         "Effect": "Allow",         "Principal": {         "Service": [         "ecs.aliyuncs.com"         ]         }     }     ],     "Version": "1" }

(可选)调用接口新建权限策略。

如果您已有可用权限策略,可跳过该步骤。

PolicyDocument(权限策略)需按如下设置:

{     "Statement": [         {         "Action": [             "oss:Get*",             "oss:List*"         ],         "Effect": "Allow",         "Resource": "*"         }     ],     "Version": "1" }

调用接口为实例RAM角色授权。

调用接口将RAM角色授予给ECS实例。

基于实例RAM角色获取临时访问凭证

方式一:在SDK中通过Credentials工具获取

Credentials工具会自动获取ECS实例绑定的实例RAM角色,并调用ECS的元数据服务(Meta Data Server)获取临时访问凭证,该凭证会周期性更新。

重要

通过Credentials工具获取实例RAM角色的访问凭证,需要先安装Credentials工具。

sudo pip install alibabacloud_credentials

下文以Python和Java SDK为例,更多语言SDK示例,请参见。

from alibabacloud_credentials.client import Client as CredClientfrom alibabacloud_credentials.models import Config as CredConfigcredentialsConfigig = CredConfig(	type='ecs_ram_role',	# 选填,该ECS角色的角色名称,不填会自动获取,但是建议加上以减少请求次数	role_name='')credentialsClient = CredClient(CredConfig)

import com.aliyun.credentials.Client;import com.aliyun.credentials.models.Config;public class DemoTest {    public static void main(String[] args) throws Exception {        Config credentialConfig = new Config();        credentialConfig.setType("ecs_ram_role");        // 选填,该ECS角色的角色名称,不填会自动获取,但是建议加上以减少请求次数        credentialConfig.setRoleName("");        Client credentialClient = new Client(credentialConfig);    }}

方式二:直接访问元数据服务器获取

某些场景,如果您没有适配Credentials工具,或需要在脚本中基于实例RAM角色来获取资源临时访问凭证,可直接在实例内部访问元数据服务器获取。

说明

通过元数据服务,您无需登录控制台或调用API,在实例内部即可获取实例信息。详细说明,请参见实例元数据。

加固模式

:实例RAM角色的临时授权访问凭证是通过元数据服务器获取的,在获取实例RAM角色的临时授权访问凭证之前,先获取元数据服务器的访问凭证并设置其有效期,以加强数据安全。超过有效期后,需要重新获取凭证,否则无法获取实例RAM角色的临时授权访问凭证。

取值范围为1~21600,单位为秒。详细说明,请参见实例元数据。

:需替换为具体的实例RAM角色名称。例如EcsRamRoleDocumentTesting。

普通模式

返回示例如下所示,其中:

收回/更改ECS的实例RAM角色

通过控制台收回/更改

登录ECS管理控制台。

在左侧导航栏,选择实例与镜像 > 实例。

在页面左侧顶部,选择目标资源所在的资源组和地域。

找到要操作的ECS实例,选择

> 实例设置 > 授予/收回RAM角色。

通过API收回/更改

应用示例:使用实例RAM角色访问其他云资源

下文以部署在Linux ECS实例上的Python应用程序访问OSS下载图片为例,为您介绍如何通过ECS及部署 ECS实例上的应用如何通过实例RAM角色访问其他云资源。

准备工作。

已创建ECS实例RAM角色,授予所需资源的访问权限(本文示例AliyunOSSReadOnlyAccess),并将该实例RAM角色授予给ECS实例。

具体操作,可参见。

ECS实例所在的地域已创建了OSS存储空间(Bucket),并记录Bucket名称和EndPoint,可在Bucket概览页获取。具体操作,请参见创建存储空间。

重要

若需通过外网访问OSS,请确保ECS实例已开通公网。您可以通过更改带宽或绑定EIP方式开通IPv4公网。具体操作,请参见修改固定公网带宽或。

image

image

已上传图片到OSS存储空间(Bucket)。具体操作,请参见。

远程连接ECS实例,安装OSS Python SDK和alibabacloud_credentials。

说明

升级pip和setuptools、wheel工具。

sudo pip3 install --upgrade pip setuptools wheel

安装credentials工具。

sudo pip3 install alibabacloud_credentials  

安装OSS SDK依赖的python-devel包。

sudo yum install python3-devel 

安装OSS Python SDK。

sudo pip3 install oss2 

使用实例RAM角色作为临时凭证访问OSS,并下载图片。

Python示例代码如下(部分信息需参考注释,按实际情况替换):

import oss2from alibabacloud_credentials.client import Clientfrom alibabacloud_credentials.models import Configfrom oss2 import CredentialsProviderfrom oss2.credentials import Credentialsclass CredentialProviderWarpper(CredentialsProvider):    def __init__(self, client):        self.client = client    def get_credentials(self):        access_key_id = self.client.get_access_key_id()        access_key_secret = self.client.get_access_key_secret()        security_token = self.client.get_security_token()        return Credentials(access_key_id, access_key_secret, security_token)def download_image_using_instance_role(bucket_name, endpoint, object_key, local_file, role_name):    config = Config(        type='ecs_ram_role',      # 访问凭证类型。固定为ecs_ram_role。        role_name=role_name    )    cred = Client(config)    credentials_provider = CredentialProviderWarpper(cred)    auth = oss2.ProviderAuth(credentials_provider)    # 初始化 OSS Bucket 对象    bucket = oss2.Bucket(auth, endpoint, bucket_name)    # 下载图片到本地    bucket.get_object_to_file(object_key, local_file)    print("Image downloaded successfully")if __name__ == "__main__":      # 定义全局变量    role_name = 'role_name'  # 需替换为实例RAM角色名称    bucket_name = 'bucket_name'  # 需替换为Bucket名称    endpoint = 'http://oss-cn-beijing-internal.aliyuncs.com'  # 需替换为OSS Bucket的Endpoint    object_key = 'testfolder/example.png'  # 需替换为你要下载的图片在OSS中的完整存储路径(不包含Bucket名称)    local_file = '/localpath/to/image.png'  # 需替换为图片需要在ECS上存储的根路径,并定义图片名称    download_image_using_instance_role(bucket_name, endpoint, object_key, local_file, role_name)

运行Python代码。

python3 /localpath/to/demo.py  #需替换为python代码的根路径

运行成功,则输出。

验证图片是否下载成功。

 cd  /localpath/to/            #需替换为图片在ECS上存储的上级路径 ls

当目录中存在文件image.png,则成功下载。

相关文档

原创文章,作者:筱凯,如若转载,请注明出处:https://www.jingyueyun.com/ask/134.html

(0)
筱凯筱凯
上一篇 2024 年 7 月 10 日
下一篇 2024 年 7 月 10 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,500M大带宽限量抢购  >>点击进入