使用執行個體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角色