0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS S3リソースをバケット名で制御するための備忘録

Last updated at Posted at 2025-11-06

リソース名で特定のリソースだけ表示させる場合

S3をtag制御は少し難しそう・・・?

AWS管理であるAmazonS3ReadOnlyAccessを今回は編集していきます。
image.png

デフォルトのJSONは以下となります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*",
                "s3:Describe*",
                "s3-object-lambda:Get*",
                "s3-object-lambda:List*"
            ],
            "Resource": "*"
        }AmazonS3ReadOnlyAccess
    ]
}

リソース名で制限をかける場合、以下のようにします。
Stetementを3つに分離しています。
このようにすることで以下のような挙動にすることができます。

┌─────────────────────────────────────────┐
│ 1. S3コンソールを開く                    │
│    → Statement 1 が実行される            │
│    → すべてのバケット名が表示される       │
└─────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────┐
│ 2. custom-s3-bukect-fnencspafwfoe を    │
│    クリック                              │
│    → Statement 2 が実行される            │
│    → バケット内のファイル一覧が表示       │
└─────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────┐
│ 3. ファイルをクリック/ダウンロード        │
│    → Statement 3 が実行される            │
│    → ファイルの内容が取得できる           │
└─────────────────────────────────────────┘

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowListAllBuckets",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowListBucketIfTagMatches",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::custom-s3-bukect-fnencspafwfoe"
        },
        {
            "Sid": "AllowObjectOperations",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:GetObjectTagging",
                "s3:GetObjectVersionTagging",
                "s3:DescribeJob"
            ],
            "Resource": "arn:aws:s3:::custom-s3-bukect-fnencspafwfoe/*"
        }
    ]
}

上記JSONのpolicyを作成していきます。
image.png

Custom-AmazonS3ReadOnlyAccessという名前でpolicyを作成します。これをroleにアタッチします。
image.png

テスト用のS3 bucketを用意します。
image.png

ユーザでS3にアクセスできる確認します。一覧にはすべてのバケットが表示されていますね。
image.png

リソースがが指定しているものと異なると、エラーが出力されます。
image.png

一方でリソースが指定されているものであれば、中身を表示させることができます。
image.png

リソース名で特定のリソースだけ表示させない場合

┌─────────────────────────────────────────┐
│ 1. S3コンソールを開く                    │
│    → Statement 1 が実行される            │
│    → すべてのバケット名が表示される       │
└─────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────┐
│ 2. 任意のバケットをクリック               │
│    → Statement 2 が実行される (Allow)    │
│    → バケット内のファイル一覧が表示       │
└─────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────┐
│ 2-1. custom-s3-bukect-fnencspafwfoe を  │
│      クリックした場合                    │
│    → Statement 3 が実行される (Deny)     │
│    → 「アクセス拒否」エラーが表示         │
└─────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────┐
│ 3. ファイルをクリック/ダウンロード        │
│    → Statement 4 が実行される (Allow)    │
│    → ファイルの内容が取得できる           │
└─────────────────────────────────────────┘
              ↓
┌─────────────────────────────────────────┐
│ 3-1. custom-s3-bukect-fnencspafwfoe 内の│
│      ファイルをクリックした場合           │
│    → Statement 5 が実行される (Deny)     │
│    → 「アクセス拒否」エラーが表示         │
└─────────────────────────────────────────┘

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowListAllBuckets",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowListAllBucketsContent",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "DenyAccessToSpecificBucket",
            "Effect": "Deny",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::custom-s3-bukect-fnencspafwfoe"
        },
        {
            "Sid": "AllowObjectOperations",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:GetObjectTagging",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": "arn:aws:s3:::*/*"
        },
        {
            "Sid": "DenyAccessToSpecificBucketObjects",
            "Effect": "Deny",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:GetObjectTagging",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": "arn:aws:s3:::custom-s3-bukect-fnencspafwfoe/*"
        }
    ]
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?