リソース名で特定のリソースだけ表示させる場合
S3をtag制御は少し難しそう・・・?
AWS管理であるAmazonS3ReadOnlyAccessを今回は編集していきます。

デフォルトの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/*"
}
]
}
Custom-AmazonS3ReadOnlyAccessという名前でpolicyを作成します。これをroleにアタッチします。

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

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

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

リソース名で特定のリソースだけ表示させない場合
┌─────────────────────────────────────────┐
│ 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/*"
}
]
}

