はじめに
複数の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)からのアクセスのみ許可します。
{
"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」として記載しています。
{
"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)を信頼する設定になっている事を確認します。
{
"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を指定します。
{
"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」と入力します。
・「ユーザーごとにアクセスキーを生成」にチェックを付けて「作成」をクリックします。
・「ユーザーが正常に作成されました」と表示されるので、「ユーザーのセキュリティ認証情報を表示」をクリックして、アクセスキーとシークレットキーを控えておきます。
アクセスキー 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を利用出来る設定になっている事を確認する。
{
"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を作成します。
[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を作成します。
[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
・作成した設定を確認します。
[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 ~]$
[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 ~]$
[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)からファイルをダウンロード出来るかテストします。
[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)からはファイルをダウンロード出来ない事をテストします。
[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バケットへファイルをアップロード出来たら設定完了です。
長くなりましたが、以上になります。
ご参考になりましたら幸いです。