AWSのS3バケットのキー一覧取得時に権限不足になる、、、

2023/03/09に公開

AWSのS3バケットのキー一覧取得時に権限不足になる

ListBucketに対する権限とGetObjectに対する権限に加えて、arn:aws:s3:::${Bucket}の権限が必要です。
おそらく、arn:aws:s3:::${Bucket}/*とだけ記述している可能性があります。

SAM テンプレートファイルでは、以下のように記述します。

Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: "🐶🐶🐶"
      AccessControl: Private
      VersioningConfiguration:
        Status: Enabled
  MyLambdaRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: "🐙🐙🐙"
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: "🐬🐬🐬"
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Sid: "🐸🐸🐸"
                Effect: Allow
                Action:
                  - s3:GetObject
                  - s3:PutObject
                  - s3:DeleteObject
                  - s3:ListBucket
                Resource: !Sub "arn:aws:s3:::${MyBucket}/*"
              - Sid: "🙀🙀🙀"
                Effect: Allow
                Action:
                  - s3:ListBucket
                Resource: !Sub "arn:aws:s3:::${MyBucket}"

なぜ

バケットそのものに対する権限がないと、キー一覧を取得できないからです。
arn:aws:s3:::${MyBucket}/*では、オブジェクトに対する権限を与えているだけで、バケットそのものに対する権限は与えていないため、キー一覧を取得できません。

Discussion