Роль CloudFormation с использованием ссылки QueuePolicy в качестве ресурса ManagedPolicy в роли IAM? - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь создать роль IAM через CloudFormation и получаю эту ошибку при попытке присоединить ресурс QueuePolicy к ресурсу IAM::Role.

ARN stack-personSQSPolicy-3F02ILJ96DB1 is not valid. (Service: AmazonIdentityManagement; Status Code: 400; Error Code: InvalidInput; Request ID: 4410ba76-30ce-4d15-be3c-6d5040f971f0)

Вот мое определение роли и политики CloudFormation:

APIGatewaySQSRole:
  Type: 'AWS::IAM::Role'
  Properties:
    AssumeRolePolicyDocument:
      Statement:
        - Action: 'sts:AssumeRole'
          Effect: Allow
          Principal:
            Service: apigateway.amazonaws.com
          Version: 2012-10-17
    ManagedPolicyArns:
      - !Ref personSQSPolicy
      - 'arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs'
personSQSPolicy:
  Type: 'AWS::SQS::QueuePolicy'
  Properties:
    PolicyDocument:
      Version: 2012-10-17
      Statement:
        Effect: Allow
        Action: 'sqs:SendMessage'
        Resource: !GetAtt personSQS.Arn
    Queues:
      - !Ref personSQS

Какой смысл Type: 'AWS::SQS::QueuePolicy' Если он не позволяет использовать в качестве Арн в Роль ресурса? Похоже, мне все еще нужно вручную создать эту политику в блоке ресурсов роли IAM.

Policies:
  - PolicyDocument:
    Statement:
      - Action: sqs:SendMessage
        Effect: Allow
        Resource: !GetAtt 'personSQS.Arn'
      PolicyName: apig-sqs-send-msg-policy

Есть ли способ избежать этого?

1 Ответ

1 голос
/ 16 марта 2020

Поскольку очереди SQS могут быть общедоступными, им нужен механизм безопасности, если люди будут получать к нему доступ без роли.

Вот почему у вас есть QueuePolicy AWS::SQS::QueuePolicy, который можно определить для очереди, и это может быть применено к одной или нескольким очередям. Это поможет вам определить, кому разрешен доступ к нему, например, c непосредственно с точки зрения очереди.

Затем вы присоединяете свой QueuePolicy к своим очередям с атрибутом Cloudformation Queues (см .: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html#cfn -sqs-queuepolicy-queues )

Если вы хотите определить роль для доступа к своей очереди, да, вам придется описать вид той же политики, но на этот раз с точки зрения доступа к нему ресурса, но я все же рекомендую вам защитить доступ к своей очереди с помощью политики очередей.

Что касается вашего последнего вопроса, определите QueuePolicy и присоедините его к своей очереди. это правильный способ сделать это.

Обратите внимание, атрибут Queues ожидает список URL-адресов очереди, а не ARN.

...