ECS例項RAM角色實踐
ECS例項RAM角色快速入門
概述
以往部署在ECS例項中的應用程式如果需要訪問阿里雲其他雲產品的API,通常需要藉助於AccessKeyId和AccessKeySecret(下文簡稱AK)來實現。AK是使用者訪問阿里雲API的金鑰,具有相應賬戶的完整許可權。但是為了方便應用程式對AK的管理,使用者通常需要將AK儲存在應用程式的配置檔案中或以其他方式儲存在例項中。這在一定程度上增加了AK管理上的複雜性且降低了AK的保密性,尤其是對有多地域一致性部署需求的使用者,AK將隨著映象及映象建立的例項擴散出去。在需要更換AK時,也需要逐臺例項(和映象)進行更新和重新部署。此外,使用AK雖然簡單,但AK的許可權過大,無法做到精細的許可權控制。
現在藉助於ECS例項RAM角色,我們可以將RAM角色和ECS例項關聯起來,例項內部的應用程式則通過STS臨時憑證訪問其他雲產品的API。其中臨時憑證由系統自動生成和更新,應用程式可以通過訪問例項後設資料的指定URL獲取臨時憑證,而無須特別的管理。同時藉助於RAM,使用者可以通過對角色和授權策略的管理,達到不同例項對不同雲產品或相同雲產品具有各自訪問許可權的目的。
本文接下來將詳細介紹ECS例項使用RAM角色的正確姿勢,為了方便讀者隨本篇樣例快速入門,全文將基於OpenAPI Explorer操作(OpenAPI Explorer將各產品的API及引數以視覺化的方式展現出來,並能自動生成Java,Python等SDK的樣例程式碼)。具體分為以下幾個步驟:
- 通過RAM建立角色,並配置授權策略
- 指定RAM角色建立ECS例項
- 在例項內部訪問例項後設資料URL獲取STS臨時憑證
- 基於臨時憑證,使用Python SDK訪問OSS
注:OpenAPI Explorer通過已登入使用者資訊獲取當前賬號臨時AK,對當前賬號線上資源發起線上資源操作,請小心操作。同時建立例項操作也會產生一定的費用!操作完成後請及時釋放例項。
建立RAM角色&配置策略
- 建立RAM角色。找到OpenAPI Explorer RAM產品下CreateRole API。其中RoleName引數可以根據自己的需要填寫,如本文填“RamRoleTest”。AssumeRolePolicyDocument填如下內容,表示該角色為一個服務角色,受信雲服務(此處為ECS)可以扮演該角色:
{
“Statement”: [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"ecs.aliyuncs.com"
]
}
}
],
“Version”: “1”
}
- 建立授權策略。找到CreatePolicy API。其中PolicyName本文填“RamRolePolicyTest”。PolicyDocument填以下內容,表示該角色具有OSS只讀許可權。
{
“Statement”: [
{
"Action": [
"oss:Get*",
"oss:List*"
],
"Effect": "Allow",
"Resource": "*"
}
],
“Version”: “1”
}
當希望通過子賬號建立指定RAM角色的ECS例項時,還需要在上述“Statement”節點中額外增加ECS相關的許可權和PassRole許可權,如下所示。其中“…”需要替換成具體的ECS RAM Action,或替換成“ecs:*”表示所有Action。
{
"Action": ...,
"Resource": "*",
"Effect": "Allow"
},
{
"Action": "ram:PassRole",
"Resource": "*",
"Effect": "Allow"
}
- 為角色附加授權。找到AttachPolicyToRole API。其中PolicyType填“Custom”,PolicyName填第2步建立的“RamRolePolicyTest”,RoleName填第1步建立的“RamRoleTest”。
指定角色建立例項
- 建立例項。找到OpenAPI Explorer ECS產品下的CreateInstance API,引數可根據實際情況進行填寫,主要需要填寫的引數有:RegionId、ImageId、ecs.n1.tiny、VSwitchId和RamRoleName。由於ECS例項RAM角色目前只支援VPC例項,所以VSwitchId是必須的,RamRoleName則填之前建立的RamRoleTest。
- 設定密碼和啟動例項。從ECS控制檯“例項標籤頁”重置例項密碼,並啟動例項。
獲取STS臨時憑證
從ECS控制檯遠端連線例項,並登陸到例項中。訪問http://100.100.100.200/latest/meta-data/ram/security-credentials/RamRoleTest獲取STS臨時憑證,其中路徑最後為例項名。
基於臨時憑證訪問OSS
- 命令列輸入
pip install oss2
安裝OSS python SDK - 執行下述命令進行測試,其中oss2.StsAuth中的前三個引數分別對應於上述URL返回的AccessKeyId、AccessKeySecret和SecurityToken。
import oss2
from itertools import islice
auth = oss2.StsAuth(<AccessKeyId>, <AccessKeySecret>, <SecurityToken>)
bucket = oss2.Bucket(auth, "oss-cn-qingdao.aliyuncs.com", "bozhi-qd")
for b in islice(oss2.ObjectIterator(bucket), 10):
print(b.key)
相關文件
相關文章
- k8s實踐——HPA實踐例項K8S
- 阿里雲伺服器ECS例項建立記錄阿里伺服器
- 在ECS上輕鬆搭建RDS的從例項
- unity2019 ECS入門例項:建立一個EntityUnity
- MongoDB 6.0 單例項基於使用者角色實現授權登入MongoDB單例
- MSSQL·最佳實踐·例項級別資料庫上雲RDSSQLServerSQL資料庫Server
- 阿里雲ECS突發效能例項t5t6是什麼?阿里
- WebAssembly實踐指南——C++和Rust透過wasmtime實現相互呼叫例項WebC++RustASM
- ECS 7天實踐訓練營-day1
- 最佳實踐:負載均衡SLB支援自定義VPC例項IP地址負載
- kubernetes實踐之十六:RBAC 角色訪問控制
- ECS進階Day03:SLB負載均衡實踐負載
- 【YashanDB知識庫】v$instance檢視中例項角色含義不明確
- Python專案實戰例項Python
- Android Flutter 多例項實踐AndroidFlutter
- 場景實踐:使用RDS和ECS搭建個人部落格
- ECS7天實踐進階訓練營Day2:基於阿里雲ECS部署MediaWiki阿里
- 阿里雲ECS,突發效能例項t5購買參考和使用建議阿里
- 測試用例最佳實踐
- 實戰:dockerfile 最小實踐——koa 為例Docker
- python類例項化如何實現Python
- Prometheus Metrics 設計的最佳實踐和應用例項,看這篇夠了!Prometheus
- php例項化物件的例項方法PHP物件
- 使用原生js實現選項卡功能例項教程JS
- 阿里雲伺服器ECS購買方式“搶佔式例項”有什麼優缺點?阿里伺服器
- 輕鬆保障萬級例項,vivo服務端監控體系建設實踐服務端
- DATEGE阿里雲國際版:用ping測試雲伺服器ecs例項ping不通的原因阿里伺服器
- Vue例項方法之事件的實現Vue事件
- python 單一程式例項 實現Python
- Verilog設計技巧例項及實現
- JWT實現登入認證例項JWT
- Redis實戰篇(一)搭建Redis例項Redis
- 可觀測實踐|如何使用阿里雲 Prometheus 觀測 ECS 應用阿里Prometheus
- OkHttpClient例項HTTPclient
- unittest例項
- jQuery 例項jQuery
- Java 異常處理與正規表示式詳解,例項演練及最佳實踐Java
- 阿里雲ECS家族再添新成員,推出密集計算型例項規格族ic5阿里
- 怎樣使用阿里雲國際版ecs例項建立單個雲盤快照-Unirech阿里雲代充阿里