AWS跨账户SNS发布

7
我们有两个账户111111111111和222222222222。
要求-账户111111111111将每天创建一个RDS快照。一旦快照被拍摄,我们希望账户111111111111发布到在账户222222222222中创建的SNS主题。一旦222222222222收到通知,它运行一个Lambda函数。
我已经将以下策略附加到在账户222222222222中创建的主题。
     "Sid":"RestoreRDSEng_topic_publish",
     "Effect":"Allow",
     "Principal":{
        "AWS":"111111111111"
     },
     "Action":"sns:Publish",
     "Resource":"arn:aws:sns:us-east-1:222222222222:RestoreRDSEng",
     "Condition":{
        "StringEquals":{
           "AWS:SourceAccount":"222222222222"
        },

     }
  } 

当账户111111111111尝试发布到222222222222时,我收到以下错误:

*“message”:“AuthorizationError:用户:arn:aws:sts::************assumed-role/tf-rds_eventhandler/tf-rds_eventhandler未被授权执行:SNS:Publish on resource:arn:aws:sns:us-east-1:xxxxxxxxxxxx:RestoreRDSEng \n\t状态代码:403,请求ID:098f4647-c9ad-51fe-9bc3-17b45deef60e”*

问题:

  1. 这种方法有什么问题吗?

  2. 我应该在222222222222账户中创建一个具有对111111111111的信任访问权限的角色吗?

  3. 感谢任何其他建议。


1
此外,Amazon CloudWatch事件总线的一个潜在用例!请参见:在AWS帐户之间发送和接收事件 - John Rotenstein
谢谢回复。 - DaDeem
如果我创建了一个角色,而其他账户扮演了该角色,会发生什么? - DaDeem
John,我们实际上采用了《使用AWS Lambda与Amazon SNS》教程中的方法。你知道我们如何在拥有Lambda函数的账户(账户2)中设置角色,以便来自账户1的SNS主题可以调用它吗? - DaDeem
您可以使用 IAM 创建角色 - 只需将类型选择为 Lambda 服务角色。它在该教程的第2.2步骤中。流程听起来与我在顶部概述的原始评论完全相同。 - John Rotenstein
显示剩余7条评论
3个回答

1
这是非常可行的,只需要两个步骤。
首先,接收消息的SNS主题(账户2222-2222-2222)必须有一个允许来自另一个账户(1111-1111-1111)的"sns:Publish"权限的策略。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:root"
      },
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:us-east-1:222222222222:RestoreRDSEng"
    }
  ]
}

首先,无论您在1111-1111-1111中使用的角色是什么,都必须拥有一个允许将"sns:Publish"发布到您所需主题的策略。这是一个情况,我通常可以使用*资源,但您也可以将其限制为其他帐户中主题的ARN。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sns:Publish",
            "Effect": "Allow",
            "Resource": "*",
            "Sid": ""
        }
    ]
}

0

Principal 需要是帐户 11111... 中您想要执行发布到 SNS 主题的操作的服务或角色。例如:

 "Principal": {
     "Service": "cloudtrail.amazonaws.com"
   }

我尝试了预算,但它没有起作用。得到了相同的错误。 - Alirezak

0

应该是:

    {
      "Sid": "lambda-access",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:root"
      },
      "Action": [
        "SNS:Publish"
      ],
      "Resource": "arn:aws:sns:us-east-1:222222222222:RestoreRDSEng"
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接