跨账号访问OSS

IMM通过绑定OSS Bucket,能够对同一账号下的OSS资源进行处理。若IMM需要跨账号访问OSS资源,则需通过配置Bucket Policy,以授权其他用户对指定Bucket中的资源进行访问和处理。本文介绍如何通过配置Bucket Policy实现IMM跨账号访问OSS资源。

Bucket Policy是阿里云OSS推出的一种针对Bucket的授权策略。用户可以通过阿里云OSS提供的Bucket Policy来授权其他用户访问其OSS资源。关于Bucket Policy的更多信息,请参见Bucket Policy

背景信息

用户A希望通过IMM提供的API处理用户B账号下的OSS资源,但用户B不便向用户A开放账号权限。在此情况下,用户B可以通过Bucket Policy授予用户A访问指定Bucket的权限。一旦用户A账号获得授权,即可调用IMMAPI处理用户B账号下该Bucket中的资源。

前提条件

  • 用户A已创建IMM项目(例如immtest),并绑定了默认服务关联角色AliyunIMMDefaultRole,IMM默认使用此角色来访问用户A在其他云产品中的资源。

    说明

    服务关联角色是一种可信实体为阿里云服务的RAM角色,旨在解决跨云服务的授权访问问题。通过服务关联角色您可以更好地配置云服务正常操作所必需的权限,避免误操作带来的风险。关于服务关联角色的更多详细信息,请参见服务关联角色

  • 用户B已创建Bucket(例如test-bucket-2024),并已将待处理的资源上传至该Bucket。

    说明

    已创建Bucket需关闭阻止公共访问功能。

步骤一:用户B添加Bucket Policy

用户B通过Bucket Policy授予用户A访问授权Bucket,操作步骤如下:

  1. 获取用户A的阿里云账号UID。

    1. 用户A登录阿里云控制台

    2. 将鼠标悬停至右上角的用户信息处,查看并记录账号ID,即阿里云账号UID。

  2. 用户B授予用户A服务关联角色AliyunIMMDefaultRole访问授权资源。

    1. 用户B登录OSS管理控制台

    2. 在左侧导航栏,单击Bucket 列表,然后单击目标Bucket名称。

    3. 在左侧导航栏,选择权限控制>Bucket 授权策略

    4. Bucket 授权策略页面的按语法策略添加页签,单击编辑

    imagee. 在语法策略输入框中,输入Bucket Policy,并单击保存

    以下Bucket Policy表示允许用户A的服务关联角色AliyunIMMDefaultRole访问用户B的目标存储空间test-bucket-2024内的所有资源。其中test-bucket-2024为授权的Bucket名称,请根据实际值替换。关于权限策略的更多信息,请参见RAM Policy

    重要
    • 通过Bucket Policy按语法策略的方式进行授权时,新添加的策略会覆盖已有的策略,请确保新添加策略包含已有策略的内容,否则可能导致关联已有策略的操作失败。

    • 实际使用时,请根据实际情况相应替换{用户A的阿里云账号UID}{用户B的阿里云账号UID}以及目标Bucket名称

    {
      "Version": "1",
      "Statement": [{
        "Effect": "Allow",
        "Action": [
          "ram:PassRole"
        ],
        "Principal": [
          
        ],
        "Resource": [
          "arn:sts::{用户A的阿里云账号UID}:assumed-role/AliyunIMMDefaultRole/*"
        ]
      }, {
        "Effect": "Allow",
        "Action": [
          "oss:GetObject",
          "oss:GetObjectAcl",
          "oss:ListObjects",
          "oss:RestoreObject",
          "oss:GetVodPlaylist",
          "oss:ListObjectVersions",
          "oss:GetObjectVersion",
          "oss:GetObjectVersionAcl",
          "oss:RestoreObjectVersion"
        ],
        "Principal": [
          "arn:sts::{用户A的阿里云账号UID}:assumed-role/AliyunIMMDefaultRole/*"
        ],
        "Resource": [
          "acs:oss:*:{用户B的阿里云账号UID}:test-bucket-2024/*"
        ]
      }]
    }

步骤二:用户A通过IMM跨账号访问OSS资源

用户B完成授权后,用户A可以通过调用API接口处理用户B指定Bucket下的资源。本文以调用DetectImageScore - 获取图片分数为例,用户A可通过该接口获取用户B拥有的Bucket中的某个图片分数。

图片信息

  • IMM项目名称:immtest

  • 待评分图片的存储地址:oss://test-bucket-2024/test-object.jpg

请求示例

{
 "ProjectName": "immtest",
 "SourceURI": "oss://test-bucket-2024/test-object.jpg",
}

返回示例

{
 "RequestId": "1AEABE83-5746-02E4-A97D-52EE4BB*****",
 "ImageScore": {
 "OverallQualityScore": 0.727
 }
}
说明

调用结果返回了图片分数,表示用户A可以通过调用API接口处理用户B指定Bucket下的资源,实现了跨账号访问。