Amazon S3のバケットを特定のAWSアカウントに共有する
はじめに
オペレーション部ではお客様のお問い合わせに日々対応させていただいております。 調査のためログやdumpファイルなどの情報をいただくことがありますが容量が大きい場合、受け渡しに困ることがあります。
その際にS3を利用して弊社AWSアカウントに共有していただくことでファイルの受け渡しができますのでご紹介致します。
設定方法
任意のバケットを準備する
Create Bucket → Bucket Name を入力し Region を指定 → Create で作成します。
作成したバケットにBucket Policyを設定する
作成したバケット → Properties → Permissions と進み Add bucket policy をクリックします。
下記ポリシーを入力しSaveします。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetObject", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::s3-takahashi.yusuke/*", "Principal": { "AWS": [ "123456789012" ] } }, { "Sid": "ListBucket", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": "arn:aws:s3:::s3-takahashi.yusuke", "Principal": { "AWS": [ "123456789012" ] } } ] }
1つ目のStatementでバケットに対して指定したAWSアカウントからオブジェクトの取得を許可しています。
- Action:s3:GetObject
- Resource:arn:aws:s3:::バケット名/*
- Principal:"AWS": [ "AWSアカウントID" ]
2つ目のStatementでバケットに対して指定したAWSアカウントからオブジェクトの一覧表示を許可しています。
- Action:s3:ListBucket
- Resource:arn:aws:s3:::バケット名/
- Principal:"AWS": [ "AWSアカウントID" ]
これで、特定のAWSアカウントからのオブジェクトへのアクセスが可能となります。
実際に許可されたAWSアカウントからオブジェクトがダウンロードできるか確認してみます。
確認
アクセスが許可されていない場合
リストの表示
$ aws s3 ls s3://s3-takahashi.yusuke/ --profile takahashi-yusuke A client error (AccessDenied) occurred when calling the ListObjects operation: Access Denied
オブジェクトのダウンロード
$ aws s3 cp s3://s3-takahashi.yusuke/test.txt . --profile takahashi-yusuke A client error (403) occurred when calling the HeadObject operation: Forbidden Completed 1 part(s) with ... file(s) remaining
アクセスが許可されていませんのでリスト表示もダウンロードもできません。
バケットポリシーを設定した場合
リストの表示
$ aws s3 ls s3://s3-takahashi.yusuke/ --profile takahashi-yusuke 2015-08-28 11:58:52 4 test.txt
オブジェクトのダウンロード
$ aws s3 cp s3://s3-takahashi.yusuke/test.txt . --profile takahashi-yusuke download: s3://s3-takahashi.yusuke/test.txt to ./test.txt
AWSアカウントの許可したバケットポリシーを設定しているのでリスト表示、ダウンロードができます。
まとめ
S3を利用してファイルの受け渡し方法をご紹介しました。
無料大容量ファイル転送サービスはいろいろありますが、 AWSのサービスを利用して簡単に対応できるので是非利用してください。
参考URL
S3: バケットポリシーで特定のアカウントに対して参照可能にする | aws memo