例 2: バケット所有者がクロスアカウントのバケットのアクセス許可を付与する
重要
アクセス許可は、個々のユーザーではなく、IAM ロールに付与することをお勧めします。これを行う方法については、クロスアカウントのアクセス許可の理解と IAM ロールの使用を参照してください。
トピック
ある AWS アカウント (例えば、アカウント A) で、バケットやオブジェクトなど、そのリソースにアクセスするためのアクセス許可を、別の AWS アカウント (アカウント B) に付与できます。アカウント B では、そのアカウントのユーザーに、付与されたアクセス許可を委任できます。この例のシナリオでは、バケット所有者が、特定のバケットオペレーションを実行するためのクロスアカウントアクセス許可を別のアカウントに付与します。
注記
また、バケットポリシーを使用して、アカウント A から直接アカウント B のユーザーにアクセス許可を付与することもできます。ただし、このユーザーには、アカウント B がアカウント A からアクセス許可を付与されていない場合でも、ユーザーが属している親アカウントであるアカウント B からのアクセス許可が必要です。このユーザーがリソース所有者と親アカウントの両方からのアクセス許可を持っている場合にのみ、ユーザーはリソースにアクセスできます。
この手順の概要を以下に示します。
-
アカウント A の管理者ユーザーは、特定のバケットオペレーションを実行するための、クロスアカウントアクセス許可を付与するバケットポリシーをアカウント B にアタッチします。
アカウント B の管理者ユーザーは、自動的にこのアクセス許可を継承することに注意してください。
-
アカウント B の管理者ユーザーは、アカウント A から受け取ったアクセス許可を委任するユーザーポリシーをユーザーにアタッチします。
-
アカウント B のユーザーは、アカウント A が所有するバケットのオブジェクトにアクセスすることにより、アクセス許可を確認します。
この例では、2 個のアカウントが必要です。次の表に、これらのアカウントとそれぞれの管理者ユーザーの呼び方を示します。IAM ガイドライン (「管理者ユーザーを使用したリソースの作成とアクセス許可の付与について」を参照) に従い、このチュートリアルではルートユーザー認証情報は使用しません。その代わりに、各アカウントで管理者ユーザーを作成し、その認証情報を使用してリソースを作成し、アクセス許可を付与します。
AWS アカウント ID | アカウントの呼び方 | アカウントの管理者ユーザー |
---|---|---|
|
アカウント A |
AccountAadmin |
|
アカウント B |
AccountBadmin |
ユーザーを作成し、アクセス許可を付与するためのすべてのタスクは、AWS Management Consoleで実行します。このチュートリアルでは、許可を検証するために、コマンドラインツールの AWS Command Line Interface (CLI) と AWS Tools for Windows PowerShell を使用するので、コードを記述する必要はありません。
チュートリアルの準備をする
-
前のセクションの表に示したように、2 個の AWS アカウントがあり、各アカウントに 1 人ずつの管理者ユーザーが存在することを確認します。
-
必要な場合、AWS アカウントにサインアップします。
-
アカウント A の認証情報を使用して、IAM コンソール
にサインインし、管理者ユーザーを作成します。 -
ユーザー
AccountAadmin
を作成して、セキュリティ認証情報を書き留めます。手順については、IAM ユーザーガイドの「AWS アカウントでの IAM ユーザーの作成」を参照してください。 -
フルアクセスを付与するユーザーポリシーをアタッチして、管理者に AccountAadmin を付与します。手順については、IAM ユーザーガイドの IAM ポリシーの管理を参照してください。
-
-
IAM コンソールの [ダッシュボード] の IAM ユーザーサインイン URL をメモします このアカウントのすべてのユーザーは、AWS Management Console にサインインするときにこの URL を使用する必要があります。
詳細については、IAM ユーザーガイドのユーザーがお客様のアカウントにサインインする方法 を参照してください。
-
前述のステップを、アカウント B の認証情報を使用してもう一度実行し、管理者ユーザー
AccountBadmin
を作成します。
-
-
AWS Command Line Interface (AWS CLI) または AWS Tools for Windows PowerShell をセットアップします。管理者ユーザーの認証情報は以下のように保存します。
-
AWS CLI を使用する場合は、設定ファイルに
AccountAadmin
とAccountBadmin
の 2 つのプロファイルを作成します。 -
AWS Tools for Windows PowerShell を使用する場合は、セッションの認証情報を
AccountAadmin
およびAccountBadmin
として保存します。
手順については、チュートリアル用のツールのセットアップ を参照してください。
-
-
プロファイルとも呼ばれる、管理者ユーザーの認証情報を保存します。入力する各コマンドで認証情報を指定する代わりにプロファイル名を使用できます。詳細については、「チュートリアル用のツールのセットアップ」を参照してください。
-
2 つのアカウントの管理者ユーザー (
AccountAadmin
およびAccountBadmin
) のそれぞれの AWS CLI 認証情報ファイルにプロファイルを追加します。[AccountAadmin] aws_access_key_id =
access-key-ID
aws_secret_access_key =secret-access-key
region = us-east-1 [AccountBadmin] aws_access_key_id =access-key-ID
aws_secret_access_key =secret-access-key
region = us-east-1 -
AWS Tools for Windows PowerShell を使用している場合は、次のコマンドを実行します。
set-awscredentials –AccessKey
AcctA-access-key-ID
–SecretKeyAcctA-secret-access-key
–storeas AccountAadmin set-awscredentials –AccessKeyAcctB-access-key-ID
–SecretKeyAcctB-secret-access-key
–storeas AccountBadmin
-
ステップ 1: アカウント A のタスクを実行する
ステップ 1.1: AWS Management Consoleにサインインする
アカウント A で IAM ユーザーのサインイン URL を使用して、まず AccountAadmin ユーザーとして AWS Management Console にサインインします。このユーザーはバケットを作成し、ポリシーをアタッチします。
ステップ 1.2: バケットを作成する
-
Amazon S3 コンソールでバケットを作成します。この演習では、米国東部 (バージニア北部) AWS リージョン に
という名前でバケットを作成することを前提とします。amzn-s3-demo-bucket
手順については、バケットの作成 を参照してください。
-
サンプルオブジェクトをバケットにアップロードします。
方法については、ステップ 2: バケットにオブジェクトをアップロードする を参照してください。
ステップ 1.3: クロスアカウントアクセス許可を付与するバケットポリシーをアカウント B にアタッチする
このバケットポリシーは、s3:GetLifecycleConfiguration
および s3:ListBucket
アクセス許可をアカウント B に付与します。これは、AccountAadmin ユーザーの認証情報を使用してコンソールにサインインしていることを前提としています。
-
次のバケットポリシーを
にアタッチします。このポリシーは、アカウント B にamzn-s3-demo-bucket
s3:GetLifecycleConfiguration
およびs3:ListBucket
アクションのアクセス許可を付与します。手順については、Amazon S3 コンソールを使用したバケットポリシーの追加 を参照してください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountB-ID
:root" }, "Action": [ "s3:GetLifecycleConfiguration", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
" ] } ] } -
アカウント B (とその管理ユーザー) がオペレーションを実行できることを確認します。
-
AWS CLI を使用して検証する
aws s3 ls s3://
amzn-s3-demo-bucket
--profile AccountBadmin aws s3api get-bucket-lifecycle-configuration --bucketamzn-s3-demo-bucket
--profile AccountBadmin -
AWS Tools for Windows PowerShell を使用して検証する
get-s3object -BucketName
amzn-s3-demo-bucket
-StoredCredentials AccountBadmin get-s3bucketlifecycleconfiguration -BucketNameamzn-s3-demo-bucket
-StoredCredentials AccountBadmin
-
ステップ 2: アカウント B のタスクを実行する
次に、アカウント B の管理者はユーザー Dave を作成し、アカウント A から受け取ったアクセス許可を委任します。
ステップ 2.1: AWS Management Consoleにサインインする
アカウント B の IAM ユーザーのサインイン URL を使用し、AccountBadmin ユーザーとして AWS Management Console にサインインします。
ステップ 2.2: アカウント B でユーザー Dave を作成する
IAM コンソールDave
を作成します。
手順については、「IAM ユーザーガイド」の「IAM ユーザーの作成 (コンソール)」を参照してください。
ステップ 2.3: ユーザー Dave に許可を委任する
以下のポリシーを使用して、ユーザー Dave のインラインポリシーを作成します。バケット名を指定してポリシーを更新する必要があります。
これは、AccountBadmin ユーザーの認証情報を使用してコンソールにサインインしていることを前提としています。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
" ] } ] }
手順については、「IAM ユーザーガイド」の「IAM ポリシーを管理する」を参照してください。
ステップ 2.4: アクセス許可をテストする
これで、アカウント B の Dave はアカウント A が所有する
の内容をリストできます。次のいずれかの手順でアクセス許可を確認できます。amzn-s3-demo-bucket
AWS CLI を使用してアクセス許可をテストする
-
AWS CLI 設定ファイルに
UserDave
プロファイルを追加します。設定ファイルの詳細については、チュートリアル用のツールのセットアップ を参照してください。[profile UserDave] aws_access_key_id =
access-key
aws_secret_access_key =secret-access-key
region =us-east-1
-
コマンドプロンプトで、次の AWS CLI コマンドを入力して、Dave がアカウント A によって所有される
からオブジェクトリストを取得できることを検証します。このコマンドでは、amzn-s3-demo-bucket
UserDave
プロファイルを指定していることに注意してください。aws s3 ls s3://
--profile UserDaveamzn-s3-demo-bucket
Dave には他のアクセス許可はありません。したがって、他のオペレーション (次の
get-bucket-lifecycle
設定など) を実行しようとすると、Amazon S3 はアクセス許可の拒否を返します。aws s3api get-bucket-lifecycle-configuration --bucket
amzn-s3-demo-bucket
--profile UserDave
AWS Tools for Windows PowerShell を使用してアクセス許可をテストする
-
Dave の認証情報を
AccountBDave
という名前で保存します。set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountBDave
-
List Bucket コマンドを試してみます。
get-s3object -BucketName
amzn-s3-demo-bucket
-StoredCredentials AccountBDaveDave には他のアクセス許可はありません。したがって、他のオペレーション (次の
get-s3bucketlifecycleconfiguration
など) を実行しようとすると、Amazon S3 はアクセス許可の拒否を返します。get-s3bucketlifecycleconfiguration -BucketName
amzn-s3-demo-bucket
-StoredCredentials AccountBDave
ステップ 3: (オプション) 明示的な拒否を試す
アクセスコントロールリスト (ACL)、バケットポリシー、またはユーザーポリシーを使用して、アクセス許可を付与できます。ただし、バケットポリシーまたはユーザーポリシーによって明示的な拒否が設定されている場合、他のアクセス許可よりも明示的な拒否が優先されます。テストのために、バケットポリシーを更新し、アカウント B の s3:ListBucket
アクセス許可を明示的に拒否してみます。このポリシーでは、s3:ListBucket
アクセス許可も付与されます。ただし、明示的な拒否が優先され、アカウント B またはアカウント B のユーザーは
内のオブジェクトを一覧表示を行うことはできません。amzn-s3-demo-bucket
-
アカウント A のユーザー
AccountAadmin
の認証情報を使用して、バケットポリシーを次のように置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountB-ID
:root" }, "Action": [ "s3:GetLifecycleConfiguration", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
" ] }, { "Sid": "Deny permission", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::AccountB-ID
:root" }, "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
" ] } ] } -
ここで
AccountBadmin
の認証情報を使用してバケットリストを取得しようとすると、アクセスは拒否されます。-
AWS CLI を使用して、次のコマンドを実行します。
aws s3 ls s3://
amzn-s3-demo-bucket
--profile AccountBadmin -
AWS Tools for Windows PowerShell を使用して、次のコマンドを実行します。
get-s3object -BucketName
amzn-s3-demo-bucket
-StoredCredentials AccountBDave
-
ステップ 4: クリーンアップする
-
テストが終了したら、次の手順でクリーンアップを行います。
-
アカウント A の認証情報を使用して AWS Management Console (AWS Management Console
) にサインインし、次の操作を行います。 -
Amazon S3 コンソールで、
にアタッチされているバケットポリシーを削除します。バケットの [プロパティ] で、[アクセス許可] セクションのポリシーを削除します。amzn-s3-demo-bucket
-
バケットをこの演習のために作成した場合は、Amazon S3 コンソールでオブジェクトを削除してから、バケットを削除します。
-
IAM コンソール
で、 AccountAadmin
ユーザーを削除します。
-
-
-
アカウント B の認証情報を使用して IAM コンソール
にサインインします。 AccountBadmin
ユーザーを削除します。手順については、「IAM ユーザーガイド」の「IAM ユーザーの削除」を参照してください。