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

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

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

SageMaker SageMaker ユーザーがCanvasにアクセスするためのドメインまたはユーザープロファイルを設定するときは、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 AWS KMS s3KmsInAccountA のキーにアクセスします。

    次の 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 アーティファクトの保存場所として使用できるようになります。