

# 例 1: バケット所有者がユーザーにバケットのアクセス許可を付与する
<a name="example-walkthroughs-managing-access-example1"></a>

**重要**  
IAM ロールへのアクセス許可の付与は、個別のユーザーへのアクセス許可の付与より優れた方法です。IAM ロールへのアクセス許可の付与方法の詳細については、「[クロスアカウントのアクセス許可の理解と IAM ロールの使用](example-walkthroughs-managing-access-example4.md#access-policies-walkthrough-example4-overview)」を参照してください。

**Topics**
+ [チュートリアルの準備をする](#grant-permissions-to-user-in-your-account-step0)
+ [ステップ 1: アカウント A でリソースを作成して、アクセス許可を付与する](#grant-permissions-to-user-in-your-account-step1)
+ [ステップ 2: アクセス許可をテストする](#grant-permissions-to-user-in-your-account-test)

このチュートリアルでは、AWS アカウント がバケットを所有し、アカウントに IAM ユーザーが含まれています。デフォルトでは、ユーザーにはアクセス許可はありません。何らかのタスクを実行するユーザーには、親アカウントがそのためのアクセス許可をユーザーに付与する必要があります。バケット所有者と親アカウントは同じです。したがって、バケットへの許可をユーザーに付与するには、AWS アカウントは、バケットポリシー、ユーザーポリシー、またはその両方を使用することができます。アカウント所有者は、一部のアクセス許可はバケットポリシーを使用し、他のアクセス許可はユーザーポリシーを使用して付与します。

手順の概要を以下に示します。

![\[AWS アカウントによるアクセス許可の付与を説明している図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/access-policy-ex1.png)


1. アカウント管理者は、ユーザーに一連のアクセス許可を付与するバケットポリシーを作成します。

1. アカウント管理者は、ユーザーポリシーをユーザーにアタッチして、追加のアクセス許可を付与します。

1. これによりユーザーは、バケットポリシーとユーザーポリシーの両方を通じて付与されているアクセス許可を使用できます。

この例では、AWS アカウントが必要です。アカウントのルートユーザー認証情報を使用する代わりに、管理者ユーザーを作成します (「[管理者ユーザーを使用したリソースの作成とアクセス許可の付与について](example-walkthroughs-managing-access.md#about-using-root-credentials)」を参照してください)。ここ例の AWS アカウント および管理者ユーザーは、次のとおりです。


| アカウント ID | アカウントの呼び方 | アカウントの管理者ユーザー | 
| --- | --- | --- | 
|  *1111-1111-1111*  |  アカウント A  |  AccountAadmin  | 

**注記**  
この例では、管理者ユーザーは **AccountAadmin** で、アカウント A を参照しており、**AccountAdmin** ではありません。

ユーザーを作成し、アクセス許可を付与するためのすべてのタスクは、AWS マネジメントコンソール で実行します。このチュートリアルでは、許可を検証するために、コマンドラインツールの AWS Command Line Interface (AWS CLI) と AWS Tools for Windows PowerShell を使用するので、コードを記述する必要はありません。

## チュートリアルの準備をする
<a name="grant-permissions-to-user-in-your-account-step0"></a>

1. AWS アカウントが存在し、管理者権限を持つユーザーが存在することを確認します。

   1. 必要な場合、AWS アカウントにサインアップします。このアカウントをアカウント A と呼びます。

      1.  [https://aws.amazon.com/s3](https://aws.amazon.com/s3) に移動して、**[AWS アカウントの作成]** を選択します。

      1. 画面上の指示に従ってください。

         AWSアカウントがアクティブになり、使用可能な状態になったら、 から E メールで通知が届きます。

   1. アカウント A に管理者ユーザー **AccountAadmin** を作成します。アカウント A の認証情報を使用して、[IAM コンソール](https://console.aws.amazon.com/iam/home?#home)にサインインし、次の操作を行います。

      1. ユーザー **AccountAadmin** を作成して、ユーザーのセキュリティ認証情報を書き留めます。

         手順については、「IAM ユーザーガイド」の「[AWS アカウント での IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)」を参照してください。**

      1. フルアクセスを付与するユーザーポリシーをアタッチして、管理者に **AccountAadmin** を付与します。

         手順については、「IAM ユーザーガイド」の「[IAM ポリシーを管理する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)」を参照してください。**

      1. **AccountAadmin** の **IAM ユーザーサインイン URL** を書き留めます。この URL は AWS マネジメントコンソール にサインインする際に使用する必要があります。サインイン URL を見つける方法については、「IAM ユーザーガイド」の「[Sign in to the AWS マネジメントコンソール as an IAM user](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_how-users-sign-in.html)」を参照してください。**URL はアカウントごとにメモしてください。

1. AWS CLI または AWS Tools for Windows PowerShell をセットアップします。管理者ユーザーの認証情報は以下のように保存します。
   + AWS CLI を使用する場合は、設定ファイルに `AccountAadmin` プロファイルを作成します。
   + AWS Tools for Windows PowerShell を使用する場合は、セッションの認証情報を `AccountAadmin` として保存します。

   手順については、「[チュートリアル用のツールのセットアップ](policy-eval-walkthrough-download-awscli.md)」を参照してください。

## ステップ 1: アカウント A でリソースを作成して、アクセス許可を付与する
<a name="grant-permissions-to-user-in-your-account-step1"></a>

アカウント A のユーザー `AccountAadmin` の認証情報と、IAM ユーザー専用のサインイン URL を使用して、AWS マネジメントコンソールにサインインし、次の操作を行います。

1. バケットリソースと IAM ユーザーリソースの作成

   1. Amazon S3 コンソールでバケットを作成します。バケットを作成した AWS リージョン を書き留めます。手順については、「[汎用バケットの作成](create-bucket-overview.md)」を参照してください。

   1. [IAM コンソール](https://console.aws.amazon.com/iam/)で次の操作を行います。

      1. Dave という名前のユーザーを作成します。

         詳細な手順については、「IAM ユーザーガイド」の「[IAM ユーザーの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)」を参照してください。**

      1. `UserDave` 認証情報を書き留めます。

      1. ユーザー Dave の Amazon リソースネーム (ARN) を書き留めます。[IAM コンソール](https://console.aws.amazon.com/iam/)でユーザーを選択すると、**[概要]** タブにユーザー ARN が表示されます。

1. アクセス許可を付与します。

   バケット所有者とユーザーが属する親アカウントが同じであるため、AWS アカウントは、バケットポリシー、ユーザーポリシー、またはその両方を使用してユーザーに許可を付与できます。この例では、両方を使用します。オブジェクトの所有者も同じアカウントである場合は、バケット所有者はバケットポリシー (または IAM ポリシー) でオブジェクトのアクセス権を付与することもできます。

   1. Amazon S3 コンソールで、次のバケットポリシーを *awsexamplebucket1* にアタッチします。

      このポリシーには 2 つのステートメントがあります。
      + 最初のステートメントは、バケットオペレーションのアクセス許可 `s3:GetBucketLocation` と `s3:ListBucket` を Dave に付与します。
      + 2 番目のステートメントは、アクセス許可 `s3:GetObject` を付与します。アカウント A はオブジェクトの所有者でもあるので、アカウント管理者はアクセス許可 `s3:GetObject` を付与できます。

      `Principal` ステートメントでは、Dave はユーザー ARN によって識別されます。ポリシーエレメントの詳細については、[Amazon S3 のポリシーとアクセス許可](access-policy-language-overview.md) を参照してください。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "statement1",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:user/Dave"
                  },
                  "Action": [
                      "s3:GetBucketLocation",
                      "s3:ListBucket"
                  ],
                  "Resource": [
                      "arn:aws:s3:::awsexamplebucket1"
                  ]
              },
              {
                  "Sid": "statement2",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:user/Dave"
                  },
                  "Action": [
                      "s3:GetObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::awsexamplebucket1/*"
                  ]
              }
          ]
      }
      ```

------

   1. 以下のポリシーを使用して、ユーザー Dave のインラインポリシーを作成します。このポリシーは、`s3:PutObject` アクセス許可を Dave に付与します。バケット名を指定してポリシーを更新する必要があります。

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

****  

      ```
      {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
            {
               "Sid": "PermissionForObjectOperations",
               "Effect": "Allow",
               "Action": [
                  "s3:PutObject"
               ],
               "Resource": [
                  "arn:aws:s3:::awsexamplebucket1/*"
               ]
            }
         ]
      }
      ```

------

      手順については、「IAM ユーザーガイド」の「[IAM ポリシーを管理する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html)」を参照してください。**コンソールにサインインするには、アカウント A の認証情報を使用する必要があります。

## ステップ 2: アクセス許可をテストする
<a name="grant-permissions-to-user-in-your-account-test"></a>

Dave の認証情報を使用して、アクセス許可が機能することを確認します。次の 2 つの手順のいずれかを使用できます。

**AWS CLI を使用してアクセス許可をテストする**

1. 次の `UserDaveAccountA` プロファイルを追加して、AWS CLI 設定ファイルを更新します。詳細については、「[チュートリアル用のツールのセットアップ](policy-eval-walkthrough-download-awscli.md)」を参照してください。

   ```
   [profile UserDaveAccountA]
   aws_access_key_id = access-key
   aws_secret_access_key = secret-access-key
   region = us-east-1
   ```

1. Dave がユーザーポリシーで許可されたオペレーションを実行できることを確認します。次の AWS CLI `put-object` コマンドを使用して、サンプルのオブジェクトをアップロードします。

   アップロードするソースファイルは、コマンドの `--body` パラメータで指定します。例えば、ファイルが Windows 端末の C: ドライブのルートにある場合、`c:\HappyFace.jpg` と指定します。`--key` パラメータは、オブジェクトのキー名を指定します。

   ```
   aws s3api put-object --bucket awsexamplebucket1 --key HappyFace.jpg --body HappyFace.jpg --profile UserDaveAccountA
   ```

   次の AWS CLI コマンドを実行して、オブジェクトを取得します。

   ```
   aws s3api get-object --bucket awsexamplebucket1 --key HappyFace.jpg OutputFile.jpg --profile UserDaveAccountA
   ```

**AWS Tools for Windows PowerShell を使用してアクセス許可をテストする**

1. Dave の認証情報を `AccountADave` という名前で保存します。次に、この認証情報を使用して、オブジェクトの `PUT` と `GET` を実行します。

   ```
   set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountADave
   ```

1. 保存したユーザー Dave の認証情報を使用して、AWS Tools for Windows PowerShell `Write-S3Object` コマンドでサンプルオブジェクトをアップロードします。

   ```
   Write-S3Object -bucketname awsexamplebucket1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountADave
   ```

   先にアップロードしたオブジェクトをダウンロードします。

   ```
   Read-S3Object -bucketname awsexamplebucket1 -key HappyFace.jpg -file Output.jpg -StoredCredentials AccountADave
   ```