当您在DLC任务中访问其他云资源时,必须配置访问密钥来验证身份信息。通过为DLC任务关联RAM角色,您可在任务内基于STS临时凭证访问其他云资源,无需再配置长期AccessKey,减少密钥泄漏的风险。本文主要介绍如何创建RAM角色并授权给DLC,以及如何基于RAM角色获取STS临时访问凭证。
功能优势
RAM角色是一种可信实体为阿里云服务的RAM角色,即允许云服务扮演的角色,用于解决“跨服务访问”的问题。基于RAM角色获取临时访问凭证来验证身份信息和访问权限控制,具有以下优势:
安全保密:无需在任务内管理凭据,使用STS临时访问凭证替代长期AccessKey,减少密钥泄露风险。
便捷可控:通过修改DLC任务的RAM角色的权限策略,可更便捷、更精细地控制各开发者在任务内访问云资源时的权限。
使用限制
目前,一个DLC任务只能关联一个RAM角色。
配置方法
在创建DLC任务时,您需要为DLC配置RAM角色,并获取STS临时访问凭证。
为DLC配置RAM角色
场景一:为DLC任务授权PAI默认角色
PAI默认角色基于服务角色AliyunPAIDLCDefaultRole运作,仅拥有访问MaxCompute和OSS的权限,且权限更加精细。基于PAI默认角色签发的临时访问凭证,在访问MaxCompute表时,将拥有等同于DLC实例所有者的权限;在访问OSS时,仅能访问当前工作空间配置的默认OSS存储空间(Bucket)。
为DLC任务授权PAI默认角色能够让您无需额外创建RAM角色,即可在任务内获取一份可访问基本开发资源、且无越权的临时访问凭证。
使用场景
为DLC任务授权PAI默认角色后,您在以下场景无需配置AccessKey:
通过PyODPS SDK提交任务到任务所有者有执行权限的MaxCompute项目中。
通过OSS SDK访问当前工作空间配置的默认OSS存储空间(Bucket)中的数据。如何为工作空间配置默认OSS存储空间,请参见设置工作空间存储路径。
配置方法
在创建DLC任务时,您需要在角色信息区域选择PAI默认角色作为实例RAM角色。具体操作,请参见创建训练任务。
配置RAM角色后,您需要基于DLC关联的RAM角色获取临时访问凭证。
场景二:为DLC任务授权自定义角色
当PAI默认角色的临时访问凭证权限无法满足您的需求时,您可以自行创建RAM角色并自定义其权限策略,按需控制开发者在任务内可访问的云资源范围。具体操作步骤如下:
登录RAM控制台,创建RAM角色。具体操作,请参见创建可信实体为阿里云服务的RAM角色。
其中,关键参数配置如下:
选择可信实体类型:阿里云服务
角色类型:普通服务角色
选择受信服务:人工智能平台PAI
为已创建的RAM角色授权。
将系统策略或者自定义策略授权给RAM角色,使其拥有相关的资源访问或操作权限。具体操作,请参见步骤三:为RAM角色授权。例如授予RAM角色访问OSS的权限AliyunOSSReadOnlyAccess。
若您使用的是RAM用户(阿里云子账号),请联系阿里云账号(主账号)为您授予使用该RAM角色的权限,具体操作,请参见为RAM用户授权。自定义权限策略内容示例如下:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
其中${RoleName}需要替换为DLC任务关联的RAM角色名称。
提交DLC任务并关联RAM角色。您只需在角色信息区域配置以下关键参数,其他参数配置说明,请参见创建训练任务。
参数
描述
实例RAM角色
选择自定义角色。
RAM角色
选择在上述步骤中已创建的RAM角色。该任务在基于STS临时凭证访问云产品时,拥有的权限将与该自定义角色的权限保持一致。
配置RAM角色后,您需要基于DLC关联的RAM角色获取临时访问凭证。
场景三:DLC任务不关联RAM角色
无需使用密钥访问数据时,建议您不关联角色。您可以在创建DLC任务时,在角色信息区域,选择不关联角色作为实例RAM角色即可。具体操作,请参见创建训练任务。
基于DLC关联的RAM角色获取临时访问凭证
在创建DLC任务时,若为任务分配了PAI默认角色或自定义角色,您可以通过以下方式便捷地获取临时访问凭证:
方式一:通过Credentials工具获取
Credentials工具会调用DLC任务本地的服务(任务创建时已自动注入)获取STS临时访问凭证,该凭证会周期性更新。
在创建DLC任务时,完成以下关键配置,更多配置说明,请参见创建训练任务。
安装阿里云Credentials工具。
在三方库配置参数中,选中三方库列表,并在编辑框中配置alibabacloud_credentials,来安装阿里云Credentials工具。
说明如果镜像中已预装此库,该配置步骤可省略。
配置脚本文件。
以Python为例,脚本内容示例如下,更多语言SDK示例,请参见使用访问凭据访问阿里云OpenAPI最佳实践。您可以通过代码配置或挂载配置,将脚本文件上传至DLC环境中。
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_credentials.models import Config as CredConfig credentialsConfig = CredConfig( type='credentials_uri' ) credentialsClient = CredClient(credentialsConfig)
方式二:直接访问DLC任务本地服务获取
在创建DLC任务时,您可以在启动命令中配置以下命令,访问本地自动注入的Server直接获取。具体操作,请参见创建训练任务。
# 获取实例RAM角色的临时授权访问凭证
curl $ALIBABA_CLOUD_CREDENTIALS_URI
返回示例如下所示:
{
"Code": "Success",
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
其中:
SecurityToken:RAM角色的临时Token。
Expiration:RAM角色的临时授权访问凭证的有效期。
方式三:直接访问任务本地内文件获取
在DLC容器中访问指定路径的文件(由PAI自动注入并周期性刷新),获取RAM角色的临时访问凭证。该文件所在的路径为/mnt/.alibabacloud/credentials
,文件内容示例如下:
{
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
使用示例
示例一:基于DLC的RAM角色访问ODPS
在创建DLC任务时,完成以下关键配置,更多配置说明,请参见创建训练任务。
安装阿里云Credentials工具。
在三方库配置参数中,配置以下三方库列表,来安装阿里云Credentials工具和ODPS SDK。
alibabacloud_credentials pyodps
说明如果镜像中已预装此库,该配置步骤可省略。
配置脚本文件。
以Python为例,脚本内容示例如下。您可以通过代码配置或挂载配置,将脚本文件上传至DLC环境中,并配置挂载路径,例如
/mnt/data/
。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)
配置执行命令。
将启动命令配置为执行脚本的命令。例如
python /mnt/data/xx.py
。配置角色信息。
实例RAM角色选择PAI默认角色。
示例二:基于DLC的RAM角色访问OSS
在创建DLC任务时,完成以下关键配置,更多配置说明,请参见创建训练任务。
安装阿里云Credentials工具。
在三方库配置参数中,配置以下三方库列表,来安装阿里云Credentials工具和OSS SDK。
alibabacloud_credentials oss2
说明如果镜像中已预装此库,该配置步骤可省略。
配置脚本文件。
以Python为例,脚本内容示例如下。您可以通过代码配置或挂载配置,将脚本文件上传至DLC环境中,并配置挂载路径,例如
/mnt/data/
。import oss2 from alibabacloud_credentials.client import Client from alibabacloud_credentials import providers from itertools import islice auth = oss2.ProviderAuth(providers.DefaultCredentialsProvider()) bucket = oss2.Bucket(auth, '{oss_endpoint}', # 需替换为您的oss bucket所在region的endpoint '{oss_bucket}' # 需替换为您的oss bucket名称 ) for b in islice(oss2.ObjectIterator(bucket), 10): print(b.key)
配置执行命令。
将启动命令配置为执行脚本的命令。例如
python /mnt/data/xx.py
。配置角色信息。
实例RAM角色选择PAI默认角色。
常见问题
创建DLC任务时选择自定义角色报错,应如何解决?
报错信息为check permission for ram role failed或check permission for sub user failed。
您可以登录RAM控制台,确认该角色是否存在。
若角色不存在,您需将实例RAM角色修改为已存在的角色。
若角色存在,您需联系主账号,为您的子账号授予使用该角色的权限,详情请参见为RAM用户授权。自定义权限策略如下(需将
${RoleName}
替换为RAM角色的名称):{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
报错信息为Failed to assume role for user。
该问题一般是由于您的角色未配置信任策略。您可以按照以下操作步骤为您的角色添加信任策略:
使用RAM管理员登录RAM控制台。
在左侧导航栏,选择 。
在角色页面,单击目标RAM角色名称。
在信任策略页签,单击编辑信任策略。
修改信任策略内容,然后单击保存信任策略。
假设该角色原始的信任策略为:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com" ] } } ], "Version": "1" }
则新的策略内容修改如下:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com", "pai.aliyuncs.com" ] } } ], "Version": "1" }