Создание политики корзины S3 в бессерверном режиме - произошла ошибка: BucketPolicy - недопустимый синтаксис политики - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь добавить политику сегмента S3 в свой файл serverless.yml, который предоставит пользователю IAM, который я создал, разрешения на ведро.

Я начал с простого добавления политики в корзину в другом stage (dev) прямо в консоли, и теперь я пытаюсь воспроизвести политику без сервера на другом этапе (тест).

Однако, хотя я следую aws документации Кажется, я не совсем понимаю. Вот политика в моем файле serverless.yml. Чтобы уменьшить вероятность ошибки, я копирую свой Принципал и Ресурс напрямую.

    S3CredentialsBucket:
      Type: 'AWS::S3::Bucket'
    BucketPolicy:
      Type: "AWS::S3::BucketPolicy"
      Properties:
        Bucket: !Ref S3CredentialsBucket
        PolicyDocument:
          Id: ProdAnsiblePolicy
          Version: "2012-10-17"
          Statement:
            -
              Effect: Allow
              Principal: 'arn:aws:iam::***********:user/prodAnsible'
              Action: 's3:*'
              Resource: 'arn:aws:s3:::test-mr-2-current-tenant-configurations'

Вот посмотрите на политику, которую я добавил в корзину прямо в консоли, которая работает - это означает, что пользователь может помещать объекты в ведро.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::***********:user/prodAnsible"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::dev-2-current-tenant-configurations"
        },
        {
            "Sid": "statement2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::***********:user/prodAnsible"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::dev-2-current-tenant-configurations/*"
        }
    ]
}

В настоящее время я получаю следующую ошибку при попытке развертывания: "An error occurred: BucketPolicy - Invalid policy syntax.". Любая помощь будет принята с благодарностью!

Наконец, посмотрите на бессерверный файл cloudformation-template-update-stack. json.

    "S3TenantConfigBucket": {
      "Type": "AWS::S3::Bucket"
    },
    "BucketPolicy": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "S3TenantConfigBucket"
        },
        "PolicyDocument": {
          "Id": "ProdAnsiblePolicy",
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "AWS": "arn:aws:iam::249161078948:user/prodAnsible"
              },
              "Action": "s3:*",
              "Resource": "arn:aws:s3:::test-mr-2-current-tenant-configurations/*"
            }
          ]
        }
      }
    }
  }

Также стоит отметить, как ведро создано:

    events:
      - s3:
          bucket: ${self:custom.s3_bucket}
          event: s3:ObjectCreated:*

Это управляемый событиями подход согласно бессерверной документации Заранее спасибо!

1 Ответ

1 голос
/ 10 июля 2020

Если указанным вами принципом является пользователь IAM, вам необходимо добавить его как значение ключа AWS. Ссылка: AWS JSON Элементы политики: Основной

    S3CredentialsBucket:
      Type: 'AWS::S3::Bucket'
    BucketPolicy:
      Type: "AWS::S3::BucketPolicy"
      Properties:
        Bucket: !Ref S3CredentialsBucket
        PolicyDocument:
          Id: ProdAnsiblePolicy
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Principal:
                AWS: 'arn:aws:iam::***********:user/prodAnsible'
              Action: 's3:*'
              Resource: 'arn:aws:s3:::test-mr-2-current-tenant-configurations'
...