使用实例RAM角色可以在ECS实例内部无需配置AccessKey即可获取STS临时凭证(STS Token),从而调用其他云产品的API。
功能优势
-
安全便捷:无需在ECS上的代码或配置文件中保存AccessKey,通过实例元数据服务(Instance Metadata Service, IMDS)即可自动获取STS临时凭证调用API,从而降低AccessKey泄露的风险。
-
无缝切换:如需更换应用程序的RAM身份,只需在控制台调整授予ECS的RAM角色,无需修改代码或重启服务。
-
权限精细化:可以为不同的ECS实例分配不同的RAM角色,实现最小权限原则。
操作步骤
若使用RAM用户执行操作步骤,请确保该用户拥有 ram:CreateRole(创建角色)、ecs:AttachInstanceRamRole(授予角色)以及 ram:PassRole(传递角色)等权限。更多信息,请参见如何使用RAM用户给实例授予RAM角色?。
步骤一:创建RAM角色
为ECS实例创建一个RAM角色,并为其分配权限。
控制台
-
登录RAM控制台,选择身份管理 > 角色,单击创建角色,填写以下参数,单击确定。
-
信任主体类型:选择云服务。
-
信任主体名称:选择云服务器ECS / ECS。
-
-
在创建角色对话框,输入角色名称,然后单击确定。
创建成功的RAM角色默认没有任何权限,需要为该RAM角色授权。可将系统策略或已创建的自定义权限策略授权给RAM角色,使其拥有相关的资源访问或操作权限。具体操作,请参见管理RAM角色的权限。
API
-
调用CreateRole接口创建RAM角色。
信任策略参数(AssumeRolePolicyDocument):
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "ecs.aliyuncs.com" ] } } ], "Version": "1" } -
(可选)调用CreatePolicy接口新建权限策略。如果已有可用权限策略,可跳过该步骤。
PolicyDocument(权限策略)需按如下设置:{ "Statement": [ { "Action": [ "oss:Get*", "oss:List*" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" } -
调用AttachPolicyToRole接口为实例RAM角色授权。
步骤二:为ECS实例授予RAM角色
将创建好的角色身份赋予指定的ECS实例。
控制台
-
访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。
-
单击目标ECS实例ID,在实例详情页单击全部操作,选择。
-
在对话框中,操作类型选择授予,然后选择授予ECS实例的RAM角色,单击确定。
API
调用AttachInstanceRamRole接口将RAM角色授予ECS实例。
步骤三:验证角色授予是否成功
在集成应用前,确认ECS实例已成功获取角色身份。
控制台
-
登录ECS实例。
-
访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。
-
进入目标实例详情页,单击远程连接,选择通过Workbench远程连接。根据页面提示登录,进入终端页面。
-
-
查询实例当前被授予的角色名称。
该命令返回已授予的角色名称列表,用于验证角色是否成功绑定。
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/-
成功:若返回授予的角色名称,表示角色授予成功。
-
失败:
-
返回
404 Not Found:表示实例未被授予任何RAM角色。请返回步骤二,检查授予操作是否成功。 -
若命令无响应或连接超时:表示实例无法访问元数据服务。请检查安全组和防火墙是否拦截了IP地址
100.100.100.200。
-
-
API
调用DescribeInstanceRamRole接口查询ECS实例被授予RAM角色。
步骤四:在应用程序中集成
在应用程序中,可通过阿里云Credentials工具配合各语言的云产品SDK自动获取STS临时凭证。STS临时凭证每15分钟自动刷新,Credentials SDK内置刷新逻辑,应用无需处理过期逻辑。
如果使用加固模式,请确保您使用的SDK版本满足以下最低要求。
|
语言 |
包名/工具 |
加固模式最低版本 |
|
Python |
|
0.3.6 |
|
Java |
|
0.3.10 |
|
Go |
|
1.3.10 |
|
Node.js |
|
2.3.1 |
|
.NET |
|
1.4.2 |
|
PHP |
|
1.2.0 |
|
阿里云CLI |
|
3.0.248 |
Python
-
安装Credentials工具。
若使用加固模式获取临时身份凭证,alibabacloud_credentials的版本应不低于0.3.6。
pip install alibabacloud_credentials -
配置ECS的RAM角色作为访问凭证。
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_credentials.models import Config as CredConfig credentialsConfig = CredConfig( type='ecs_ram_role', # 选填,该ECS角色的角色名称,不填会自动获取,但是建议加上以减少请求次数,可以通过环境变量ALIBABA_CLOUD_ECS_METADATA设置role_name role_name='ROLE_NAME', # 选填,默认值:False。True:表示强制使用加固模式。False:系统将首先尝试在加固模式下获取凭据。如果失败,则会切换到普通模式进行尝试(IMDSv1)。 disable_imds_v1=True ) credentialsClient = CredClient(credentialsConfig) -
以查询指定 OSS Bucket 中的文件列表为例,代码实现如下。
RAM角色需要授权
AliyunOSSReadOnlyAccess权限策略。import oss2 from alibabacloud_credentials.client import Client from alibabacloud_credentials.models import Config from oss2 import CredentialsProvider from oss2.credentials import Credentials # 1. 定义凭证适配器:将 Credentials 工具获取的 Token 转换为 OSS SDK 可用的格式 class CredentialProviderWrapper(CredentialsProvider): def __init__(self, client): self.client = client def get_credentials(self): # SDK 自动请求 http://100.100.100.200 获取临时凭证 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 list_objects_using_instance_role(bucket_name, endpoint, role_name): # 2. 配置 ECS 实例角色模式 config = Config( type='ecs_ram_role', role_name=role_name ) cred_client = Client(config) # 3. 初始化 OSS Bucket auth = oss2.ProviderAuth(CredentialProviderWrapper(cred_client)) bucket = oss2.Bucket(auth, endpoint, bucket_name) print(f"--- 开始查询 Bucket: {bucket_name} ---") try: # 4. 调用 ListObjects 接口 for i, obj in enumerate(oss2.ObjectIterator(bucket)): print(f"文件 found: {obj.key}") if i >= 9: # 仅展示前10个 print("... (更多文件略)") break print("--- 查询成功,实例角色权限正常 ---") except Exception as e: print(f"查询失败: {e}") if __name__ == "__main__": # 配置 role_name = 'YOUR_ROLE_NAME' # 替换为你的角色名 bucket_name = 'YOUR_BUCKET_NAME' # 替换为你的Bucket名 endpoint = 'YOUR_ENDPOINT' # 替换为对应Endpoint list_objects_using_instance_role(bucket_name, endpoint, role_name)
Java
-
添加credentials依赖。
若使用加固模式获取临时身份凭证,credentials-java的版本不低于0.3.10。
<!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java --> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.10</version> </dependency> -
配置ECS实例RAM角色作为访问凭证。
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角色的角色名称,不填会自动获取,但是建议加上以减少请求次数,可以通过环境变量ALIBABA_CLOUD_ECS_METADATA设置RoleName credentialConfig.setRoleName("ROLENAME"); // 选填,默认值:false。true:表示强制使用加固模式。false:系统将首先尝试在加固模式下获取凭据。如果失败,则会切换到普通模式进行尝试(IMDSv1)。 credentialConfig.setDisableIMDSv1(true); Client credentialClient = new Client(credentialConfig); } } -
以查询指定 OSS Bucket 中的文件列表为例,代码实现如下。
RAM角色需要授权
AliyunOSSReadOnlyAccess权限策略。import com.aliyun.credentials.Client; import com.aliyun.credentials.models.Config; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.common.auth.Credentials; import com.aliyun.oss.common.auth.CredentialsProvider; import com.aliyun.oss.common.auth.DefaultCredentials; import com.aliyun.oss.model.OSSObjectSummary; import com.aliyun.oss.model.ObjectListing; // 1. 实现 OSS 的 CredentialsProvider 接口 class InstanceRoleCredentialProvider implements CredentialsProvider { private final Client credClient; public InstanceRoleCredentialProvider(String roleName) throws Exception { Config config = new Config(); config.setType("ecs_ram_role"); config.setRoleName(roleName); this.credClient = new Client(config); } @Override public void setCredentials(Credentials credentials) {} @Override public Credentials getCredentials() { // 自动从 ECS 元数据服务获取凭证 return new DefaultCredentials( credClient.getAccessKeyId(), credClient.getAccessKeySecret(), credClient.getSecurityToken() ); } } public class Demo { public static void main(String[] args) throws Exception { String roleName = "YOUR_ROLE_NAME"; String endpoint = "YOUR_ENDPOINT"; String bucketName = "YOUR_BUCKET_NAME"; // 2. 使用自定义 Provider 初始化 OSS 客户端 CredentialsProvider provider = new InstanceRoleCredentialProvider(roleName); OSS ossClient = new OSSClientBuilder().build(endpoint, provider); System.out.println("--- 开始查询 ---"); try { // 3. 列举文件 ObjectListing objectListing = ossClient.listObjects(bucketName); for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) { System.out.println("文件 found: " + objectSummary.getKey()); } System.out.println("--- 成功 ---"); } catch (Exception e) { e.printStackTrace(); } finally { ossClient.shutdown(); } } }
Go
-
安装Credentials工具。
若使用加固模式获取临时身份凭证,credentials-go的版本不低于1.3.10。
-
使用
go get下载安装。go get -u github.com/aliyun/credentials-go -
使用
dep来管理依赖包。dep ensure -add github.com/aliyun/credentials-go
-
-
配置ECS实例RAM角色作为访问凭证。
package main import ( "fmt" "github.com/aliyun/credentials-go/credentials" ) func _main(args []*string) { credentialsConfig := new(credentials.Config). SetType("ecs_ram_role"). // 选填,该ECS角色的角色名称,不填会自动获取,但是建议加上以减少请求次数,可以通过环境变量ALIBABA_CLOUD_ECS_METADATA设置RoleName SetRoleName("ROLENAME"). // 选填,默认值:false。true:表示强制使用加固模式。false:系统将首先尝试在加固模式下获取凭据。如果失败,则会切换到普通模式进行尝试(IMDSv1)。 SetDisableIMDSv1(true) credentialClient, err := credentials.NewCredential(credentialsConfig) if err != nil { panic(err) } } -
以查询指定 OSS Bucket 中的文件列表为例,代码实现如下。
RAM角色需要授权
AliyunOSSReadOnlyAccess权限策略。package main import ( "fmt" "github.com/aliyun/aliyun-oss-go-sdk/oss" "github.com/aliyun/credentials-go/credentials" ) // 1. 定义结构体实现 OSS 的 CredentialsProvider 接口 type CredentialsProviderAdapter struct { credClient credentials.Credential } func (c *CredentialsProviderAdapter) GetCredentials() oss.Credentials { // 获取最新 Token id, _ := c.credClient.GetAccessKeyId() secret, _ := c.credClient.GetAccessKeySecret() token, _ := c.credClient.GetSecurityToken() return oss.Credentials{ AccessKeyID: *id, AccessKeySecret: *secret, SecurityToken: *token, } } func main() { roleName := "YOUR_ROLE_NAME" endpoint := "YOUR_ENDPOINT" bucketName := "YOUR_BUCKET_NAME" // 2. 配置 Credentials 客户端 (ECS 模式) config := new(credentials.Config). SetType("ecs_ram_role"). SetRoleName(roleName) credClient, err := credentials.NewCredential(config) if err != nil { panic(err) } // 3. 初始化 OSS Client provider := &CredentialsProviderAdapter{credClient: credClient} client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(provider)) if err != nil { panic(err) } bucket, err := client.Bucket(bucketName) if err != nil { panic(err) } // 4. 查询文件 fmt.Println("--- 开始查询 ---") lsRes, err := bucket.ListObjects(oss.MaxKeys(10)) if err != nil { fmt.Println("查询失败:", err) return } for _, object := range lsRes.Objects { fmt.Println("文件 found:", object.Key) } fmt.Println("--- 成功 ---") }
Node.js
-
安装Credentials工具。
若使用加固模式获取临时身份凭证,credentials的版本不低于2.3.1。
npm install @alicloud/credentials -
配置ECS实例RAM角色作为访问凭证。
const Credential = require('@alicloud/credentials'); const credentialsConfig = new Credential.Config({ type: 'ecs_ram_role', // 选填,该ECS角色的角色名称,不填会自动获取,但是建议加上以减少请求次数,可以通过环境变量ALIBABA_CLOUD_ECS_METADATA设置roleName roleName: 'ROLENAME', // 选填,默认值:false。true:表示强制使用加固模式。false:系统将首先尝试在加固模式下获取凭据。如果失败,则会切换到普通模式进行尝试(IMDSv1)。 disableIMDSv1: true, }); const cred = new Credential.default(credentialsConfig); -
以查询指定 OSS Bucket 中的文件列表为例,代码实现如下。
RAM角色需要授权
AliyunOSSReadOnlyAccess权限策略。const OSS = require('ali-oss'); const Credential = require('@alicloud/credentials'); async function listObjects() { const roleName = 'YOUR_ROLE_NAME'; const bucketName = 'YOUR_BUCKET_NAME'; const region = 'YOUR_REGION'; // 注意:OSS SDK 通常只需要 region // 1. 初始化 Credentials (ECS 模式) const credentialsConfig = new Credential.Config({ type: 'ecs_ram_role', roleName: roleName }); const credClient = new Credential.default(credentialsConfig); try { // 2. 获取凭证 const accessKeyId = await credClient.getAccessKeyId(); const accessKeySecret = await credClient.getAccessKeySecret(); const securityToken = await credClient.getSecurityToken(); // 3. 初始化 OSS Client const client = new OSS({ region: region, accessKeyId: accessKeyId, accessKeySecret: accessKeySecret, stsToken: securityToken, bucket: bucketName, // 如果需要自动刷新,建议使用 refreshSTSToken 机制,此处为简化演示单次获取 refreshSTSToken: async () => { return { accessKeyId: await credClient.getAccessKeyId(), accessKeySecret: await credClient.getAccessKeySecret(), stsToken: await credClient.getSecurityToken() } } }); // 4. 查询文件 console.log("--- 开始查询 ---"); const result = await client.list({ 'max-keys': 10 }); if (result.objects) { result.objects.forEach(obj => { console.log(`文件 found: ${obj.name}`); }); } else { console.log("Bucket 为空"); } console.log("--- 成功 ---"); } catch (e) { console.error("出错:", e); } } listObjects();
.NET
-
安装Credentials工具。
若使用加固模式获取临时身份凭证,credentials的版本不低于1.4.2。
dotnet add package Aliyun.Credentials -
配置ECS实例RAM角色作为访问凭证。
using Aliyun.Credentials.Models; namespace credentials_demo { class Program { static void Main(string[] args) { var config = new Config(); { Type = "ecs_ram_role", // 选填,该ECS角色的角色名称,不填会自动获取,但是建议加上以减少请求次数,可以通过环境变量ALIBABA_CLOUD_ECS_METADATA设置RoleName RoleName = "ROLE_NAME", // 选填,默认值:false。true:表示强制使用加固模式。false:系统将首先尝试在加固模式下获取凭据。如果失败,则会切换到普通模式进行尝试(IMDSv1)。 DisableIMDSv1 = true } } } } -
以查询指定 OSS Bucket 中的文件列表为例,代码实现如下。
RAM角色需要授权
AliyunOSSReadOnlyAccess权限策略。using System; using Aliyun.OSS; using Aliyun.Credentials.Models; using Aliyun.Credentials; namespace EcsRoleDemo { class Program { static void Main(string[] args) { string roleName = "YOUR_ROLE_NAME"; string endpoint = "YOUR_ENDPOINT"; string bucketName = "YOUR_BUCKET_NAME"; // 1. 配置 Credentials (ECS 模式) Config credConfig = new Config { Type = "ecs_ram_role", RoleName = roleName }; Client credClient = new Client(credConfig); try { // 2. 获取凭证 (C# SDK 内部自动处理异步请求) string ak = credClient.GetAccessKeyId(); string sk = credClient.GetAccessKeySecret(); string token = credClient.GetSecurityToken(); // 3. 初始化 OSS Client // 注意:在实际长驻服务中,建议封装逻辑以定期重新获取 Token OssClient ossClient = new OssClient(endpoint, ak, sk, token); Console.WriteLine("--- 开始查询 ---"); // 4. 查询文件 var listResult = ossClient.ListObjects(bucketName); foreach (var summary in listResult.ObjectSummaries) { Console.WriteLine("文件 found: " + summary.Key); } Console.WriteLine("--- 成功 ---"); } catch (Exception ex) { Console.WriteLine("失败: " + ex.Message); } } } }
PHP
-
安装Credentials工具。
若使用加固模式获取临时身份凭证,credentials的版本不低于1.2.0。
composer require alibabacloud/credentials -
配置ECS实例RAM角色作为访问凭证。
<?php use AlibabaCloud\Credentials\Credential; use AlibabaCloud\Credentials\Credential\Config; $credConfig = new Config([ 'type' => 'ecs_ram_role', // 选填,该ECS角色的角色名称,不填会自动获取,但是建议加上以减少请求次数,可以通过环境变量ALIBABA_CLOUD_ECS_METADATA设置role_name 'roleName' => '<RoleName>', // 选填,默认值:false。true:表示强制使用加固模式。false:系统将首先尝试在加固模式下获取凭据。如果失败,则会切换到普通模式进行尝试(IMDSv1)。 'disableIMDSv1' => true, ]); -
以查询指定 OSS Bucket 中的文件列表为例,代码实现如下。
RAM角色需要授权
AliyunOSSReadOnlyAccess权限策略。require 'vendor/autoload.php'; use AlibabaCloud\Credentials\Credential; use OSS\OssClient; use OSS\Core\OssException; $roleName = 'YOUR_ROLE_NAME'; $bucketName = 'YOUR_BUCKET_NAME'; $endpoint = 'YOUR_ENDPOINT'; try { // 1. 配置 Credentials (ECS 模式) $credConfig = new AlibabaCloud\Credentials\Credential\Config([ 'type' => 'ecs_ram_role', 'roleName' => $roleName ]); $credClient = new Credential($credConfig); // 2. 获取凭证 $ak = $credClient->getAccessKeyId(); $sk = $credClient->getAccessKeySecret(); $token = $credClient->getSecurityToken(); // 3. 初始化 OSS Client $ossClient = new OssClient($ak, $sk, $endpoint, false, $token); echo "--- 开始查询 ---\n"; // 4. 查询文件 $options = array( OssClient::OSS_MAX_KEYS => 10 ); $listResult = $ossClient->listObjects($bucketName, $options); $objectList = $listResult->getObjectList(); foreach ($objectList as $objectInfo) { echo "文件 found: " . $objectInfo->getKey() . "\n"; } echo "--- 成功 ---\n"; } catch (Exception $e) { echo "失败: " . $e->getMessage() . "\n"; }
更多详细信息及调用示例,请参见方式五:使用ECS实例RAM角色。
管理与维护
收回/更改ECS的实例RAM角色
通过控制台收回/更改
-
访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。
-
找到要操作的ECS实例,选择。
-
收回实例RAM角色:操作类型选择收回,单击确定。
-
更改实例RAM角色:操作类型选择授予,选择所需的实例RAM角色,单击确定完成更改。
-
通过API收回/更改
-
收回实例RAM角色:调用DetachInstanceRamRole接口收回实例RAM角色。
-
更改实例RAM角色:
-
调用DetachInstanceRamRole接口收回实例RAM角色。
-
调用AttachInstanceRamRole接口重新为实例授予新的RAM角色。
-
手动获取STS临时凭证(用于脚本或调试)
在Shell脚本等非SDK环境中,可手动调用元数据服务接口获取凭证。
方式一:通过Shell命令获取
元数据服务提供HTTP访问地址获取临时访问凭据。
加固模式
-
Linux实例
# 获取元数据服务器的访问凭证用于鉴权 TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:元数据服务器访问凭证有效期"` # 获取实例RAM角色的临时凭证 curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/ram/security-credentials/实例RAM角色名称 -
Windows实例(Powershell)
# 获取元数据服务器的访问凭证用于鉴权 $token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "元数据服务器的访问凭证有效期"} -Method PUT -Uri http://100.100.100.200/latest/api/token # 获取实例RAM角色的临时凭证 Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/ram/security-credentials/实例RAM角色名称
<元数据服务器的访问凭证有效期>:在获取实例RAM角色的临时授权访问凭证之前,先获取元数据服务器的访问凭证并设置其有效期,以加强数据安全。超过有效期后,需要重新获取凭证,否则无法获取实例RAM角色的临时授权访问凭证。取值范围为1~21600,单位为秒。详细说明,请参见实例元数据。
<实例RAM角色名称>:需替换为具体的实例RAM角色名称。例如EcsRamRole。
若使用云助手执行上述命令时,云助手Agent的最低版本要求如下:
|
平台 |
云助手Agent版本号 |
|
windows |
2.1.3.857 |
|
linux |
2.2.3.857 |
|
linux arm |
2.4.3.857 |
|
freebsd |
2.3.3.857 |
普通模式
-
Linux实例
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/实例RAM角色名称 -
Windows实例(Powershell)
Invoke-RestMethod http://100.100.100.200/latest/meta-data/ram/security-credentials/实例RAM角色名称<实例RAM角色名称>需替换为实际的实例RAM角色名称。例如EcsRamRoleDocumentTesting。
返回示例如下:
{
"AccessKeyId" : "STS.*******6YSE",
"AccessKeySecret" : "aj******jDU",
"Expiration" : "2017-11-01T05:20:01Z",
"SecurityToken" : "CAISng********",
"LastUpdated" : "2023-07-18T14:17:28Z",
"Code" : "Success"
}
-
AccessKeyId、AccessKeySecret、SecurityToken共同构成了临时访问令牌。 -
Expiration:临时授权访问凭证的有效期。
方式二:通过阿里云CLI获取
CLI支持通过实例元数据服务获取临时访问凭证STS Token的逻辑,且支持周期性自动刷新。
若使用加固模式获取临时身份凭证,CLI的版本不低于3.0.248。
-
安装CLI。
-
配置身份凭据。
aliyun configure --profile EcsProfile --mode EcsRamRole该命令为交互式命令,需要根据提示输入相应信息。更多信息请参见配置凭证。交互过程示例:
Configuring profile 'EcsProfile' in 'EcsRamRole' authenticate mode... Ecs Ram Role []: YOUR_ROLE_NAME Default Region Id []: YOUR_REGION Default Output Format [json]: json (Only support json) Default Language [zh|en] en: en Saving profile[EcsProfile] ...Done. -
调用API。例如,使用CLI查询ECS实例列表。
aliyun ecs DescribeInstances更多关于CLI命令的说明,请参见命令结构。
常见问题
一台ECS实例可以被授予几个RAM角色?
一台ECS实例在同一时刻最多只能被授予一个RAM角色。可通过收回后再授予的方式切换角色。
如何使用RAM用户给实例授予RAM角色?
为RAM用户授予以下权限,其他操作同操作步骤。
-
管理RAM角色:需要创建RAM角色并授权。
-
授予/回收RAM角色:需要进入实例详情页对实例做授予/回收RAM角色的操作。
-
允许传递角色给云产品:给云服务授予角色需要配合
ram:PassRole权限。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:Describe*",
"ecs:List*",
"ecs:AttachInstanceRamRole",
"ecs:DetachInstanceRAMRole"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ram:Describe*",
"ram:List*",
"ram:Get*",
"ram:CreateRole",
"ram:CreatePolicy",
"ram:AttachPolicyToRole"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ram:PassRole",
"Resource": "*"
}
]
}
相关文档
-
当自建应用部署在阿里云ECS服务器上,且需要访问KMS服务时,可以使用ECS实例RAM角色安全访问KMS。
-
当ECS不需要某些资源访问权限时,可以为RAM角色移除权限。
-
访问阿里云OpenAPI时,如果在代码中硬编码明文AK,容易因代码仓库权限管理不当造成AK泄露,建议通过非AccessKey硬编码的方式编程,使用访问凭据访问阿里云OpenAPI。
> 实例设置 > 授予/收回RAM角色