Неверный ресурс и неправильно сформированные ошибки политики - aws облачная информация YAML - PullRequest
1 голос
/ 06 января 2020

Addig bucketpolicy для s3 Bucket. Но я сталкиваюсь с множеством проблем, определяющих его в YAML. Вот пример -

 S3CURBucketPolicy:
    Type: 'AWS::S3::BucketPolicy'
    Properties:
      PolicyDocument:
        Statement:
          - Action:
              - 's3:ListBucket'
            Resource: !Join [ '', ["arn:aws:s3:::", !Ref S3BucketTest]] 
            Effect: Allow
            Condition:
              StringEquals:
                'AWS:SourceAccount':
                  - 12334456676
            Principal: '*'
      Bucket: !Ref S3BucketTest

S3BucketTest - это имя ресурса корзины s3, которое я определил в том же cft

S3BucketTest:
  Type: AWS::S3::Bucket

Мне удалось создать корзину s3 без каких-либо проблем, но ведро политика даёт ошибки.

  1. Для вышеупомянутого yaml, это говорит, что имя ресурса недопустимо.
  2. Если у меня есть несколько действий, и я упоминаю их в [], он выдает недопустимые действия и ошибочную политику.
  3. Я также хочу упомянуть несколько ресурсов.

По сути, я хочу повторить это в YAML -

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "stmt_cross_acct_rs_Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": ["arn:aws:iam::12345678:role/role_rs_1", "arn:aws:iam::12345678:root"]
            },
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::<demo-bucket>",
                "arn:aws:s3:::<demo-bucket>/*"
            ]
        }
    ]
}

Ответы [ 3 ]

1 голос
/ 15 февраля 2020

Предполагая, что у вас есть 'demobucket' в качестве ресурса корзины или параметра, JSON выше будет выглядеть так в YAML:

    Version: 2012-10-17
    Statement: 
      - Sid: stmt_cross_acct_rs_Access
        Effect: Allow
        Principal:
          AWS: 
            - arn:aws:iam::12345678:role/role_rs_1
            - arn:aws:iam::12345678:root
        Action:
          - s3:GetBucketLocation
          - s3:GetObject
          - s3:ListBucket
          - s3:ListBucketMultipartUploads
          - s3:ListMultipartUploadParts
          - s3:AbortMultipartUpload
          - s3:PutObject
        Resource:
          - !Sub 'arn:aws:s3:::${demobucket}'
          - !Sub 'arn:aws:s3:::${demobucket}/*'

Это то, что вы должны сделать для YAML, который вы имел:

 S3CURBucketPolicy:
    Type: 'AWS::S3::BucketPolicy'
    Properties:
      PolicyDocument:
        Statement:
          - Action:
              - 's3:ListBucket'
            Resource: !GetAtt S3BucketTest.Arn 
            Effect: Allow
            Condition:
              StringEquals:
                'AWS:SourceAccount':
                  - 12334456676
            Principal: '*'
      Bucket: !Ref S3BucketTest
1 голос
/ 15 февраля 2020

Это работает для меня. Я был в состоянии создать стек. Мне нужно было только изменить join на sub.

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  S3BucketTest:
    Type: AWS::S3::Bucket
  S3CURBucketPolicy:
    Type: 'AWS::S3::BucketPolicy'
    Properties:
      PolicyDocument:
        Statement:
          - Action:
              - 's3:ListBucket'
            Resource: 
              - !Sub 'arn:aws:s3:::${S3BucketTest}'
              - !Sub 'arn:aws:s3:::${S3BucketTest}/*'              
            Effect: Allow
            Condition:
              StringEquals:
                'AWS:SourceAccount':
                  - 12334456676
            Principal: '*'
      Bucket: !Ref S3BucketTest

Надеюсь, это поможет.

0 голосов
/ 15 февраля 2020

Для нескольких ресурсов попробуйте это:

Resource:
  - 'arn:aws:s3:::<demo-bucket>'
  - 'arn:aws:s3:::<demo-bucket>'
...