Amazon S3を使用する上で、アカウントに紐づく全てのバケットを操作できるユーザーを作ってしまうのは、避けたいところです。例えば、特定のバケットで誰かと共同作業をする際、他のバケットまで操作できてしまう権限を与えてしまうことになります。この記事では、特定のバケットのみ操作ができるIAMユーザーを作る方をご紹介します。
手順
独自ポリシーの作成
AWSでは、ユーザーやグループをいくつも作成することができます。それごとにどんな操作ができる権限を付与するか定義することができます。その定義は、ユーザーやグループに直接設定するわけではなく、ポリシーというもので定義します。そのポリシーをユーザーやグループに結びつけるという形で権限の設定が行われます。
S3に関して言えば、デフォルトで「AmazonS3FullAccess」などS3を操作するためのポリシーがありますが、こちらは全てのS3バケットを操作可能にしてしまいます。なので、独自ボリシーで特定のバケットのみ操作できる独自ポリシーを作成します。
IAMの管理画面での作業になります。赤枠の部分をクリックして画面を進んで行ってください。
上のように入力します。ポリシー名は任意で決めて頂いて大丈夫ですが、ポリシードキュメントは下のように入力してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": "arn:aws:s3:::*" }, { "Action": "*", "Effect": "Allow", "Resource": [ "arn:aws:s3:::${aws:username}", "arn:aws:s3:::${aws:username}/*" ] } ] } |
ポイントは、上の16、17行目の ${aws:username}という部分です。
これは、IAMポリシー変数(IAM Policy Variables)というもので、動的にふさわしい値に置き換えてくれるものです。 ${aws:username}は現在のユーザー名に置き換えられます。通常この位置には、操作対象としたいS3のバケット名を書きます。ですので、このポリシーは、ユーザ名と同じ名前のS3バケットに対して操作が出来る、というものになります。
この位置に対象のバケット名をベタ書きしても良いのですが、このようなバケットとユーザを増やすごとに新たなポリシーが必要になります。なので、変数を使い、汎用的に使えるポリシーとしています。
次に作成したポリシーを適用するIAMユーザを作成します。
スポンサーリンク
IAM ユーザーの作成
赤枠をクリックして進んでください。
以下では、操作対象としたいS3バケット名をそのまま入力します。
下のように「認証情報のダウンロード」をクリックすると、credentials.csvというファイルがダウンロードできます。こちらを無くさないように保存しておいてください。
次に作成さいたIAMユーザにポリシーを付与します。
PolicyをIAMユーザーに付与する
下のように先ほど作成したユーザーをクリックします。
下のように検索フィールドに作成したポリシー名を一部入力すると、そのポリシーが表示されるので選択し、「ポリシーのアタッチ」をクリックします。
以下のように表示されれば完了です。
さいごに
いかがでしたでしょうか。これで特定のS3バケットのみ操作可能なIAMユーザーができました。また、今後同じように特定のバケットのみ操作できるIAMユーザーを作りたい場合は、このPolicyを付与するだけで済みます。
S3の使い道はいろいろとあると思いますが、この記事でご紹介したノウハウががっつり活かせるのが、WordPressで作ったサイトを静的ファイルにしてS3で運用する、というものです。
WordPressのコンテンツ管理力と多様なデザインテーマなどの資産が、S3という負荷に超強くて激安なストレージで運用できちゃいます。その手順を書いてみましたので、ぜひやってみてください。