本文在介紹開通 ram 服務之后如何通過 api 使用實例 ram 角色的基礎上,重點探討了其操作步驟。
通過 API 使用實例 RAM 角色
使用限制
使用實例 RAM 角色存在如下限制:
只有專有網絡 (VPC) 網絡類型的 ECS 實例才能使用實例 RAM 角色。
一個 ECS 實例一次只能授予一個實例 RAM 角色。
當您給 ECS 實例授予了實例 RAM 角色后,并希望在 ECS 實例內部部署的應用程序中訪問云產品的 API 時,您需要通過 實例元數據 獲取實例 RAM 角色的臨時授權 Token。參閱 5. (可選)獲取臨時授權 Token。
如果您是通過 RAM 用戶子賬號使用實例 RAM 角色,您需要通過云賬號 6. (可選)授權 RAM 用戶使用實例 RAM 角色。
前提條件
您已經開通 RAM 服務,參閱 RAM 文檔 開通方法 開通 RAM 服務。
1. 創建實例 RAM 角色
調用接口 CreateRole 創建實例 RAM 角色。
設置 RoleName 參數,如將其值置為 EcsRamRoleDocumentTesting。
按如下策略設置 AssumeRolePolicyDocument:
{ "Statement":?[ { "Action":?"sts:AssumeRole", "Effect":?"Allow", "Principal":?{ "Service":?[ "ecs.aliyuncs.com" ] } } ], "Version":?"1" }
2. 授權實例 RAM 角色
調用接口 CreatePolicy 新建授權策略。
設置 RoleName 參數,如將其值置為 EcsRamRoleDocumentTestingPolicy。
按如下策略設置 PolicyDocument:
{ "Statement":?[ { "Action":?[ "oss:Get*", "oss:List*" ], "Effect":?"Allow", "Resource":?"*" } ], "Version":?"1" }
調用接口 AttachPolicyToRole 授權角色策略。
設置 PolicyType 參數為 Custom。
設置 PolicyName 參數,如 EcsRamRoleDocumentTestingPolicy。
設置 RoleName 參數,如 EcsRamRoleDocumentTesting。
3. 授予實例 RAM 角色
調用接口 AttachInstanceRamRole 為實例授予 RAM 角色。
設置 RegionId 及 InstanceIds 參數指定一個 ECS 實例。
設置 RamRoleName 參數,如 EcsRamRoleDocumentTesting。
4. (可選)收回實例 RAM 角色
調用接口 DetachInstanceRamRole 收回實例 RAM 角色。
設置 RegionId 及 InstanceIds 參數指定一個 ECS 實例。
設置 RamRoleName 參數,如 EcsRamRoleDocumentTesting。
5. (可選)獲取臨時授權 Token
您可以獲得實例 RAM 角色的臨時授權 Token,該臨時授權 Token 可以執行實例 RAM 角色的權限和資源,并且該臨時授權 Token 會自動周期性地更新。示例:
檢索名為 EcsRamRoleDocumentTesting 的實例 RAM 角色的臨時授權 Token:
linux 實例: 執行命令 curl http://100.100.100.200/latest/meta-data/Ram/security-credentials/EcsRamRoleDocumentTesting 。
Windows 實例:參閱文檔 實例元數據。
獲得臨時授權 Token。返回示例如下:
{ "AccessKeyId"?:?"XXXXXXXXX", "AccessKeySecret"?:?"XXXXXXXXX", "Expiration"?:?"2017-11-01T05:20:01Z", "SecurityToken"?:?"XXXXXXXXX", "LastUpdated"?:?"2017-10-31T23:20:01Z", "Code"?:?"Success" }
6. (可選)授權 RAM 用戶使用實例 RAM 角色
說明
當您授權 RAM 用戶使用實例 RAM 角色時,您必須授權 RAM 用戶對該實例 RAM 角色的 PassRole 權限。其中,PassRole 決定該 RAM 用戶能否直接執行角色策略賦予的權限。
登錄 RAM 控制臺,參閱文檔 為 RAM 用戶授權 完成授權,如下所示:
{ "Version":?"2016-10-17", "Statement":?[ { "Effect":?"Allow", "Action":?[ "ecs:?[ECS?RAM?Action]", "ecs:?CreateInstance", "ecs:?AttachInstanceRamRole", "ecs:?DetachInstanceRAMRole" ], "Resource":?"*" }, { "Effect":?"Allow", "Action":?"ram:PassRole", "Resource":?"*" } ] }