翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
クロスアカウント 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
のバケットポリシーを示しています。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::accountB:role/roleB" }, "Action": [ "s3:DeleteObject", "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::bucketA/FolderName/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::accountB:role/roleB" }, "Action": [ "s3:ListBucket", "s3:GetBucketCors", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::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
に付与しています。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::bucketA/FolderName/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketCors", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::bucketA" ] }, { "Action": [ "kms:DescribeKey", "kms:CreateGrant", "kms:RetireGrant", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlainText", "kms:Decrypt" ], "Effect": "Allow", "Resource": "arn:aws:kms:{region}:accountA:key/s3KmsInAccountA" } ] }
-
アカウント A の
bucketA
のバケットポリシーとs3KmsInAccountA
のキーポリシーを設定して、アカウント B の IAM ロールroleB
に権限を付与します。次の例は、必要な権限を
roleB
に付与するbucketA
のバケットポリシーを示しています。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::accountB:role/roleB" }, "Action": [ "s3:DeleteObject", "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::bucketA/FolderName/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::accountB:role/roleB" }, "Action": [ "s3:GetBucketCors", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::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 アーティファクトのストレージロケーションとして使用できるようになります。