Не удалось создать AWS BucketPolicy — Неверный синтаксис политики, неверно сформированная политика

#amazon-web-services #amazon-s3 #amazon-cloudformation #aws-serverless

#amazon-web-services #amazon-s3 #aws-cloudformation #aws-бессерверный

Вопрос:

Я пытаюсь создать следующую политику корзины в yaml, но bucketPolicy не удается создать:

Сообщение об ошибке Cloudformation:

 Invalid policy syntax. (Service: Amazon S3; Status Code: 400; Error Code: MalformedPolicy; Request ID: CD4; S3 Extended Request ID: Noxxxx/sXX=; Proxy: null)
  

Политика корзины, которую необходимо выполнить:

 {
    "Version": "2012-10-17",
    "Id": "ig",
    "Statement": [
        {
            "Sid": "LZone",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123:role/l-zone"
            },
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:ListBucket",
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::bucketname-l/*",
                "arn:aws:s3:::bucketname-l"
            ]
        }
    ]
}
  

Это код (не рабочий) в yaml для вышеуказанной политики:

 LBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub bucketname-l          
LBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref LBucket
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Sid: LZone
            Effect: Allow
            Action: 
              - 's3:AbortMultipartUpload'
              - 's3:ListBucket'
              - 's3:PutObject'
              - 's3:GetObject'
              - 's3:GetObjectVersion'
              - 's3:PutObjectAcl'
            Resource:
              Fn::Join:  
              - ""  
              -  
                - "arn:aws:s3:::"  
                -  
                  Ref: "LBucket"  
                - "/*"  
            Principal: "AWS: arn:aws:iam::123:role/l-zone"
  

Может кто-нибудь помочь с этим, чего мне не хватает. Спасибо

Ответ №1:

Политика должна быть:

   LBucketPolicy:
      Type: AWS::S3::BucketPolicy
      Properties:
        Bucket: !Ref LBucket
        PolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Sid: LZone
              Effect: Allow
              Action: 
                - 's3:AbortMultipartUpload'
                - 's3:ListBucket'
                - 's3:PutObject'
                - 's3:GetObject'
                - 's3:GetObjectVersion'
                - 's3:PutObjectAcl'
              Resource:
                - !Sub "arn:aws:s3:::${LBucket}"
                - !Sub "arn:aws:s3:::${LBucket}/*"
              Principal: 
                AWS: arn:aws:iam::123:role/l-zone
  

Комментарии:

1. Спасибо, Марчин, я тоже пробовал это раньше, но попробую еще раз. Спасибо

2. @Harry Нет проблем. Это правильная форма политики. Если это не работает, то есть некоторые другие проблемы, пока не очевидные из вашего вопроса.

3. потрясающе, это работает. Мне пришлось удалить кавычки вокруг AWS: в разделе Принципал. Будет помечен как правильный. Спасибо