当您在个人开发环境实例内访问其他云资源时,必须配置访问密钥来验证身份信息。通过为个人开发环境实例关联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_credentials
Credentials工具使用示例如下,更多语言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)