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账号获得授权,即可调用IMM的API处理用户B账号下该Bucket中的资源。
前提条件
用户A已创建IMM项目(例如immtest),并绑定了默认服务关联角色AliyunIMMDefaultRole,IMM默认使用此角色来访问用户A在其他云产品中的资源。
说明服务关联角色是一种可信实体为阿里云服务的RAM角色,旨在解决跨云服务的授权访问问题。通过服务关联角色您可以更好地配置云服务正常操作所必需的权限,避免误操作带来的风险。关于服务关联角色的更多详细信息,请参见服务关联角色。
用户B已创建Bucket(例如test-bucket-2024),并已将待处理的资源上传至该Bucket。
说明已创建Bucket需关闭阻止公共访问功能。
步骤一:用户B添加Bucket Policy
用户B通过Bucket Policy授予用户A访问授权Bucket,操作步骤如下:
获取用户A的阿里云账号UID。
用户A登录阿里云控制台。
将鼠标悬停至右上角的用户信息处,查看并记录账号ID,即阿里云账号UID。
用户B授予用户A服务关联角色AliyunIMMDefaultRole访问授权资源。
用户B登录OSS管理控制台。
在左侧导航栏,单击Bucket 列表,然后单击目标Bucket名称。
在左侧导航栏,选择权限控制>Bucket 授权策略。
在Bucket 授权策略页面的按语法策略添加页签,单击编辑。
e. 在语法策略输入框中,输入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下的资源,实现了跨账号访问。