例 1: バケット所有者がユーザーにバケットのアクセス許可を付与する
重要
アクセス許可は、個々のユーザーではなく、IAM ロールに付与することをお勧めします。これを行う方法については、「背景: クロスアカウントのアクセス許可と IAM ロールの使用」を参照してください。
トピック
この演習では、AWS アカウントがバケットを所有し、アカウントに IAM ユーザーが存在します。デフォルトでは、ユーザーには何も権限が与えられていません。何らかのタスクを実行するユーザーには、親アカウントがそのためのアクセス許可をユーザーに付与する必要があります。バケット所有者と親アカウントは同じです。したがって、バケットへの許可をユーザーに付与するには、AWS アカウントは、バケットポリシー、ユーザーポリシー、またはその両方を使用することができます。アカウント所有者は、一部のアクセス許可はバケットポリシーを使用し、他のアクセス許可はユーザーポリシーを使用して付与します。
手順の概要を以下に示します。

-
アカウント管理者は、ユーザーに一連のアクセス許可を付与するバケットポリシーを作成します。
-
アカウント管理者は、ユーザーポリシーをユーザーにアタッチして、追加のアクセス許可を付与します。
-
これによりユーザーは、バケットポリシーとユーザーポリシーの両方を通じて付与されているアクセス許可を使用できます。
この例では、AWS アカウントが必要です。アカウントのルートユーザー認証情報を使用する代わりに、管理者ユーザーを作成します (「管理者ユーザーを使用したリソースの作成とアクセス許可の付与について」を参照してください)。AWS アカウントと管理者ユーザーは次のように呼ばれます。
アカウント ID | アカウントの呼び方 | アカウントの管理者ユーザー |
---|---|---|
|
アカウント A |
AccountAadmin |
注記
この例では、管理者ユーザーは AccountAadmin で、アカウント A を参照しており、AccountAdmin ではありません。
ユーザーを作成し、アクセス許可を付与するためのすべてのタスクは、AWS Management Console で実行します。このチュートリアルでは、許可を確認するために、コマンドラインツールの AWS Command Line Interface (CLI) と AWS Tools for Windows PowerShell を使用するので、コードを記述する必要はありません。
ステップ 0: チュートリアルの準備をする
-
AWS アカウントが存在し、管理者権限を持つユーザーが存在することを確認します。
-
必要な場合、アカウントにサインアップします。このアカウントをアカウント A と呼びます。
https://aws.amazon.com/s3
に移動し、[Sign Up (サインアップ)] をクリックします。 -
画面上の指示に従ってください。
アカウントがアクティブになり、使用可能な状態になったら、AWS から E メールで通知が届きます。
-
アカウント A に管理者ユーザー AccountAadmin を作成します。アカウント A の認証情報を使用して、IAM コンソール
にサインインし、次の操作を行います。 -
ユーザー AccountAadmin を作成し、ユーザーのセキュリティ認証情報を記録します。
手順については、IAM ユーザーガイドの「AWS アカウントでの IAM ユーザーの作成」を参照してください。
-
AccountAadmin にフルアクセスを許可するユーザーポリシーをアタッチして、管理者権限を付与します。
手順については、IAM ユーザーガイドの IAM ポリシーの管理を参照してください。
-
AccountAadmin の [IAM User Sign−In URL] (IAM ユーザーのサインイン URL) を書き留めます。この URL は AWS Management Console にサインインする際に使用する必要があります。どこで見つけるのかの詳細については、IAM ユーザーガイドのユーザーがお客様のアカウントにサインインする方法 を参照してください。URL はアカウントごとに記録する必要があります。
-
-
-
AWS Command Line Interface (CLI) または AWS Tools for Windows PowerShell をセットアップします。管理者ユーザーの認証情報は以下のように保存します。
-
AWS CLI を使用する場合、設定ファイルに AccountAadmin プロファイルを作成します。
AWS Tools for Windows PowerShell を使用する場合、セッションの認証情報を AccountAadmin として保存します。
手順については、チュートリアル例のツールのセットアップ を参照してください。
-
ステップ 1: アカウント A にリソース (バケットと IAM ユーザー) を作成し、アクセス許可を付与する
アカウント A のユーザー AccountAadmin の認証情報と、IAM ユーザー専用のサインイン URL を使用して、AWS Management Console にサインインし、次の操作を行います。
リソース (バケットと IAM ユーザー) の作成
-
Amazon S3 コンソールでバケットを作成します。作成した AWS リージョンを書き留めます。手順については、バケットの作成 を参照してください。
-
IAM コンソールで次の操作を行います。
Dave というユーザーを作成します。
手順については、IAM ユーザーガイドの「IAM ユーザーの作成 (AWS Management Console)」を参照してください。
-
UserDave の認証情報を記録します。
-
ユーザー Dave の Amazon Resource Name (ARN) を記録します。IAM コンソールでユーザーを選択すると、[Summary (概要)] タブにユーザー ARN が表示されます。
-
アクセス許可を付与します。
バケット所有者とユーザーが属する親アカウントが同じであるため、AWS アカウントは、バケットポリシー、ユーザーポリシー、またはその両方を使用してユーザーに許可を付与できます。この例では、両方を使用します。オブジェクトの所有者も同じアカウントである場合は、バケット所有者はバケットポリシー (または IAM ポリシー) でオブジェクトのアクセス権を付与することもできます。
Amazon S3 コンソールで、次のバケットポリシーを
awsexamplebucket1
にアタッチします。このポリシーには 2 つのステートメントがあります。
-
最初のステートメントは、バケットオペレーションのアクセス許可
s3:GetBucketLocation
とs3:ListBucket
を Dave に付与します。 -
2 番目のステートメントは、アクセス許可
s3:GetObject
を付与します。アカウント A はオブジェクトの所有者でもあるので、アカウント管理者はアクセス許可s3:GetObject
を付与できます。
Principal
ステートメントでは、Dave はユーザー ARN によって識別されます。ポリシーエレメントの詳細については、バケットポリシーとユーザーポリシー を参照してください。{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountA-ID
:user/Dave" }, "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::awsexamplebucket1
" ] }, { "Sid": "statement2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID
:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::awsexamplebucket1
/*" ] } ] }-
-
以下のポリシーを使用して、ユーザー Dave のインラインポリシーを作成します。このポリシーは、
s3:PutObject
アクセス許可を Dave に付与します。バケット名を指定してポリシーを更新する必要があります。{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionForObjectOperations", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::
awsexamplebucket1
/*" ] } ] }手順については、IAM ユーザーガイドの IAM ポリシーの管理を参照してください。コンソールにサインインするには、アカウント A の認証情報を使用する必要があります。
ステップ 2: アクセス許可をテストする
Dave の認証情報を使用して、アクセス許可が機能することを確認します。次の 2 つの手順のいずれかを使用できます。
AWS CLI によるテスト
-
AWS CLI の設定ファイルを更新して、次の UserDaveAccountA プロファイルを追加します。詳細については、チュートリアル例のツールのセットアップ を参照してください。
[profile UserDaveAccountA] aws_access_key_id =
access-key
aws_secret_access_key =secret-access-key
region =us-east-1
-
Dave がユーザーポリシーで許可されたオペレーションを実行できることを確認します。次の AWS CLI
put-object
コマンドを使用して、サンプルのオブジェクトをアップロードします。アップロードするソースファイルは、コマンドの
--body
パラメータで指定します。例えば、ファイルが Windows マシンの C: ドライブのルートにある場合、c:\HappyFace.jpg
と指定します。--key
パラメータは、オブジェクトのキー名を指定します。aws s3api put-object --bucket
awsexamplebucket1
--keyHappyFace.jpg
--bodyHappyFace.jpg
--profile UserDaveAccountA次の AWS CLI コマンドを実行して、オブジェクトを取得します。
aws s3api get-object --bucket awsexamplebucket1 --key
HappyFace.jpg
OutputFile.jpg
--profile UserDaveAccountA
AWS Tools for Windows PowerShell によるテスト
Dave の認証情報を AccountADave という名前で保存します。次に、この認証情報を使用して、オブジェクトの PUT と GET を実行します。
set-awscredentials -AccessKey
AccessKeyID
-SecretKeySecretAccessKey
-storeas AccountADave-
保存したユーザー Dave の認証情報を使用して、AWS Tools for Windows PowerShell
Write-S3Object
コマンドでサンプルオブジェクトをアップロードします。Write-S3Object -bucketname
awsexamplebucket1
-keyHappyFace.jpg
-fileHappyFace.jpg
-StoredCredentials AccountADave先にアップロードしたオブジェクトをダウンロードします。
Read-S3Object -bucketname
awsexamplebucket1
-keyHappyFace.jpg
-fileOutput.jpg
-StoredCredentials AccountADave