例 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 のポリシーとアクセス許可 を参照してください。 -
-
以下のポリシーを使用して、ユーザー Dave のインラインポリシーを作成します。このポリシーは、
s3:PutObjectアクセス許可を Dave に付与します。バケット名を指定してポリシーを更新する必要があります。手順については、「IAM ユーザーガイド」の「IAM ポリシーを管理する」を参照してください。コンソールにサインインするには、アカウント A の認証情報を使用する必要があります。
-
ステップ 2: アクセス許可をテストする
Dave の認証情報を使用して、アクセス許可が機能することを確認します。次の 2 つの手順のいずれかを使用できます。
AWS CLI を使用してアクセス許可をテストする
-
次の
UserDaveAccountAプロファイルを追加して、AWS CLI 設定ファイルを更新します。詳細については、「チュートリアル用のツールのセットアップ」を参照してください。[profile UserDaveAccountA] aws_access_key_id =access-keyaws_secret_access_key =secret-access-keyregion =us-east-1 -
Dave がユーザーポリシーで許可されたオペレーションを実行できることを確認します。次の AWS CLI
put-objectコマンドを使用して、サンプルのオブジェクトをアップロードします。アップロードするソースファイルは、コマンドの
--bodyパラメータで指定します。例えば、ファイルが Windows 端末の C: ドライブのルートにある場合、c:\HappyFace.jpgと指定します。--keyパラメータは、オブジェクトのキー名を指定します。aws s3api put-object --bucketawsexamplebucket1--keyHappyFace.jpg--bodyHappyFace.jpg--profile UserDaveAccountA次の AWS CLI コマンドを実行して、オブジェクトを取得します。
aws s3api get-object --bucket awsexamplebucket1 --keyHappyFace.jpgOutputFile.jpg--profile UserDaveAccountA
AWS Tools for Windows PowerShell を使用してアクセス許可をテストする
-
Dave の認証情報を
AccountADaveという名前で保存します。次に、この認証情報を使用して、オブジェクトのPUTとGETを実行します。set-awscredentials -AccessKeyAccessKeyID-SecretKeySecretAccessKey-storeas AccountADave -
保存したユーザー Dave の認証情報を使用して、AWS Tools for Windows PowerShell
Write-S3Objectコマンドでサンプルオブジェクトをアップロードします。Write-S3Object -bucketnameawsexamplebucket1-keyHappyFace.jpg-fileHappyFace.jpg-StoredCredentials AccountADave先にアップロードしたオブジェクトをダウンロードします。
Read-S3Object -bucketnameawsexamplebucket1-keyHappyFace.jpg-fileOutput.jpg-StoredCredentials AccountADave