S3のバケットポリシーの設定項目についてまとめてみた

はじめに

S3のバケットポリシーを設定する際のパラメータについてまとめてみました

バケットポリシーの設定項目

Version

設定ファイルの文法のバージョン
2012-10-17なのでもう10年近く変わってないが、どこかで変わったりするのだろうか

Statement

この中に設定を配列形式で書いていく それぞれのstatementは{}で囲む

Sid

Sid(statement id)はポリシードキュメントに与える任意の識別子のこと
各statementに割り当てることができ、そのポリシードキュメント内でユニークでなければならない

Effect

Allow(ホワイトリスト)かDeny(ブラックリスト)を選択

Principal

リソースへのアクセスを許可、または拒否する相手を指定する
次のいずれかを指定できる

  • AWSアカウント及びルートユーザ
  • IAMユーザ
  • フェデレーティッドユーザー(ウェブ ID または SAML フェデレーションを使用)
  • IAM ロール
  • ロールを引き受けるセッション
  • AWS のサービス
  • 匿名ユーザー

Action

許可または拒否するアクションを指定する

Resource

statementをどのリソースに設定するか指定する

Condition

ポリシーを適用する条件を設定できる バケットポリシーに複数のコンディションやstatementを設定した際の挙動は、下記のクラメソさんの記事がとても参考になりました。 https://dev.classmethod.jp/articles/learn-aws-policy-documents-with-examples/

上記踏まえて特定のIPからと特定のvpceから接続可能にするポリシードキュメントを作ってみた

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "test1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::test",
                "arn:aws:s3:::test/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "XXX.XXX.XXX.XXX/32"
                }
            }
        },
        {
            "Sid": "test2",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::test",
                "arn:aws:s3:::test/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpce": "vpce-XXXXXXXXX"
                }
            }
        }
    ]
}