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

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

November 18, 2017

3 min read

mitsuruogMitsuru Ogawa

よく忘れるシリーズ。

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