やりたいこと
画像ファイルなどの公開ファイルを格納するバケットを作成し、その配下は全公開とする。
また、プログラムなどからそのバケット配下のファイルを管理するためのユーザに権限を付与し、特定のバケット内のオブジェクトのみ書き込み、削除を行えるようにする。
前提
- S3でバケット作成済み
- IAMで管理用ユーザ作成済み
※プログラム上からこのユーザを使用してS3オブジェクトを操作する想定
S3オブジェクトを操作するプログラムは別途用意すること
管理用ユーザの権限設定
IAMの管理画面を開き、対象のユーザを選択し以下の手順でポリシーの設定画面を表示する。
- 「アクセス許可」タブを表示
- 「ユーザポリシーの作成」ボタンをクリック
- 「カスタムポリシー」を選択し、「選択」ボタンをクリック
「ポリシー名」は分かりやすい名前を入力し、「ポリシードキュメント」に以下を設定する。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::対象バケット名"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::対象バケット名/*"
]
}
]
}
Statement
の1つ目の設定はバケットに対する操作、2つ目の設定はバケット内のオブジェクトを操作する権限設定。Resource
は配列指定なので、カンマ区切りで複数のバケットを指定可能。
バケットの公開設定
S3の管理画面を開き、対象バケットのプロパティを表示する。
アクセス許可の「バケットポリシーの編集」をクリックし、以下を設定する。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::対象バケット名/*"
}
]
}
これで、バケット内のオブジェクトに個別にアクセス許可設定をしなくても、ブラウザ等からリンクURLで閲覧可能となる。
以上