ablog

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

S3 アクセスポイント経由でのオブジェクトのリスト(aws s3 ls)が失敗する

事象

  • S3 アクセスポイント経由で aws s3 cp でアップロードは成功するが、aws s3 ls は "Access Denied" になる。
$ aws s3 ls s3://arn:aws:s3:ap-northeast-1:123456789012:accesspoint/s3ap-system1/upload/ --profile system1
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

原因

  • IAM/S3アクセスポイントポリシーのリソース句で S3 アクセスポイントに対して、s3:ListBucket を許可していないため。

解決策

  • S3アクセスポイントに対して s3:ListBucket を許可するポリシーを追加する(以下はIAMポリシーの例)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Allow list objects",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:ap-northeast-1:123456789012:accesspoint/s3ap-system1"
            ]
        }
    ]
}

参考

バケットのリスト取得を許可するアクセスポイントポリシー

以下のアクセスポイントポリシーでは、アカウント Charles の IAM ユーザー 123456789012 に、アカウント my-access-point のアクセスポイント 123456789012 の基になるバケットに含まれるオブジェクトを表示するアクセス許可を付与します。

{
    "Version":"2012-10-17",
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/Charles"
        },
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point"
    }]
}
アクセスポイントを使用するための IAM ポリシーの設定 - Amazon Simple Storage Service