例 1: バケット所有者がユーザーにバケットのアクセス許可を付与する
重要
IAM ロールへのアクセス許可の付与は、個別のユーザーへのアクセス許可の付与より優れた方法です。IAM ロールへのアクセス許可の付与方法の詳細については、「クロスアカウントのアクセス許可の理解と IAM ロールの使用」を参照してください。
このチュートリアルでは、AWS アカウント がバケットを所有し、アカウントに IAM ユーザーが含まれています。デフォルトでは、ユーザーにはアクセス許可はありません。何らかのタスクを実行するユーザーには、親アカウントがそのためのアクセス許可をユーザーに付与する必要があります。バケット所有者と親アカウントは同じです。したがって、バケットへの許可をユーザーに付与するには、AWS アカウントは、バケットポリシー、ユーザーポリシー、またはその両方を使用することができます。アカウント所有者は、一部のアクセス許可はバケットポリシーを使用し、他のアクセス許可はユーザーポリシーを使用して付与します。
手順の概要を以下に示します。
-
アカウント管理者は、ユーザーに一連のアクセス許可を付与するバケットポリシーを作成します。
-
アカウント管理者は、ユーザーポリシーをユーザーにアタッチして、追加のアクセス許可を付与します。
-
これによりユーザーは、バケットポリシーとユーザーポリシーの両方を通じて付与されているアクセス許可を使用できます。
この例では、AWS アカウントが必要です。アカウントのルートユーザー認証情報を使用する代わりに、管理者ユーザーを作成します (「管理者ユーザーを使用したリソースの作成とアクセス許可の付与について」を参照してください)。ここ例の AWS アカウント および管理者ユーザーは、次のとおりです。
アカウント ID | アカウントの呼び方 | アカウントの管理者ユーザー |
---|---|---|
|
アカウント A |
AccountAadmin |
注記
この例では、管理者ユーザーは AccountAadmin で、アカウント A を参照しており、AccountAdmin ではありません。
ユーザーを作成し、アクセス許可を付与するためのすべてのタスクは、AWS Management Consoleで実行します。このチュートリアルでは、許可を検証するために、コマンドラインツールの AWS Command Line Interface (AWS CLI) と AWS Tools for Windows PowerShell を使用するので、コードを記述する必要はありません。
チュートリアルの準備をする
-
AWS アカウントが存在し、管理者権限を持つユーザーが存在することを確認します。
-
必要な場合、AWS アカウントにサインアップします。このアカウントをアカウント A と呼びます。
-
https://aws.amazon.com/s3
に移動して、[AWS アカウントの作成] を選択します。 -
画面上の指示に従ってください。
アカウントがアクティブになり、使用可能な状態になったら、AWS から E メールで通知が届きます。
-
-
アカウント A に管理者ユーザー
AccountAadmin
を作成します。アカウント A の認証情報を使用して、IAM コンソールにサインインし、次の操作を行います。 -
ユーザー
AccountAadmin
を作成して、ユーザーのセキュリティ認証情報を書き留めます。手順については、「IAM ユーザーガイド」の「AWS アカウント での IAM ユーザーの作成」を参照してください。
-
フルアクセスを付与するユーザーポリシーをアタッチして、管理者に AccountAadmin を付与します。
手順については、「IAM ユーザーガイド」の「IAM ポリシーを管理する」を参照してください。
-
AccountAadmin の IAM ユーザーサインイン URL を書き留めます。この URL は AWS Management Console にサインインする際に使用する必要があります。サインイン URL を見つける方法については、「IAM ユーザーガイド」の「Sign in to the AWS Management Console as an IAM user」を参照してください。URL はアカウントごとにメモしてください。
-
-
-
AWS CLI または AWS Tools for Windows PowerShell をセットアップします。管理者ユーザーの認証情報は以下のように保存します。
-
AWS CLI を使用する場合は、設定ファイルに
AccountAadmin
プロファイルを作成します。 -
AWS Tools for Windows PowerShell を使用する場合は、セッションの認証情報を
AccountAadmin
として保存します。
手順については、チュートリアル用のツールのセットアップ を参照してください。
-
ステップ 1: アカウント A でリソースを作成して、アクセス許可を付与する
アカウント A のユーザー AccountAadmin
の認証情報と、IAM ユーザー専用のサインイン URL を使用して、AWS Management Consoleにサインインし、次の操作を行います。
-
バケットリソースと IAM ユーザーリソースの作成
-
Amazon S3 コンソールでバケットを作成します。バケットを作成した AWS リージョン を書き留めます。手順については、バケットの作成 を参照してください。
-
IAM コンソール
で次の操作を行います。 -
Dave という名前のユーザーを作成します。
詳細な手順については、「IAM ユーザーガイド」の「IAM ユーザーの作成 (コンソール)」を参照してください。
-
UserDave
認証情報を書き留めます。 -
ユーザー Dave の Amazon リソースネーム (ARN) を書き留めます。IAM コンソール
でユーザーを選択すると、[概要] タブにユーザー ARN が表示されます。
-
-
-
アクセス許可を付与します。
バケット所有者とユーザーが属する親アカウントが同じであるため、AWS アカウントは、バケットポリシー、ユーザーポリシー、またはその両方を使用してユーザーに許可を付与できます。この例では、両方を使用します。オブジェクトの所有者も同じアカウントである場合は、バケット所有者はバケットポリシー (または IAM ポリシー) でオブジェクトのアクセス権を付与することもできます。
-
Amazon S3 コンソールで、次のバケットポリシーを
awsexamplebucket1
にアタッチします。このポリシーには 2 つのステートメントがあります。
-
最初のステートメントは、バケットオペレーションのアクセス許可
s3:GetBucketLocation
とs3:ListBucket
を Dave に付与します。 -
2 番目のステートメントは、アクセス許可
s3:GetObject
を付与します。アカウント A はオブジェクトの所有者でもあるので、アカウント管理者はアクセス許可s3:GetObject
を付与できます。
Principal
ステートメントでは、Dave はユーザー ARN によって識別されます。ポリシーエレメントの詳細については、Amazon S3 のポリシーとアクセス許可 を参照してください。{ "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 を使用してアクセス許可をテストする
-
次の
UserDaveAccountA
プロファイルを追加して、AWS CLI 設定ファイルを更新します。詳細については、「チュートリアル用のツールのセットアップ」を参照してください。[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