

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

# クロスアカウント Amazon S3 ストレージの権限の付与
<a name="canvas-permissions-cross-account"></a>

ユーザーが SageMaker Canvas にアクセスできるように SageMaker AI ドメインまたはユーザープロファイルを設定するには、Canvas アーティファクト用の Amazon S3 ストレージロケーションを指定します。これらのアーティファクトには、入力データセット、モデルアーティファクト、予測、他のアプリケーションデータの保存済みコピーが含まれます。SageMaker AI が作成したデフォルトの Amazon S3 バケットを使用することも、ストレージロケーションをカスタマイズして Canvas アプリケーションデータを保存する独自のバケットを指定することもできます。

Canvas データを保存するために別の AWS アカウントで Amazon S3 バケットを指定できますが、まず Canvas がバケットにアクセスできるようにクロスアカウントアクセス許可を付与する必要があります。

以下のセクションでは、別のアカウントの Amazon S3 バケットとの間で、オブジェクトをアップロードおよびダウンロードするための権限を Canvas に付与する方法について説明します。バケットが暗号化されている場合、 には追加のアクセス許可があります AWS KMS。

## 要件
<a name="canvas-permissions-cross-account-prereqs"></a>

開始する前に、以下の要件を満たしていることを確認します。
+ クロスアカウント 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 バケットのクロスアカウント権限
<a name="canvas-permissions-cross-account-s3"></a>

次のセクションでは、Canvas が別のアカウントの Amazon S3 バケットにアクセスするために必要な権限を付与するための基本的な手順の概要を説明します。詳細な手順については、「Amazon S3 ユーザーガイド」の「[例 2: バケット所有者がクロスアカウントのバケットのアクセス許可を付与する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)」を参照してください。**

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

1. 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?](https://aws.amazon.com/premiumsupport/knowledge-center/iam-s3-user-specific-folder/)」を参照してください。
**注記**  
`GetBucketCors` や `GetBucketLocation` などのバケットレベルのアクションは、フォルダではなくバケットレベルのリソースに追加する必要があります。

   次の IAM ポリシーの例では、`bucketA` 内のオブジェクトにアクセスするために必要な権限を `roleB` に付与しています。

------
#### [ JSON ]

****  

   ```
   {
       "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"
               ]
           }
       ]
   }
   ```

------

1. アカウント A の `roleB` のバケットポリシーを設定して、アカウント B の IAM ロール `bucketA` に権限を付与します。
**注記**  
また、管理者はバケットの **[権限]** セクションで、**[すべてのパブリックアクセスをブロック]** を無効にする必要があります。

   次の例は、必要な権限を `roleB` に付与する `bucketA` のバケットポリシーを示しています。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/roleB"
               },
               "Action": [
                   "s3:DeleteObject",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource": "arn:aws:s3:::bucketA/FolderName/*"
           },
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/roleB"
               },
               "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketCors",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::bucketA"
           }
       ]
   }
   ```

------

上記の権限を設定すると、アカウント B の Canvas ユーザープロファイルは、アカウント A の Amazon S3 バケットを Canvas アーティファクトのストレージロケーションとして使用できるようになります。

## で暗号化されたクロスアカウント Amazon S3 バケットのアクセス許可 AWS KMS
<a name="canvas-permissions-cross-account-s3-kms"></a>

次の手順では、Canvas が暗号化されている別のアカウントの Amazon S3 バケットにアクセスできるように、必要なアクセス許可を付与する方法を示します AWS KMS。この手順は前の手順と似ていますが、別の権限が追加されています。クロスアカウント KMS キーアクセス権限の付与の詳細については、「*AWS KMS Developer Guide*」の「[Allowing users in other accounts to use a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)」を参照してください。

1. アカウント A に Amazon S3 バケット `bucketA` と Amazon S3 KMS キー `s3KmsInAccountA` を作成します。

1. Canvas ユーザーはアカウント B という別のアカウントを使用しています。次の手順では、Canvas ユーザーの IAM ロールをアカウント B の `roleB` とします。

   アカウント B の IAM ロール `roleB` に、次の権限を付与します。
   + アカウント A の `bucketA` との間でオブジェクトをダウンロード (`GetObject`) およびアップロード (`PutObject`) する。
   + アカウント A `s3KmsInAccountA`の AWS KMS キーにアクセスします。

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

------
#### [ JSON ]

****  

   ```
   {
       "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:us-east-1:111122223333:key/s3KmsInAccountA"
           }
       ]
   }
   ```

------

1. アカウント A の `bucketA` のバケットポリシーと `s3KmsInAccountA` のキーポリシーを設定して、アカウント B の IAM ロール `roleB` に権限を付与します。

   次の例は、必要な権限を `roleB` に付与する `bucketA` のバケットポリシーを示しています。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/roleB"
               },
               "Action": [
                   "s3:DeleteObject",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource": "arn:aws:s3:::bucketA/FolderName/*"
           },
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/roleB"
               },
               "Action": [
                   "s3:GetBucketCors",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::bucketA"
           }
       ]
   }
   ```

------

   次の例は、`roleB` にアクセス権限を付与するために、アカウント A の KMS キー `s3KmsInAccountA` にアタッチするキーポリシーを示しています。キーポリシーステートメントの作成およびアタッチ方法の詳細については、「*AWS KMS Developer Guide*」の「[Creating a key policy](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html)」を参照してください。

   ```
   {
     "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 アーティファクトのストレージロケーションとして使用できるようになります。