翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
クロスアカウント Amazon S3 ストレージの権限の付与
ユーザーが SageMaker Canvas にアクセスするための SageMaker AI ドメインまたはユーザープロファイルを設定するときは、Canvas アーティファクトの Amazon S3 ストレージの場所を指定します。これらのアーティファクトには、入力データセット、モデルアーティファクト、予測、他のアプリケーションデータの保存済みコピーが含まれます。デフォルトの SageMaker AI が作成した Amazon S3 バケットを使用するか、ストレージの場所をカスタマイズして Canvas アプリケーションデータを保存するための独自のバケットを指定できます。
Canvas データを保存するために別の AWS アカウントで Amazon S3 バケットを指定できますが、まず Canvas がバケットにアクセスできるようにクロスアカウントアクセス許可を付与する必要があります。
以下のセクションでは、別のアカウントの Amazon S3 バケットとの間で、オブジェクトをアップロードおよびダウンロードするための権限を Canvas に付与する方法について説明します。バケットが暗号化されている場合、 には追加のアクセス許可があります AWS KMS。
要件
開始する前に、以下の要件を満たしていることを確認します。
クロスアカウント Amazon S3 バケット (および関連する AWS KMS キー) は、Canvas ユーザードメインまたはユーザープロファイルと同じ AWS リージョンに存在する必要があります。
Canvas ストレージロケーションのトレーニングフォルダの Amazon S3 URI は 128 文字以下でなければなりません。最終的な S3 URI は、バケットパス (
s3://<your-bucket-name>/<folder-name>/) と Canvas によってバケットに追加されるパス (Canvas/<user-profile-name>/Training) で構成されます。例えば、128 文字以下で使用可能なパスはs3://<amzn-s3-demo-bucket>/<machine-learning>/Canvas/<user-1>/Trainingです。
Amazon S3 バケットのクロスアカウント権限
次のセクションでは、Canvas が別のアカウントの Amazon S3 バケットにアクセスするために必要な権限を付与するための基本的な手順の概要を説明します。詳細な手順については、「Amazon S3 ユーザーガイド」の「例 2: バケット所有者がクロスアカウントのバケットのアクセス許可を付与する」を参照してください。
-
Amazon S3 バケット (
bucketA) をアカウント A に作成します。 -
Canvas ユーザーはアカウント B という別のアカウントを使用しています。次の手順では、Canvas ユーザーの IAM ロールをアカウント B の
roleBとします。IAM ポリシーをアタッチして、アカウント A の
bucketAのオブジェクトのダウンロード (GetObject)/アップロード (PutObject) 権限をアカウント B のIAM ロールroleBに付与します。特定のバケットフォルダへのアクセスを制限するには、リソース要素でフォルダ名 (
arn:aws:s3:::<bucketA>/FolderName/*など) を定義します。詳細については、「How can I use IAM policies to grant user-specific access to specific folders?」を参照してください。 注記
GetBucketCorsやGetBucketLocationなどのバケットレベルのアクションは、フォルダではなくバケットレベルのリソースに追加する必要があります。次の IAM ポリシーの例では、
bucketA内のオブジェクトにアクセスするために必要な権限をroleBに付与しています。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::bucketA/FolderName/*", ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketCors", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::bucketA", ] } ] } -
アカウント A の
roleBのバケットポリシーを設定して、アカウント B の IAM ロールbucketAに権限を付与します。注記
また、管理者はバケットの [権限] セクションで、[すべてのパブリックアクセスをブロック] を無効にする必要があります。
次の例は、必要な権限を
roleBに付与するbucketAのバケットポリシーを示しています。
上記の権限を設定すると、アカウント B の Canvas ユーザープロファイルは、アカウント A の Amazon S3 バケットを Canvas アーティファクトのストレージロケーションとして使用できるようになります。
で暗号化されたクロスアカウント Amazon S3 バケットのアクセス許可 AWS KMS
次の手順では、Canvas が暗号化されている別のアカウントの Amazon S3 バケットにアクセスできるように、必要なアクセス許可を付与する方法を示します AWS KMS。この手順は前の手順と似ていますが、別の権限が追加されています。クロスアカウント KMS キーアクセス権限の付与の詳細については、「AWS KMS Developer Guide」の「Allowing users in other accounts to use a KMS key」を参照してください。
-
アカウント A に Amazon S3 バケット
bucketAと Amazon S3 KMS キーs3KmsInAccountAを作成します。 -
Canvas ユーザーはアカウント B という別のアカウントを使用しています。次の手順では、Canvas ユーザーの IAM ロールをアカウント B の
roleBとします。アカウント B の IAM ロール
roleBに、次の権限を付与します。アカウント A の
bucketAとの間でオブジェクトをダウンロード (GetObject) およびアップロード (PutObject) する。アカウント A
s3KmsInAccountAの AWS KMS キーにアクセスします。
次の IAM ポリシーの例では、
bucketA内のオブジェクトにアクセスし、KMS キーs3KmsInAccountAを使用するために必要な権限をroleBに付与しています。 -
アカウント A の
bucketAのバケットポリシーとs3KmsInAccountAのキーポリシーを設定して、アカウント B の IAM ロールroleBに権限を付与します。次の例は、必要な権限を
roleBに付与するbucketAのバケットポリシーを示しています。次の例は、
roleBにアクセス権限を付与するために、アカウント A の KMS キーs3KmsInAccountAにアタッチするキーポリシーを示しています。キーポリシーステートメントの作成およびアタッチ方法の詳細については、「AWS KMS Developer Guide」の「Creating a key policy」を参照してください。{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::accountB:role/roleB" ] }, "Action": [ "kms:DescribeKey", "kms:CreateGrant", "kms:RetireGrant", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlainText", "kms:Decrypt" ], "Resource": "*" }
上記の権限を設定すると、アカウント B の Canvas ユーザープロファイルは、アカウント A の暗号化された Amazon S3 バケットを Canvas アーティファクトのストレージロケーションとして使用できるようになります。