S3 ARN(Amazon Resource Name)を解析する

IAMポリシー、バケットポリシー、CloudFormationテンプレートで使用されるS3リソースのARN形式を解析します。構造とそのコンポーネントを理解します。

ARN Format

詳細な説明

S3 ARN:IAMポリシー形式

Amazon Resource Name(ARN)はAWSリソースを一意に識別します。S3 ARNは主にIAMポリシー、バケットポリシー、CloudFormation/Terraformリソース定義で使用され、データアクセスには使用されません。

ARN構造

arn:aws:s3:::BUCKET/KEY

3つのコロン(:::)に注意 — S3バケット名はグローバルに一意であるため、リージョンとアカウントIDフィールドは空です。

arn:aws:s3:::production-data/backups/database/*

解析されたコンポーネント

コンポーネント
パーティション aws
サービス s3
リージョン (空 — S3バケットはグローバル)
アカウントID (空 — S3バケット名はグローバルに一意)
バケット production-data
キーパターン backups/database/*

ARNのバリエーション

ARN スコープ
arn:aws:s3:::bucket バケット自体(バケットレベルのアクション用)
arn:aws:s3:::bucket/* バケット内のすべてのオブジェクト
arn:aws:s3:::bucket/prefix/* 特定のプレフィックス下のすべてのオブジェクト
arn:aws:s3:::bucket/specific-key.txt 特定の単一オブジェクト

IAMポリシー例

{
  "Effect": "Allow",
  "Action": ["s3:GetObject", "s3:PutObject"],
  "Resource": [
    "arn:aws:s3:::production-data/backups/database/*"
  ]
}

S3アクセスポイントARN

S3アクセスポイントにはアカウントIDとリージョンを含む異なるARN形式があります:

arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point

よくあるミス

  1. バケットレベルARNの欠落 — バケットレベルの操作(s3:ListBucketなど)にはarn:aws:s3:::bucketが必要で、オブジェクトレベルの操作にはarn:aws:s3:::bucket/*が必要であることを忘れがち。
  2. リージョン/アカウントの含有 — S3バケットARNはリージョンとアカウントフィールドを空にする必要があります。
  3. ワイルドカードスコープarn:aws:s3:::*を使用するとすべてのS3バケットへのアクセスが許可され、セキュリティリスクとなります。

ユースケース

CI/CDパイプラインに特定のS3権限を付与するIAMポリシーを構築し、Resource ARNがデプロイメントバケットのプレフィックスのみにアクセスを正しくスコープしていることを確認する。

試してみる — AWS S3 URL Parser

フルツールを開く