ablog

不器用で落着きのない技術者のメモ

VPCエンドポイントポリシーで aws s3 ls/cp に必要な Resouce 句の設定

VPCエンドポイントポリシーでVPC内からアクセス可能なバケットを制限する場合、ls するには バケットの指定が必要で、Put/Get をするには "/*" の指定が必要。

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": [
                "arn:aws:s3:::20190331-az-test", 
                "arn:aws:s3:::20190331-az-test/*" 
            ]
        }
    ]
}

検証結果

バケットのみ指定
  • VPCエンドポイントポリシー
{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": "arn:aws:s3:::20190331-az-test"
        }
    ]
}
  • ls はできる
$ aws s3 ls s3://20190331-az-test
                           PRE dir1/
2021-08-24 16:26:04   10485760 10mb.dat
2020-04-30 11:08:55       7687 cfn_glue_pandas.yaml
2020-04-30 11:08:55         79 glue_pandas.py
  • cp はできない
$ aws s3 cp 10mb.dat s3://20190331-az-test/
upload failed: ./10mb.dat to s3://20190331-az-test/10mb.dat An error occurred (AccessDenied) when calling the CreateMultipartUpload operation:Access Denied
"/*" のみ指定
  • VPCエンドポイントポリシー
{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": "arn:aws:s3:::20190331-az-test/*"
        }
    ]
}
  • ls はできない
$ aws s3 ls s3://20190331-az-test

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
  • cp はできる
$ aws s3 cp 10mb.dat s3://20190331-az-test/
upload: ./10mb.dat to s3://20190331-az-test/10mb.dat
両方指定
  • VPCエンドポイントポリシー
{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": [
                "arn:aws:s3:::20190331-az-test",
                "arn:aws:s3:::20190331-az-test/*"
            ]
        }
    ]
}
  • ls はできる
$ aws s3 ls s3://20190331-az-test
                           PRE dir1/
2021-08-24 16:37:31   10485760 10mb.dat
2020-04-30 11:08:55       7687 cfn_glue_pandas.yaml
2020-04-30 11:08:55         79 glue_pandas.py
  • cp はできる
$ aws s3 cp 10mb.dat s3://20190331-az-test/
upload: ./10mb.dat to s3://20190331-az-test/10mb.dat
おまけ
{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": "arn:aws:s3:::20190331-az-test/dir1"
        }
    ]
}
  • それ以下を ls できるわけではない
$ aws s3 ls s3://20190331-az-test/dir1

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

ls はバケットに対する操作で、プレフィックスの実体はオブジェクトだからだろう。