特定のS3バケットにだけアクセスできるIAMユーザーを作る
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をポリシーに設定します。

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