LoginSignup
14
16

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-16

はじめに

複数の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)からのアクセスのみ許可します。

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」として記載しています。

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)を信頼する設定になっている事を確認します。

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を指定します。

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」と入力します。

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

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

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を利用出来る設定になっている事を確認する。

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を作成します。

/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を作成します。

/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

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

/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 ~]$ 
/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 ~]$
/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)からファイルをダウンロード出来るかテストします。

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)からはファイルをダウンロード出来ない事をテストします。

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バケットへファイルをアップロード出来たら設定完了です。

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

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

14
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
16