簡體   English   中英

執行 AWS Lambda 與 AWS SNS 的跨賬戶集成時出錯

[英]Error while doing AWS Lambda Cross Account integration with AWS SNS

我想從 SNS(賬戶 A)向 Lambda(賬戶 B)發送通知。 遵循本教程但仍然出現以下錯誤: https://docs.aws.amazon.com/lambda/latest/dg/with-sns-example.html

錯誤代碼:AccessDeniedException - 錯誤消息:用戶:arn:aws:sts::AccountA:assumed-role/AdministratorAccessRole/A12345 無權執行:lambda:AddPermission on resource:arn:aws:Z945F3FC449518A73B96F5F3286:CDB:4帳戶B: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 中,在 Lambda 的 Resource-Based Policy 中添加以下策略:

    {
  "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"
        }
      }
    }
  ]
}

我可以在帳戶 B 中我的 Lambda 的觸發 Lambda 部分下看到 SNS 名稱。但是當我嘗試在 SNS 下訂閱 Lambda 時,出現此錯誤。 請指導我在這里缺少什么。

是因為我在這些帳戶中擁有不同類型的角色,例如帳戶 A 中的 AdminAccessRole 和帳戶 B 中的 FederatedRoleAccess?

您需要在Account-B (使用 Lambda 功能)而不是 Account-A(使用 SNS 功能)中運行aws sns subscribe

否則,您的設置似乎是正確的。

當我嘗試從 Account-A 運行subscribe命令時,它說:

An error occurred (AuthorizationError) when calling the Subscribe operation: The account ACCOUNT-A is not the owner of the lambda function arn:aws:lambda:ap-southeast-2:ACCOUNT-B:function:foo

雖然此錯誤與您的不同,但您的命令似乎是從 Account-A(使用 SNS)而不是 Account-B(使用 Lambda)運行的。

旁注: 教程中似乎有一個小錯誤:將 AWS Lambda 與 Amazon Simple Notification Service文檔一起使用,其中 Lambda 的基於資源的策略(您的問題中的第二個)顯示了一個SourceArn ,它指的是 Account- B-Lambda,而它應該是 Account-A-SNS。 但是,您在上面的保單中似乎已經正確理解了這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM