阿里云国际代理商:人工智能平台PAI-配置EAS RAM角色

在EAS服务中访问其他云资源时,需配置访问密钥进行身份验证。通过关联RAM角色,您可在EAS服务实例内基于STS临时凭证访问其他云资源,无需再配置长期AccessKey,减少密钥泄漏风险。本文介绍如何创建RAM角色并授权给EAS,以及如何基于RAM角色获取STS临时访问凭证。

功能优势

RAM角色是一种允许云服务扮演的可信实体角色,用于解决“跨服务访问”的问题。基于RAM角色获取临时访问凭证来验证身份信息和访问权限控制,具有以下优势:

  • 安全保密:无需在服务内管理凭据,使用STS临时访问凭证替代长期AccessKey,减少密钥泄露风险。

  • 便捷可控:通过修改RAM角色权限策略,可更便捷、更精细地控制各开发者在服务内访问云资源的权限。

使用限制

目前,一个EAS服务只能关联一个RAM角色。

配置方法

在创建EAS服务时为其配置RAM角色,并获取STS临时访问凭证。

为EAS配置RAM角色

支持以下两种配置方式:

配置方式

适用场景

方式一:为EAS服务授权PAI默认角色

说明

PAI默认角色基于服务角色AliyunServiceRoleForPaiEas运作,仅拥有访问MaxCompute和OSS的权限。

无需额外创建RAM角色,适用于访问MaxCompute和OSS的基本开发资源。为EAS服务授权PAI默认角色,在以下场景中无需配置AccessKey:

  • 通过PyODPS SDK访问EAS服务所有者有执行权限的MaxCompute项目中的数据。

  • 通过OSS SDK访问当前工作空间预设的默认OSS存储空间(Bucket)中的数据。

方式二:为EAS服务授权自定义角色

当PAI默认角色权限不足时,您可以创建RAM角色并自定义其权限策略,按需控制开发者在EAS服务内可访问的云资源范围。

为EAS服务授权自定义角色后,通过STS临时凭证访问云产品时,所拥有的权限将与该自定义角色的权限保持一致。在部署服务时,系统将基于自定义角色的权限访问挂载的数据源并拉取自定义镜像。

具体配置方法如下:

方式一:为EAS服务授权PAI默认角色
方式二:为EAS服务授权自定义角色

在部署EAS服务时,在服务配置区域的JSON中添加以下配置:

"options": {
  "enable_ram_role": true
}
说明

如果使用JSON直接部署,并且希望通过PAI默认角色调用OSS SDK时,需要确保服务配置中包含metadata.workspace_id字段。

基于EAS服务关联的RAM角色获取临时访问凭证

为EAS服务分配了PAI默认角色或自定义角色后,您可以通过以下方式获取临时访问凭证:
方式一:通过Credentials工具获取

Credentials工具会调用EAS服务实例内的本地服务(EAS服务创建时已自动注入)获取STS临时访问凭证,该凭证会周期性更新。

在部署EAS服务时,完成以下关键配置:

  • 安装阿里云Credentials工具。

    三方库配置参数中,选中三方库列表,并在编辑框中配置alibabacloud_credentials,来安装阿里云Credentials工具。

    说明

    如果镜像中已预装此库,该配置步骤可省略。

配置脚本文件。

以Python为例,脚本内容示例如下,更多语言SDK示例,请参见使用访问凭据访问阿里云OpenAPI最佳实践。

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig

credentialsConfig = CredConfig(
type='credentials_uri'
)
credentialsClient = CredClient(credentialsConfig)

方式二:直接访问EAS服务实例内的本地服务获取:

在EAS服务实例内,执行以下命令,可访问本地自动注入的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角色的临时授权访问凭证的有效期。

方式三:直接访问EAS服务实例的本地内文件获取

在EAS服务实例中访问指定路径的文件(由PAI-EAS自动注入并周期性刷新),获取RAM角色的临时访问凭证。该文件所在的路径为/etc/ram/credentials,文件内容示例如下:

{
	"Code": "Success",
	"AccessKeyId": "STS.N*********7",
	"AccessKeySecret": "3***************d",
	"SecurityToken": "DFE32G*******",
	"Expiration": "2024-05-21T10:39:29Z"
}

 

使用示例

介绍如何基于EAS的RAM角色访问PyODPS或OSS。您可以将代码集成到服务镜像中,也可以通过模型配置将其挂载到服务实例中。本示例将以挂载方式为例介绍,具体操作步骤如下:

  1. 进入自定义部署页面,详情请参见服务部署。

  2. 自定义部署页面,配置以下关键参数,更多参数配置说明,请参见控制台自定义部署参数说明。

    参数

    描述

    环境信息

    运行命令

    增加执行代码的命令,例如python /mnt/data/xx.py

    模型配置

    将代码文件xx.py通过模型配置挂载到EAS服务实例中。选择代码文件所在目录,并配置挂载路径/mnt/data/。代码文件内容示例如下:

    示例1:基于RAM角色访问OSS数据
    示例2:基于RAM角色访问PyODPS数据
     
    import oss2
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials import providers
    from itertools import islice
    
    if __name__ == '__main__':
        auth = oss2.ProviderAuth(providers.DefaultCredentialsProvider())
        # <oss_endpoint>需替换为您的OSS Bucket名称;<oss_bucket>需替换为您的OSS Bucket所在region的Endpoint。
        bucket = oss2.Bucket(auth,
                             '<oss_endpoint>',
                             '<oss_bucket>'
                  )
    
        for b in islice(oss2.ObjectIterator(bucket), 10):
            print(b.key)
    

    其中:

    • <oss_bucket>需替换为您的OSS Bucket名称,并确保其为当前工作空间中预设的默认OSS存储空间(Bucket)。

    • <oss_endpoint>需替换为您的OSS Bucket所在region的Endpoint。因EAS默认不通公网,此处应配置内网Endpoint地址(例如oss-cn-hangzhou-internal.aliyuncs.com)。如果需要使用公网Endpoint(例如oss-cn-hangzhou.aliyuncs.com),则需为EAS配置具有公网访问能力的专有网络,详情请参见配置网络连通。

    三方库配置

    配置以下三方库列表,来安装阿里云Credentials工具、PyODPS SDK和OSS SDK。

     
    alibabacloud_credentials
    pyodps
    oss2
    说明

    如果镜像中已预装此库,该配置步骤可省略。

    服务配置

    PAI默认角色为例,在服务配置区域JSON中添加以下配置:

     
    "options": {
            "enable_ram_role": true
        }
    说明

    如果使用JSON直接部署,并且希望通过PAI默认角色调用OSS SDK时,需要确保服务配置中包含metadata.workspace_id字段。

  3. 参数配置完成后,单击部署

    服务部署成功后,您可以在服务日志中查看运行结果。

常见问题

部署EAS服务时配置自定义RAM角色报错,应如何解决?

  • 报错信息:image

    登录RAM控制台,确认角色是否存在。

    • 若角色不存在,请将实例自定义RAM角色修改为已存在的角色。

    • 若角色存在,请联系主账号为子账号授予如下自定义权限策略(需将${RoleName}替换为RAM角色名称),以获得将RAM角色传递给EAS实例的权限,详情请参见为RAM用户授权。

       
      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "ram:PassRole",
            "Resource": "acs:ram::*:role/${RoleName}"
          }
        ]
      }
  • 部署事件报错信息为unable to render, error: failed to assume role for user, reason: You are not authorized to do this action. You should be authorized by RAM.

    可在模型在线服务(EAS)页面,单击服务名称,然后切换到部署事件页签进行查看。如下图所示:image

    该问题一般是由于您的角色未配置信任策略。您可以按照以下操作步骤为您的角色添加信任策略:

    1. 使用RAM管理员登录RAM控制台。

    2. 在左侧导航栏,选择身份管理 > 角色

    3. 角色页面,单击目标RAM角色名称。

    4. 信任策略页签,单击编辑信任策略,添加信任“eas.pai.aliyuncs.com”

    5. 在编辑器中修改信任策略内容,然后单击确定

      假设该角色原始的信任策略为:

      {
        "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",
                "eas.pai.aliyuncs.com" 
              ]
            }
          }
        ],
        "Version": "1"
      }

相关新闻

联系我们

联系我们

电报:@yunshuguoji

邮件:yunshuguoji@outlook.com

工作时间:早上8:00-晚上11:00

认准电报
认准电报
分享本页
返回顶部