Как получить на роль, созданную облачной информации при создании лямбда - PullRequest
0 голосов
/ 22 января 2020

Вот мое лямбда-определение в облачной информации:

CommandTopic:
   Type: AWS::SNS::Topic
   Properties:
      DisplayName: 'ns-poc-commands'
      TopicName: 'ns-poc-commands'

SendMessage:
   Type: AWS::Serverless::Function 
   Properties:
      CodeUri: send_lambda
      Handler: app.lambda_handler
      Runtime: python3.7
      FunctionName: send_message
      MemorySize: 128
      Timeout: 15
      Policies:
        - SNSPublishMessagePolicy:
            TopicName: !Ref CommandTopic

Теперь я хочу, чтобы моя лямбда могла публиковать sh сообщения обратно в CommandTopi c, и для этого мне нужен доступ политика для topi c, которая позволяет это:

 CommandTopicPolicy:
   Type: AWS::SNS::TopicPolicy
   Properties:
      PolicyDocument:
         Version: '2012-10-17'
         Statement:
          - Sid: SnsTopicPolicy
            Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sns:Publish
            Resource: !Ref CommandTopic
            Condition:
              ArnEquals:
                aws:SourceArn: !Ref SendMessage
          - Sid: SnsRolePolicy
            Effect: Allow
            Principal:
              AWS: !Ref SendMessageRole     # -- 1
            Action: sns:Publish
            Resource: !Ref CommandTopic
      Topics:
        - Ref: CommandTopic

Поэтому мне нужно дать topi c директиву, позволяющую пользователю, назначенному моей лямбде, публиковать на нем сообщения.

Рассмотрим строку, на которую ссылается --1. Как это не работает, так как эта ссылка не доступна.

Так что я не знаю, как получить доступ к той роли, которая была создана ... Я бы предпочел не создавать эту роль самостоятельно, поскольку это только усложняет ситуацию и делает ее более трудоемкой ...

1 Ответ

0 голосов
/ 22 января 2020

На основании документации вы должны передать роль ARN в качестве основного значения. Прямо сейчас вы пытаетесь передать имя роли (!Ref SendMessageRole).

Если ваш элемент Principal в политике доверия роли содержит ARN, указывающий на указанную c роль IAM

Для получения дополнительной информации см. Документацию

. Для решения второй проблемы, которая не существует, я бы предложил добавить опцию DependsOn к вашему CommandTopicPolicy resource.

В таком случае это может выглядеть следующим образом

  CommandTopicPolicy:
    Type: AWS::SNS::TopicPolicy
    DependsOn:
      - SendMessage
    Properties:
      Topics:
        - Ref: CommandTopic
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Sid: SnsTopicPolicy
            Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sns:Publish
            Resource: !Ref CommandTopic
            Condition:
              ArnEquals:
                aws:SourceArn: !GetAtt SendMessage.Arn
          - Sid: SnsRolePolicy
            Effect: Allow
            Principal:
              AWS: !GetAtt SendMessageRole.Arn
            Action: sns:Publish
            Resource: !Ref CommandTopic
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...