クロスアカウント Amazon S3 ストレージの権限の付与 - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

クロスアカウント Amazon S3 ストレージの権限の付与

ユーザーが SageMaker Canvas にアクセスするための SageMaker ドメインまたはユーザープロファイルを設定するときは、Canvas アーティファクトの Amazon S3 ストレージの場所を指定します。これらのアーティファクトには、入力データセット、モデルアーティファクト、予測、他のアプリケーションデータの保存済みコピーが含まれます。デフォルトで SageMaker 作成された 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://<my-bucket>/<machine-learning>/Canvas/<user-1>/Training です。

Amazon S3 バケットのクロスアカウント権限

次のセクションでは、Canvas が別のアカウントの Amazon S3 バケットにアクセスするために必要な権限を付与するための基本的な手順の概要を説明します。詳細な手順については、「Amazon S3 ユーザーガイド」の「例 2: バケット所有者がクロスアカウントのバケットのアクセス許可を付与する」を参照してください。

  1. Amazon S3 バケット (bucketA) をアカウント A に作成します。

  2. 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?」を参照してください。

    注記

    GetBucketCorsGetBucketLocation などのバケットレベルのアクションは、フォルダではなくバケットレベルのリソースに追加する必要があります。

    次の 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", ] } ] }
  3. アカウント 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」を参照してください。

  1. アカウント A で Amazon S3 バケットbucketA、、および Amazon S3 KMS キーを作成します。 s3KmsInAccountA

  2. 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" } ] }
  3. アカウント 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 アーティファクトのストレージの場所として使用できるようになりました。