Amazon S3のバケットを特定のAWSアカウントに共有する

2015.09.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

オペレーション部ではお客様のお問い合わせに日々対応させていただいております。 調査のためログやdumpファイルなどの情報をいただくことがありますが容量が大きい場合、受け渡しに困ることがあります。

その際にS3を利用して弊社AWSアカウントに共有していただくことでファイルの受け渡しができますのでご紹介致します。

設定方法

任意のバケットを準備する

s3-takahashi.yusuke

Create BucketBucket Name を入力し Region を指定 → Create で作成します。

作成したバケットにBucket Policyを設定する

s3-takahashi02

作成したバケット → PropertiesPermissions と進み Add bucket policy をクリックします。

s3-takahashi03

下記ポリシーを入力し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

Amazon Simple Storage Service | 開発者ガイド バケットポリシーの例

Amazon Simple Storage Service | 開発者ガイド ポリシーでのアクセス許可の指定