Amazon AWS S3を社外に貸し出す設定

社外の方がさくらサーバのデータをAWSのS3に取得したいとかで、
でもあまり詳しくないのでウチの会社のS3に相乗りさせてもらえないかと問い合わせあり。


前職の詳しい人に聞いてみると
「S3の特定のバケットだけアクセスできるユーザを(IAMで)作って渡せばいいんじゃないでしょうか。
 S3の準備ができ次第、バックアップの取り方はこちらから伝えておきますよ。」
とのこと。

いやあ、ありがたいですねえ。
でも「なるほど、わからん」だったので少しお勉強。


1)S3とは、
Amazon Simple Storage Service」の略。


2)「バケット」とは、
Bucket
要はデータ保存領域。
1バイトから5Tバイトまでのオブジェクト。逆に言うと0バイトファイルは作れないってことか。
格納オブジェクト数に制限なし。

ここまではhttp://aws.amazon.com/jp/s3/


3)アクセスユーザ制限は、
バケット単位、オブジェクト単位で可能。

http://aws.amazon.com/jp/s3/faqs/#How_can_I_control_access_to_my_data_stored_on_Amazon_S3


4)IAMとは、
「Identity and Access Management」
「アイアム」と発音するのがUS流儀らしい。
AWS Management Consoleから管理可能(昔はできなかったらしい)
AWSでユーザーの作成・管理が可能。
AWS外で管理されるユーザーにAWSリソースへのアクセスを許可できる。


座学レベルはざっとこんなところ。


実際の設定等は以下が詳しいので省略します。

IAMと私 〜IAMのAWS Management Consoleサポートバンザイ〜


最終的に作成したIAMのポリシーは以下の通り。

AmazonS3ListAllBuckets_Access

{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::*"
}
]
}


AmazonS3ListBucket_(bucket_name)_Access

{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::(bucket_name)"
}
]
}


AmazonS3FullForBucket_(bucket_name)_Access

{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject*",
"s3:PutObject*",
"s3:DeleteObject*",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::(bucket_name)/*"
}
]
}