Ошибка при AWS интеграции лямбда-кросс-аккаунта с AWS SNS - PullRequest
1 голос
/ 18 апреля 2020

Я хочу отправить уведомление из SNS (Аккаунт A) в Lambda (Аккаунт B). Следовал этому руководству, но все еще получал ошибку ниже: https://docs.aws.amazon.com/lambda/latest/dg/with-sns-example.html

Код ошибки: AccessDeniedException - Сообщение об ошибке: Пользователь: arn: aws: sts :: AccountA: предполагаемая роль / AdministratorAccessRole / A12345 не разрешено выполнять: lambda: AddPermission для ресурса: arn: aws: lambda: us-east-1: AccountB: function: TestLambda

Ниже того, что я сделал: 1. В учетной записи A, Добавленная ниже политика в Политике доступа SNS:

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "_abc_",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::AccountB:root"
      },
      "Action": [
        "SNS:Subscribe",
        "SNS:Receive"
      ],
      "Resource": "arn:aws:sns:us-east-1:AccountA:TriggerLambdaB-SNS"
    }
  ]
}

2. В учетной записи B добавлена ​​политика в отношении ресурсов на основе лямбды:

    {
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "_abc_",
      "Effect": "Allow",
      "Principal": {
        "Service": "sns.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:us-east-1:AccountB:function:TestLambda",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:sns:us-east-1:AccountA:TriggerLambdaB-SNS"
        }
      }
    }
  ]
}

Я могу видеть имя SNS в разделе Lambda триггера моей лямбды на счете B. Но когда я пытаюсь подписаться лямбда под SNS, тогда получаю эту ошибку. Пожалуйста, укажите, что мне здесь не хватает.

Это потому, что у меня разные типы ролей в этих учетных записях, например AdminAccessRole в учетной записи A и FederatedRoleAccess в учетной записи B?

1 Ответ

0 голосов
/ 19 апреля 2020

Вам необходимо запустить aws sns subscribe в Account-B (с функцией Lambda), а не в Account-A (с функцией SNS).

В противном случае ваши настройки кажутся правильно.

Когда я попытался запустить команду subscribe из учетной записи-A, она сказала:

Произошла ошибка (AuthorizationError) при вызове операции подписки: Учетная запись ACCOUNT- A не является владельцем лямбда-функции arn: aws: lambda: ap-southeast-2: ACCOUNT-B: function: foo

Хотя эта ошибка отличается от вашей, ваша команда отображается чтобы он запускался из учетной записи A (с SNS), а не из учетной записи B (с лямбдой).

Примечание: В имеется небольшая ошибка Учебник. Использование AWS Lambda с документацией Amazon Simple Notification Service , в которой политика на основе ресурсов для Lambda (вторая в вашем вопросе) показывает SourceArn, которая относится к Account-B-Lambda, тогда как она должен быть Account-A-SNS. Тем не менее, вы, кажется, получили это правильно в своей политике выше.

...