2017-11-19

特定のS3バケットにだけアクセスできるIAMユーザーを作る

よく忘れるシリーズ。

AWSの特定のS3バケットにだけアクセスできるIAMユーザーを作る方法です。

想定される用途

自分の場合、最近のフロントエンドはSPAを作ることが多いので、フロントエンドのコードをWebpackでbundleにビルドしてS3へデプロイします。

この辺りはCIサービスを利用して自動化しているのですが、その時にAWSのIAMを作成し、そのアクセスキーを使って特定のS3バケットにデプロイするようにします。

特定のバケットにだけアクセスできるようにしているのは、不慮の事故で他のS3バケットに影響を及ぼさないためです。

IAMユーザーの作り方

IAMユーザーの作り方は至って単純で、AWSのコンソールにログインしてIAMユーザーを作成すればいいです。

ところが、特定のS3にのみアクセスできるようにするためには、カスタムポリシーを作成してIAMユーザーに適用する必要があります。
しかしまぁ、フロントエンドエンジニアの自分としては、AWSのポリシーのJSONを触る機会などあまりないので、その書き方を毎回すっかり忘れるわけです。

というわけで、今回はこの面倒なJSONを忘れないようにするのがこの記事の目的です。

特定のS3バケットにのみアクセスできるようにするには、次のようなJSONをポリシーに設定します。

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<bucket-name>",
"arn:aws:s3:::<bucket-name>/*"
]
}
]
}
  • <bucket-name>の部分には、アクセスを許可したいS3バケット名を指定してください。
  • <bucket-name>/*となっているのは、サブディレクトに対してもアクセスを許可するための設定です。

このポリシーを設定したIAMユーザーのアクセスキーを、CIサービスで使えば特定のS3バケットに対してデプロイできるようになります。

まとめ

AWSの特定のS3バケットにだけアクセスできるIAMユーザーを作る方法でした。

CI周りの設定はプロジェクトを初期構築するときにやるので、次やろうとした時には大抵忘れています。
なので、備忘も兼ねて記事にしてみました。