Кросс-аккаунт SNS Подписаться на Lambda во втором аккаунте - PullRequest
0 голосов
/ 18 февраля 2020

Я использовал приведенную ниже политику для SNS topi c, чтобы подписать этот SNS в Lambda с номером учетной записи 222222222222. Я также дал доступ к своей лямбде с аналогичной политикой, добавив ее к роли выполнения Lambda.

Получение ошибки ниже:

Произошла ошибка при создании триггера: Пользователь: arn: aws: sts :: 222222222222: предполагаемая роль / TSI_Base_FullAccess / AXXXXXXXX не авторизована выполнить: SNS: подписаться на ресурс: arn: aws: sns: eu-west-1: 111111111111: Story-5555 (Сервис: AmazonSNS; код состояния: 403; код ошибки: AuthorizationError; идентификатор запроса: 1321942 c -25c4-52a1-bacb-c2e9bd641067)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1582008007178",
      "Action": [
        "sns:GetSubscriptionAttributes",
        "sns:GetTopicAttributes",
        "sns:ListSubscriptions",
        "sns:ListSubscriptionsByTopic",
        "sns:ListTagsForResource",
        "sns:ListTopics",
        "sns:Publish",
        "sns:Subscribe"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:sns:eu-west-1:111111111111:Story-5555",
      "Condition": {
        "ArnEquals": {
          "aws:PrincipalArn": "arn:aws:lambda:eu-west-1:222222222222:function:New_Cross_SNS"
        }
      }
    }
  ]
}

1 Ответ

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

Согласно AWS Документация вы должны указать принцип дополнительно к условию.

Таким образом, ваша политика должна напоминать

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1582008007178",
      "Action": [
        "sns:GetSubscriptionAttributes",
        "sns:GetTopicAttributes",
        "sns:ListSubscriptions",
        "sns:ListSubscriptionsByTopic",
        "sns:ListTagsForResource",
        "sns:ListTopics",
        "sns:Publish",
        "sns:Subscribe"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:sns:eu-west-1:111111111111:Story-5555",
      "Principal": {
        "AWS": ["222222222222"]
      },
      "Condition": {
        "ArnEquals": {
          "aws:PrincipalArn": [
               "arn:aws:lambda:eu-west-1:222222222222:function:New_Cross_SNS",
               "arn:aws:sts::222222222222:assumed-role:TSI_Base_FullAccess:AXXXXXXXX"
          ]
        }
      }
    }
  ]
}

Способ быть уверенным, какой ARN указать в разделе условия политики означает вызвать (и распечатать) get-caller-identity API из вашей функции.

...