AWS AssumeRoleによるS3クロスアカウント設定手順(他のAWSアカウントのS3バケットへのファイルアップロードを許可する設定 + AWS CLIの自動クレデンシャル取得設定)

はじめに
---

複数のAWSアカウントを運用していて、別のAWSアカウントにあるS3バケットへファイルをアップロードしたい事があるかと思います。

本ページでは、2つのAWSアカウント間で、別のAWSアカウントにあるS3バケットへのファイルアップロードを許可する設定、実際にS3バケットへファイルをアップロードする手順について記載致します。
本ページでは、主に以下の手順や設定について記載致します。

　**[1] AssumeRoleやIAMロール等の設定により、AWSアカウント間でS3バケットへのファイルアップロードを許可する設定。**

　**[2] AWS CLI(aws s3 cpコマンド)でS3バケットへファイルアップロードする時に必要となるクレデンシャルの自動取得設定。aws sts assume-roleコマンドを都度実行せずにAssumeRoleキーを自動的に取得するよう設定(自動クレデンシャル取得設定)。**

　**[3] S3バケットに特定IPアドレスからの接続を許可する設定。**

　**[4] 実際にEC2インスタンスから別のAWSアカウントにあるS3バケットへaws s3 cpコマンドでファイルをアップロードする手順。**

　**[5] S3バケットがあるAWSアカウント側では、アクセスキーやシークレットアクセスキーの発行をせず、S3のクロスアカウントバケットアクセス許可を実現する設定。**

本手順が必要になるケースの一例
---

通常、2つのAWSアカウント間で、他のAWSアカウントにあるS3バケットへファイルをアップロードするだけなら、IAMロールによるS3バケットのクロスアカウントアクセス許可設定を行なう事で、S3バケットへファイルをアップロードする事が可能です。
http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/example-walkthroughs-managing-access-example3.html

しかし、各AWSアカウントのS3バケット運用状況やポリシーによっては、S3バケットに特定のポリシー、例えば「AWS以外の特定IPアドレスのサーバに対して、S3バケットにアップロードされたファイルのダウンロードを許可する」ようなS3バケットポリシーが設定されている事があると思います。

AWSアカウントから別のAWSアカウントのS3バケットへアップロードしたファイルについては、ファイルのオブジェクト所有者が「ファイルをアップロードしたAWSアカウント」になってしまい、ファイルのオブジェクト所有者とS3バケット所有者とAWSアカウントが異なる為、S3バケットポリシーがアップロードしたファイルに適用されないケースがあります。
https://blog.cloudpack.jp/2014/08/04/allow-other-account-to-write-to-amazon-s3/
http://muramasa64.fprog.org/diary/?date=20140731

このようなケースの場合、AssumeRoleを用いる事で、別のAWSアカウントのS3バケットへアップロードしたファイルについても、ファイルのオブジェクト所有者を「ファイルをアップロードしたAWSアカウントではなく、S3バケットがあるAWSアカウント」にする事が出来ます。これにより、アップロードしたファイルのオブジェクト所有者がバケット所有者と同じAWSアカウントになるので、アップロードしたファイルにS3バケットポリシーが適用されるようになります。

---

他にも、各AWSアカウントに管理者が存在し、それぞれのAWSアカウントで運用ルールを定めている場合、例えばS3バケットを所有するAWSアカウントでは「他のAWSアカウント向けに、S3バケットへのファイルアップロードを許可するアクセスキーIDとシークレットアクセスキーは発行しない」という運用を行っているケースもあるかと思います。

そのようなケースの場合でも、本手順により、S3バケットを所有するAWSアカウント側でアクセスキーやシークレットキーを発行せずに、別のAWSアカウントからS3バケットへのファイルアップロードが可能になります。



本手順のAWSアカウント表記について
---

本手順では、AWSアカウント「example-s3-owner-account」にあるS3バケット「example-s3-bucket」に対して、AWSアカウント「example-s3-upload-account」のEC2インスタンス「example-server」からS3バケットへファイルをアップロードするまでの手順を記載致します。

　example-s3-owner-accountアカウントのs3://example-s3-bucketバケット
　　　　　↑
　　s3://example-s3-bucket/バケットへのファイルアップロード
　　　　　↑
　example-s3-upload-accountアカウントのEC2インスタンス「example-server」

AWSアカウント名やAWSアカウントID等については、例示用として以下のように記載させて頂きます。


| AWSアカウントの概要 | AWSアカウント名 | AWSアカウントID    |
|:------------------:|:------------:|:-----------------:|
| S3にアクセスされる側のAWSアカウント (S3バケットがあるAWSアカウント) | example-s3-owner-account | 111111111111 |
| S3へアクセスする側のAWSアカウント (S3バケットへファイルをアップロードするAWSアカウント) | example-s3-upload-account | 999999999999 |

EC2インスタンス作成時に使用したAMI
---

・Amazon Linux AMI 2015.09.2 (HVM), SSD Volume Type - ami-59bdb937

S3へのファイルアップロードで使用するAWS CLIのバージョン
---

```
[root@example-server ~]# aws --version
aws-cli/1.10.8 Python/2.7.10 Linux/4.1.19-24.31.amzn1.x86_64 botocore/1.3.30
```


参考サイト
---

本手順の作成にあたり、以下の手順を参考にさせて頂きました。
ありがとうございました。

AWS公式
http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/example-walkthroughs-managing-access-example2.html
http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/example-walkthroughs-managing-access-example3.html

http://dev.classmethod.jp/cloud/aws/aws-cli-supports-assume-role-credentials-provider-and-mfa/
AWS CLIがAssumeRoleによる自動クレデンシャル取得とMFAに対応しました！

http://qiita.com/web_se/items/879a235a47991cae7b69
Cross-Account Role 自動クレデンシャル取得機能

http://yustam.hatenablog.com/entry/2015/02/07/135105
他のアカウントへS3バケットへのアクセスを許可する

https://blog.cloudpack.jp/2014/08/04/allow-other-account-to-write-to-amazon-s3/
http://muramasa64.fprog.org/diary/?date=20140731
Amazon S3に別アカウントから書き込みを許可する場合の設定



S3にアクセスされる側のAWSアカウント(example-s3-owner-account)での設定
---

S3にアクセスされる側のAWSアカウント(example-s3-owner-account)にログインして、S3バケット作成やバケットポリシー設定、IAMポリシーやIAMロールを作成します。

# (1)「example-s3-owner-account」アカウントにS3バケット「example-s3-bucket」を作成します。

・AWS Management Consoleで「example-s3-owner-account」アカウントにログインします。

・「S3」をクリックします。

・「バケットを作成」をクリックします。

・S3バケット「example-s3-bucket」を作成します。

後でファイルのアップロード先として使用するuploadディレクトリを作成しておきます。

s3://example-s3-bucket/upload/

・S3バケット「example-s3-bucket」を作成したら、以下のようなバケットポリシーを設定します。

S3バケットへファイルをアップロードした後で、curlコマンドでファイルへアクセス出来るかテストする為、「aws:SourceIp」で特定IPアドレス(192.0.2.100/32、192.0.2.101/32)からのアクセスのみ許可します。

```json:example-s3-owner-account-example-s3-bucket-policyバケットポリシー
{
	"Version": "2008-10-17",
	"Id": "example-s3-owner-account-example-s3-bucket-policy",
	"Statement": [
		{
			"Sid": "example-s3-bucket-20160316-001",
			"Effect": "Allow",
			"Principal": {
				"AWS": "*"
			},
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::example-s3-bucket/*",
			"Condition": {
				"IpAddress": {
					"aws:SourceIp": [
						"192.0.2.100/32",
						"192.0.2.101/32"
					]
				}
			}
		}
	]
}
```

# (2)「example-s3-owner-account」アカウントにS3バケットへのアクセスコントロール用のIAMポリシー「example-s3-owner-account-example-s3-bucket-iam-policy」を作成します。

・AWS Management Consoleで「example-s3-owner-account」アカウントにログインします。

・「Identity & access management」(IAM)をクリックします。

・ IAMのダッシュボードで「ポリシーの作成」をクリックします。

・「ポリシーの作成」画面で「独自のポリシーを作成」の「選択」をクリックします。

・「ポリシーの確認」画面で「ポリシー名」に「example-s3-owner-account-example-s3-bucket-iam-policy」と入力します。

・「ポリシーの確認」画面で「ポリシードキュメント」に以下を入力します。

S3バケットへファイルをアップロードするAWSアカウント「example-s3-upload-account」のEC2インスタンスに対してのみファイルアップロードを許可する為、「aws:SourceIp」でAWSアカウント「example-s3-upload-account」のnatサーバからのアクセスのみ許可します。natサーバのIPアドレスは例として「192.0.2.200/32」として記載しています。

```json:example-s3-owner-account-example-s3-bucket-iam-policyポリシードキュメント
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "192.0.2.202/32"
                    ]
                }
            },
            "Resource": "arn:aws:s3:::example-s3-bucket"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "192.0.2.202/32"
                    ]
                }
            },
            "Resource": "arn:aws:s3:::example-s3-bucket/*"
        }
    ]
}
```


・「ポリシーの確認」画面で「ポリシーの検証」をクリックします。

・「このポリシーは有効です」と表示されたら「ポリシーの作成」をクリックします。

・IAMポリシー「example-s3-owner-account-example-s3-bucket-iam-policy が作成されました。」と表示される事を確認する。



# (3)「example-s3-owner-account」アカウントにAssumeRole用IAMロール｢example_s3_user_assumerole_example-s3-upload-account-iam-role｣を作成します。

「example-s3-upload-account」アカウントにS3へのファイルアップロード権限を渡す為、「example-s3-owner-account」アカウントにAssumeRole用IAMロール｢example_s3_user_assumerole_example-s3-upload-account-iam-role｣を作成します。

・AWS Management Consoleで「example-s3-owner-account」アカウントにログインします。

・「Identity & access management」(IAM)をクリックする。

・IAMのダッシュボードで「ロール」をクリックする。

・「新しいロールの作成」をクリックする。

・「ロール名の設定」画面でロール名に「example_s3_user_assumerole_example-s3-upload-account-iam-role」と入力します。「次のステップ」をクリックします。

・「ロールタイプの選択」画面で「クロスアカウントアクセスのロール」をクリックします。

・「ロールタイプの選択」画面で「所有している AWS アカウント間のアクセスを提供します」の「選択」をクリックします。

---
**・「このアカウントにアクセスできる IAM ユーザーの AWS アカウントの ID を入力します。」と表示されます。**

**「アカウントID」に「999999999999」(example-s3-upload-accountのAWSアカウントID)を入力します。**

「MFAが必要」のチェックは付けずに「次のステップ」をクリックします。

---
**・「ポリシーのアタッチ」画面で先ほど作成した「example-s3-owner-account-example-s3-bucket-iam-policy」ポリシーにチェックを付けてアタッチします。**

・「次のステップ」をクリックします。

・「確認」画面で今回作成されるIAMロールの「ロールARN」が表示されるので控えておきます。

arn:aws:iam::111111111111:role/example_s3_user_assumerole_example-s3-upload-account-iam-role

・「ロールの作成」をクリックします。

・IAMのダッシュボードで「ロール」->「example_s3_user_assumerole_example-s3-upload-account-iam-role」ロールをクリックします。

・「example_s3_user_assumerole_example-s3-upload-account-iam-role」ロールの「信頼関係」タブで「ポリシードキュメントの表示」をクリックします。

以下のように「example-s3-upload-account」(AWSアカウントID:999999999999)を信頼する設定になっている事を確認します。

```json:example_s3_user_assumerole_example-s3-upload-account-iam-roleの信頼関係
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::999999999999:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

S3にアクセスする側のAWSアカウント(example-s3-upload-account)での設定
---

S3にアクセスする側のAWSアカウント(example-s3-upload-account)にログインして、IAMユーザ、IAMポリシー、IAMロールを作成します。


# (4)「example-s3-upload-account」アカウントに「example-s3-owner-account」のAssumeRole権限へのアクセスを許可するIAMポリシー「example_s3_user_assumerole_example-s3-owner-account-iam-policy」を作成します。

・AWS Management Consoleで「example-s3-upload-account」アカウントにログインします。

・「Identity & access management」(IAM)をクリックします。

・IAMのダッシュボードで「ポリシーの作成」をクリックします。

・「ポリシーの作成」画面で「独自のポリシーを作成」の「選択」をクリックします。

・「ポリシーの確認」画面で「ポリシー名」に「example_s3_user_assumerole_example-s3-owner-account-iam-policy」と入力します。

・「ポリシーの確認」画面で「ポリシードキュメント」に以下を入力します。

ここではS3バケットがあるAWSアカウント「example-s3-owner-account」(AWSアカウントID:111111111111)と先ほど作成したIAMロールのARNを指定します。

```json:example_s3_user_assumerole_example-s3-owner-account-iam-policyポリシードキュメント
{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": [
           "arn:aws:iam::111111111111:role/example_s3_user_assumerole_example-s3-upload-account-iam-role"
        ]
    }
}
```

・「ポリシーの確認」画面で「ポリシーの検証」をクリックします。

・「このポリシーは有効です」と表示されたら「ポリシーの作成」をクリックします。

・IAMポリシー「example_s3_user_assumerole_example-s3-owner-account-iam-policy が作成されました。」と表示される事を確認する。



# (5)「example-s3-upload-account」アカウントに「example-s3-owner-account」アカウントのAssumeRole権限を引き受けるIAMユーザ「example_s3_user_assumerole_example-s3-owner-account-iam-user」を作成します。

S3へファイルをアップロードするAWSアカウント「example-s3-upload-account」アカウントにIAMユーザを作成します。

・AWS Management Consoleで「example-s3-upload-account」アカウントにログインします。

・「Identity & access management」(IAM)をクリックします。

・ IAMのダッシュボードで「ユーザー」をクリックします。

・「新規ユーザーの作成」をクリックします。

・「ユーザー名の入力」に「example_s3_user_assumerole_example-s3-owner-account-iam-user」と入力します。

・「ユーザーごとにアクセスキーを生成」にチェックを付けて「作成」をクリックします。

・「ユーザーが正常に作成されました」と表示されるので、「ユーザーのセキュリティ認証情報を表示」をクリックして、アクセスキーとシークレットキーを控えておきます。

```bash:example_s3_user_assumerole_example-s3-owner-account-iam-userのアクセスキーとシークレットキー
アクセスキー ID:
AK******************
シークレットアクセスキー:
WP**************************************
```

・「認証情報のダウンロード」をクリックして、上記アクセスキーとシークレットキーを自分のPCに保存しておきます。



# (6)「example-s3-upload-account」アカウントのIAMユーザ「example_s3_user_assumerole_example-s3-owner-account-iam-user」に対して、「example-s3-owner-account」アカウントのAssumeRole権限へのアクセスを許可します。

・AWS Management Consoleで「example-s3-upload-account」アカウントにログインします。
 
・「Identity & access management」(IAM)をクリックします。
 
・IAMのダッシュボードで「ユーザー」をクリックします。
 
・「ユーザー名」->「example_s3_user_assumerole_example-s3-owner-account-iam-user」をクリックします。

・「アクセス許可」タブの「管理ポリシー」→「ポリシーのアタッチ」をクリックします。

---
**・「ポリシーのアタッチ」画面で先ほど作成した「example_s3_user_assumerole_example-s3-owner-account-iam-policy」ポリシーにチェックを付けて「ポリシーのアタッチ」をクリックします。**


# (7)「example-s3-upload-account」アカウントにEC2インスタンス用のIAMロール「example-server-role」を作成します。

「example-s3-upload-account」アカウントに「example-s3-owner-account」アカウントのS3へファイルをアップロードするEC2インスタンス用のIAMロール「example-server-role」を作成します。

・AWS Management Consoleで「example-s3-upload-account」アカウントにログインします。

・「Identity & access management」(IAM)をクリックします。

・ IAMのダッシュボードで「ロール」をクリックします。

・「新しいロールの作成」をクリックします。

・「ロール名の設定」画面でロール名に「example-server-role」と入力します。

・「次のステップ」をクリックします。

・「ロールタイプの選択」画面で「AWSサービスロール」をクリックします。

・「ロールタイプの選択」画面で「Amazon EC2」の「選択」をクリックします。

・「ポリシーのアタッチ」画面で「example_s3_user_assumerole_example-s3-owner-account-iam-policy」ポリシーにチェックを付けて「次のステップ」をクリックします。

・「確認」画面で今回作成されるIAMロールの「ロールARN」が表示されるので控えておきます。
arn:aws:iam::999999999999:role/example-server-role

・「ロールの作成」をクリックします。

・IAMのダッシュボードで「ロール」->「example-server-role」ロールをクリックする。

・「example-server-role」ロールの「アクセス許可」タブで「管理ポリシー」->「example_s3_user_assumerole_example-s3-owner-account-iam-policy」ポリシーの「ポリシーの表示」をクリックします。

・以下のように「example-s3-owner-account」アカウント(AWSアカウントID:111111111111)のAssumeRoleを利用出来る設定になっている事を確認する。

```json:example_s3_user_assumerole_example-s3-owner-account-iam-policyポリシー
{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": [
           "arn:aws:iam::111111111111:role/example_s3_user_assumerole_example-s3-upload-account-iam-role"
        ]
    }
}
```


# (8) 「example-s3-upload-account」アカウントにS3へのファイルアップロードを実行するEC2インスタンス「example-server」を作成します。

・AWS Management Consoleで「example-s3-upload-account」アカウントにログインします。

・「EC2」をクリックします。

・AmazonLinuxのAMIでEC2インスタンス「example-server」を作成します。

・インスタンス作成時には、IAMロールとして先ほど作成した「example-server-role」ロールを指定します。

S3へファイルをアップロードするEC2インスタンスの設定(自動クレデンシャル取得設定でAssumeRoleのキーを自動設定する)
---

# (9)「example-s3-upload-account」アカウントに作成したEC2インスタンスに自動クレデンシャル取得設定を行います(example-s3-owner-accountアカウントのAssumeRole権限を利用する為の設定です)。

・/home/user/.awsを作成します。

```bash:/home/user/.aws
[user@example-server ~]$ hostname
example-server
[user@example-server ~]$ mkdir /home/user/.aws
[user@example-server ~]$ chmod 700 /home/user/.aws
[user@example-server ~]$ 
```

・/home/user/.aws/configを作成します。

```bash:/home/user/.aws/config
[user@example-server ~]$ vi /home/user/.aws/config
[profile example_s3_user]
output = json
region = ap-northeast-1

[profile example_s3_user_assumerole_example-s3-owner-account-iam-user]
output = json
region = ap-northeast-1
```

・/home/user/.aws/credentialsを作成します。

アクセスキーとシークレットキーについては、前述の(5)、S3ヘファイルをアップロードする側の「example-s3-upload-account」アカウントに作成した「example_s3_user_assumerole_example-s3-owner-account-iam-user」ユーザのアクセスキーとシークレットキーを設定します。


```
[user@example-server ~]$ vi /home/user/.aws/credentials 
# example-s3-owner-account IAM Role arn:aws:iam::111111111111:role/example_s3_user_assumerole_example-s3-upload-account-iam-role
[example_s3_user]
role_arn = arn:aws:iam::111111111111:role/example_s3_user_assumerole_example-s3-upload-account-iam-role
source_profile = example_s3_user_assumerole_example-s3-owner-account-iam-user

# example-s3-upload-account IAM User example_s3_user_assumerole_example-s3-owner-account-iam-user
[example_s3_user_assumerole_example-s3-owner-account-iam-user]
aws_access_key_id = AK******************
aws_secret_access_key = WP**************************************
```

・ファイルのパーミッションを設定します。

```
[user@example-server ~]$ chmod 600 /home/user/.aws/config
[user@example-server ~]$ chmod 600 /home/user/.aws/credentials
```

・作成した設定を確認します。

```bash:/home/user/.aws/
[user@example-server ~]$ hostname
example-server
[user@example-server ~]$ ls -lrta /home/user/ | grep .aws
drwx------ 2 user  group 4096 Mar 17 01:24 .aws
[user@example-server ~]$ 
[user@example-server ~]$ ls -lrta /home/user/.aws/
total 16
-rw------- 1 user  group  165 Mar 17 01:20 config
-rw------- 1 user  group  495 Mar 17 01:24 credentials
drwx------ 5 user  group 4096 Mar 17 01:24 ..
drwx------ 2 user  group 4096 Mar 17 01:24 .
[user@example-server ~]$ 
```

```bash:/home/user/.aws/config
[user@example-server ~]$ cat /home/user/.aws/config
[profile example_s3_user]
output = json
region = ap-northeast-1

[profile example_s3_user_assumerole_example-s3-owner-account-iam-user]
output = json
region = ap-northeast-1
[user@example-server ~]$
```

```bash:/home/user/.aws/credentials
[user@example-server ~]$ cat /home/user/.aws/credentials
# example-s3-owner-account IAM Role arn:aws:iam::111111111111:role/example_s3_user_assumerole_example-s3-upload-account-iam-role
[example_s3_user]
role_arn = arn:aws:iam::111111111111:role/example_s3_user_assumerole_example-s3-upload-account-iam-role
source_profile = example_s3_user_assumerole_example-s3-owner-account-iam-user

# example-s3-upload-account IAM User example_s3_user_assumerole_example-s3-owner-account-iam-user
[example_s3_user_assumerole_example-s3-owner-account-iam-user]
aws_access_key_id = AK******************
aws_secret_access_key = WP**************************************
[user@example-server ~]$ 
```


# (10)「example-s3-upload-account」アカウントのEC2インスタンスから「example-s3-owner-account」にあるS3バケット「example-s3-bucket」へファイルをアップロード出来るかテストします。

```
[user@example-server ~]$ hostname
example-server
[user@example-server ~]$ curl http://httpbin.org/ip
{
  "origin": "192.0.2.202"
}
[user@example-server ~]$ 

[user@example-server ~]$ aws --profile=example_s3_user s3 ls s3://example-s3-bucket/
                           PRE upload/
[user@example-server ~]$ 
[user@example-server ~]$ aws --profile=example_s3_user s3 ls s3://example-s3-bucket/upload/
2016-03-17 XX:XX:XX          0 
[user@example-server ~]$ 

[user@example-server ~]$ hostname > /tmp/test.txt
[user@example-server ~]$ 

[user@example-server ~]$ aws --profile=example_s3_user s3 cp /tmp/test.txt s3://example-s3-bucket/upload/
upload: ../../tmp/test.txt to s3://example-s3-bucket/upload/test.txt
[user@example-server ~]$ 

[user@example-server ~]$ aws --profile=example_s3_user s3 ls s3://example-s3-bucket/upload/
2016-03-17 XX:XX:XX          0 
2016-03-17 XX:XX:XX         48 test.txt
[user@example-server ~]$ 

[user@example-server ~]$ aws --profile=example_s3_user s3 ls s3://example-s3-bucket/upload/test.txt
2016-03-17 XX:XX:XX         48 test.txt
[user@example-server ~]$ 

[user@example-server ~]$ aws --profile=example_s3_user s3 rm s3://example-s3-bucket/upload/test.txt
delete: s3://example-s3-bucket/upload/test.txt
[user@example-server ~]$ 

[user@example-server ~]$ aws --profile=example_s3_user s3 ls s3://example-s3-bucket/upload/test.txt
[user@example-server ~]$ 

[user@example-server ~]$ aws --profile=example_s3_user s3 ls s3://example-s3-bucket/upload/
2016-03-17 XX:XX:XX          0 
[user@example-server ~]$ 

[user@example-server ~]$ aws --profile=example_s3_user s3 cp /tmp/test.txt s3://example-s3-bucket/upload/
upload: ../../tmp/test.txt to s3://example-s3-bucket/upload/test.txt
[user@example-server ~]$ 

[user@example-server ~]$ aws --profile=example_s3_user s3 ls s3://example-s3-bucket/upload/test.txt
2016-03-17 XX:XX:XX         48 test.txt
[user@example-server ~]$ 

[user@example-server ~]$ rm /tmp/test.txt
[user@example-server ~]$ ls -lrta /tmp/test.txt
ls: cannot access /tmp/test.txt: No such file or directory
[user@example-server ~]$ 

[user@example-server ~]$ aws --profile=example_s3_user s3 cp s3://example-s3-bucket/upload/test.txt /tmp/
download: s3://example-s3-bucket/upload/test.txt to ../../tmp/test.txt
[user@example-server ~]$ 

[user@example-server ~]$ ls -lrta /tmp/test.txt
-rw-rw-r-- 1 user group 48 Mar 17 XX:XX /tmp/test.txt
[user@example-server ~]$ 

[user@example-server ~]$ cat /tmp/test.txt
example-server
[user@example-server ~]$ 
```

# (11)「example-s3-owner-account」の「example-s3-bucket」のS3バケットポリシーでアクセス許可したIPアドレス(192.0.2.100/32)からファイルをダウンロード出来るかテストします。

```bash:S3バケットポリシーでアクセス許可したIPアドレス(192.0.2.100/32)からファイルをダウンロード出来るかテスト
[user2@example-server-allow-ip ~]$ hostname
example-server-allow-ip
[user2@example-server-allow-ip ~]$ curl httpbin.org/ip
{
  "origin": "192.0.2.100"
}
[user2@example-server-allow-ip ~]$

[user2@example-server-allow-ip ~]$ curl https://s3-ap-northeast-1.amazonaws.com/example-s3-bucket/upload/test.txt
example-server
[user2@example-server-allow-ip ~]$

[user2@example-server-allow-ip ~]$ rm test.txt
[user2@example-server-allow-ip ~] $ls -lrta test.txt
ls: test.txt: No such file or directory
[user2@example-server-allow-ip ~]$

[user2@example-server-allow-ip ~]$ wget -nv https://s3-ap-northeast-1.amazonaws.com/example-s3-bucket/upload/test.txt
2016-03-16 19:00:14 URL:https://s3-ap-northeast-1.amazonaws.com/example-s3-bucket/upload/test.txt [48/48] -> "test.txt" [1]
[user2@example-server-allow-ip ~]$

[user2@example-server-allow-ip ~]$ ls -lrta test.txt
-rw-rw-r-- 1 user group 48 Mar 17 XX:XX /tmp/test.txt
[user2@example-server-allow-ip ~]$

[user2@example-server-allow-ip ~]$ cat test.txt
example-server
[user2@example-server-allow-ip ~]$
```


# (12)「example-s3-owner-account」の「example-s3-bucket」のS3バケットポリシーでアクセス許可していないIPアドレス(192.0.2.199/32)からはファイルをダウンロード出来ない事をテストします。

S3ヘアップロードしたファイルにS3バケットポリシーが適用されているかテストする為、S3バケットポリシーでアクセス許可していないIPアドレス(192.0.2.199/32)からはファイルをダウンロード出来ない事をテストします。
 
```bash:S3バケットポリシーでアクセス許可していないIPアドレス(192.0.2.199/32)からはファイルをダウンロード出来ない事をテスト
[user3@example-server-deny-ip ~]$ hostname
example-server-deny-ip

[user3@example-server-deny-ip ~]$ curl httpbin.org/ip
{
  "origin": "192.0.2.199"
}
[user3@example-server-deny-ip ~]$

[user3@example-server-deny-ip ~]$ curl https://s3-ap-northeast-1.amazonaws.com/example-s3-bucket/upload/test.txt
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>*******************</RequestId><HostId>******************************************************</HostId></Error>[user3@example-server-deny-ip ~]$
[user3@example-server-deny-ip ~]$

[user3@example-server-deny-ip ~]$ wget -nv https://s3-ap-northeast-1.amazonaws.com/example-s3-bucket/upload/test.txt
https://s3-ap-northeast-1.amazonaws.com/example-s3-bucket/upload/test.txt:
2016-03-16 19:01:14 ERROR 403: Forbidden.
[user3@example-server-deny-ip ~]$

[user3@example-server-deny-ip ~]$ ls -lrta test.txt
ls: cannot access test.txt: No such file or directory
[user3@example-server-deny-ip ~]$
```

***

EC2インスタンスでaws s3 cpコマンドを実行し、他のAWSアカウントにあるS3バケットへファイルをアップロード出来たら設定完了です。

長くなりましたが、以上になります。

ご参考になりましたら幸いです。