當您在個人開發環境執行個體內訪問其他雲資源時,必須配置存取金鑰來驗證身份資訊。通過為個人開發環境執行個體關聯RAM角色,您可以在執行個體內基於STS臨時憑證訪問其他雲資源,無需再配置長期AccessKey,降低密鑰泄露的風險。本文為您介紹如何基於執行個體RAM角色擷取STS臨時訪問憑證。
背景資訊
執行個體RAM角色是一種可信實體為阿里雲服務的RAM角色,即允許雲端服務扮演的角色,用於解決跨服務訪問的問題。關於RAM角色的詳細說明,請參見什麼是RAM角色。
基於執行個體RAM角色擷取臨時訪問憑證來驗證身份資訊和存取權限控制,具有以下優勢:
安全保密
無需在執行個體內管理認證,使用STS臨時訪問憑證替代長期AccessKey,降低密鑰泄露風險。
使用限制
一個個人開發環境執行個體現只能關聯一個RAM角色。
步驟一:為個人開發環境執行個體配置RAM角色
情境一:為個人開發環境執行個體授權DataWorks預設角色
使用Notebook,Python開發時時,可免除AccessKey ID和AccessKey Secret來訪問部分雲產品。
DataWorks預設角色僅擁有訪問MaxCompute、Hologres、EMR Serverless Spark、Flink、Pai的許可權。基於預設角色簽發的臨時訪問憑證,在訪問以上產品時,將擁有等同於個人開發環境所有者的許可權。
為執行個體授權DataWorks預設角色能夠讓您無需額外建立RAM角色,即可在執行個體內擷取一份可訪問基本開發資源、且無越權的臨時訪問憑證。
為執行個體授權DataWorks預設角色後,以下情境的使用者可以免配置AK:
通過Notebook的SQL Cell訪問MaxCompute、Hologres、EMR Serverless Spark、Flink、Pai。
通過ODPS SDK提交任務到執行個體所有者有執行許可權的MaxCompute專案中。

情境二:個人開發環境執行個體不關聯RAM角色
如果您的執行個體設定為工作空間公開可見,建議不要為執行個體關聯RAM角色,避免許可權泄露。您可以在建立執行個體或變更執行個體配置時,將進階資訊地區的執行個體RAM角色設定為不關聯角色。
不關聯任何RAM角色時,可通過在代碼中配置AccessKey ID和AccessKey Secret的方式來訪問雲產品。

步驟二:基於執行個體RAM角色擷取臨時訪問憑證
您可在授權過RAM角色的個人開發環境執行個體中通過以下方式擷取臨時訪問憑證。
方式一:通過Credentials工具擷取
Credentials工具會調用執行個體本地的服務(執行個體建立時已自動注入)擷取STS臨時訪問憑證,該憑證會周期性更新。
通過Credentials工具擷取執行個體RAM角色的訪問憑證,需要執行如下命令安裝阿里雲Credentials工具(以Python為例)。
pip install alibabacloud_credentialsCredentials工具使用樣本如下,更多語言SDK樣本,請參見使用訪問憑據訪問阿里雲OpenAPI最佳實務。
from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig
credentialsConfig = CredConfig(
type='credentials_uri' # 選填。若您未配置其他“預設憑據鏈”訪問方式,您無需再顯式指定,Credentials SDK會通過uri方式擷取臨時憑證
)
credentialsClient = CredClient(CredConfig)
方式二:直接存取個人開發環境本地服務擷取
在個人開發環境執行個體內,您可在終端執行如下命令,訪問本地自動注入的server直接擷取。
# 擷取執行個體RAM角色的臨時授權訪問憑證
curl $ALIBABA_CLOUD_CREDENTIALS_URI返回樣本如下,其中:
SecurityToken:執行個體RAM角色的臨時Token。
Expiration:執行個體RAM角色的臨時授權訪問憑證的有效期間。
{
"Code": "Success",
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}方式三:直接存取執行個體本地內檔案擷取
您可在個人開發環境執行個體內訪問指定路徑的檔案,擷取執行個體RAM角色的臨時訪問憑證。該檔案所在的路徑為/mnt/.alibabacloud/credentials,檔案內容如下:
{
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}步驟三:基於執行個體RAM角色訪問MaxCompute
執行如下命令,安裝Credentials工具和ODPS SDK。
# 安裝credentials工具 pip install alibabacloud_credentials # 安裝odps sdk pip install odps使用執行個體RAM角色的臨時憑證訪問ODPS,並擷取指定專案的table列表。
from alibabacloud_credentials import providers from odps.accounts import CredentialProviderAccount from odps import ODPS if __name__ == '__main__': account = CredentialProviderAccount(providers.DefaultCredentialsProvider()) o = ODPS( account=account, project="{odps_project}", #需替換為您的project名稱 endpoint="{odps_endpoint}"#需替換為您的project所在region的endpoint ) for t in o.list_tables(): print(t)