クロスアカウント 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 ストレージロケーションのURIトレーニングフォルダの最終 Amazon S3 は 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: バケット所有者がクロスアカウントのバケットのアクセス許可を付与する」を参照してください。

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

  2. Canvas ユーザーは、アカウント B という別のアカウントに存在します。次のステップでは、アカウント B roleBの Canvas ユーザーIAMロールを参照します。

    IAM ポリシーをアタッチして、アカウント B roleBのIAMロールに、アカウント A bucketAのオブジェクトを との間でダウンロード (GetObject) およびアップロード (PutObject) するアクセス許可を付与します。

    特定のバケットフォルダへのアクセスを制限するには、リソース要素でフォルダ名 (arn:aws:s3:::<bucketA>/FolderName/* など) を定義します。詳細については、IAM「ポリシーを使用して特定のフォルダへのユーザー固有のアクセスを許可する方法」を参照してください。

    注記

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

    次のIAMポリシー例では、 のオブジェクトにアクセスroleBするために必要なアクセス許可を に付与しますbucketA

    { "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 bucketAで のバケットポリシーを設定して、アカウント B roleBのIAMロールにアクセス許可を付与します。

    注記

    また、管理者はバケットの [権限] セクションで、[すべてのパブリックアクセスをブロック] を無効にする必要があります。

    次の例は、必要な権限を 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 「 デベロッパーガイド」の「他のアカウントのユーザーにKMSキーの使用を許可する」を参照してください。

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

  2. Canvas ユーザーは、アカウント B という別のアカウントに存在します。次のステップでは、アカウント B roleBの Canvas ユーザーIAMロールを参照します。

    アカウント B roleBのIAMロールに、以下を実行するアクセス許可を付与します。

    • アカウント A の bucketA との間でオブジェクトをダウンロード (GetObject) およびアップロード (PutObject) する。

    • s3KmsInAccountA アカウント A の AWS KMS キーにアクセスします。

    次のIAMポリシー例では、 でオブジェクトにアクセスしbucketA、 KMSキー を使用するために必要なアクセス許可を roleBに付与しますs3KmsInAccountA

    { "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. アカウント B のIAMロールにアクセス許可を付与するには、アカウント A s3KmsInAccountAで のバケットポリシーbucketAroleBのキーポリシーを設定します。

    次の例は、必要な権限を 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アクセスを許可するためにs3KmsInAccountAアカウント A のKMSキーにアタッチするキーポリシーです。キーポリシーステートメントの作成およびアタッチ方法の詳細については、「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 アーティファクトのストレージロケーションとして使用できるようになりました。