Intelligent Media Management (IMM) では、バケットを IMM プロジェクトにバインドすることで、同じ Alibaba Cloud アカウント内の Object Storage Service (OSS) バケットに保存されているデータを処理できます。さらに、バケットポリシーを設定することで、別の Alibaba Cloud アカウントの OSS バケットに保存されているデータを処理することもできます。このトピックでは、IMM に OSS データへのクロスアカウントアクセスを許可し、データを処理する方法について説明します。
バケットポリシーは、Alibaba Cloud アカウント間でデータアクセスを許可できる、バケット固有のアクセス ポリシーです。詳細については、「バケットポリシー」をご参照ください。
背景情報
ユーザー A (アカウント A) は、IMM API を使用して、ユーザー B (アカウント B) が所有する OSS バケット内のデータを処理する必要があります。ただし、ユーザー B は、コンプライアンス要件のため、ユーザー A に Resource Access Management (RAM) ユーザーを提供したり、バケットを公開したりすることはできません。この場合、ユーザー B は、ユーザー A がバケットにアクセスできるようにするバケットポリシーを作成できます。
前提条件
アカウント A に IMM プロジェクトが作成されています。アカウント A の IMM サービスは、[aliyunimmdefaultrole] サービスロールを引き受けて、他の Alibaba Cloud サービスのリソースにアクセスします。この例では、immtest プロジェクトを使用します。
説明サービスロールとは、他の Alibaba Cloud サービスにアクセスするために Alibaba Cloud サービスが引き受ける RAM ロールです。サービスロールを使用すると、きめ細かい権限管理が可能になり、サービス間のアクセス認証が簡素化されます。サービスロールの詳細については、「サービスロール」をご参照ください。
アカウント B に OSS バケットが作成されています。IMM API を使用して処理される残りのリソースは、バケットにアップロードされます。この例では、test-bucket-2024 バケットを使用します。
説明バケットへのパブリックアクセスがブロックされていることを確認してください。
ステップ 1: アカウント B が所有するバケットのバケットポリシーを作成する
アカウント B のバケットのバケットポリシーを作成して、アカウント A にバケットへのアクセス権を付与するには、次の手順を実行します。
アカウント A の UID を取得します。
アカウント A を使用して [Alibaba Cloud 管理コンソール] にログインします。
右上隅のユーザープロファイルにポインターを移動し、アカウント ID (UID) をコピーします。ユーザー B にアカウント A の UID を提供します。
アカウント A の [aliyunimmdefaultrole] ロールがバケットにアクセスできるようにするには、次の手順を実行します。
アカウント B を使用して [OSS コンソール] にログインします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。[バケット] ページで、バケットの名前をクリックします。
左側のナビゲーションツリーで、[権限管理] >[バケットポリシー] を選択します。
[バケットポリシー] タブで、[構文で追加] をクリックし、[編集] をクリックします。
e. コードエディタで、バケットポリシーの内容を入力し、[保存] をクリックします。
次のバケットポリシーは、アカウント A の AliyunIMMDefaultRole ロールに、アカウント B に属する test-bucket-2024 バケット内のすべてのリソースへのアクセスを許可します。権限の詳細については、「RAM ポリシー」をご参照ください。
重要ポリシー文を指定してバケットポリシーを設定し、RAM ロールに必要な権限を付与する場合、新しいバケットポリシーは既存のバケットポリシーを上書きします。新しいバケットポリシーに既存のバケットポリシーの内容が含まれていることを確認してください。そうでない場合、既存のバケットポリシーで指定された元の操作が失敗する可能性があります。
サンプルのバケットポリシーを使用する場合は、{アカウント A の UID}、{アカウント B の UID}、およびバケット名 test-bucket-2024 を実際の情報に置き換えてください。
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "ram:PassRole" ], "Principal": [ ], "Resource": [ "arn:sts::{UID of Account A}: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::{UID of Account A}:assumed-role/AliyunIMMDefaultRole/*" ], "Resource": [ "acs:oss:*:{UID of Account B}:test-bucket-2024/*" ] }] }
ステップ 2: アカウント A から IMM を使用してバケット内のリソースを処理する
バケットポリシーが設定されると、アカウント A は IMM API を使用してバケット内のリソースを処理できます。この例では、アカウント A が DetectImageScore 操作を呼び出すことによって、アカウント B が所有するバケット内のイメージの品質スコアを照会する方法を示します。
サンプルイメージ
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 がアカウント B のバケット内のリソースへのクロスアカウントアクセス権を持っていることを示します。