【问题标题】:Cross Account SNS Lambda Subscription using CDK使用 CDK 的跨账户 SNS Lambda 订阅
【发布时间】:2020-06-26 22:43:26
【问题描述】:

我有 2 个 AWS CDK 应用程序在不同的 AWS 账户中运行,我正在尝试添加 CDK 以在一个 AWS 账户中获取 lambda 以订阅另一个 AWS 账户中的通知。

我尝试在 lambda 帐户中添加订阅,但这不起作用,因为 SNS 帐户没有授予权限。

SNS 帐户中的 CDK:

val myTopic = Topic(this, "my-topic-id", TopicProps.builder()
            .displayName("topicName")
            .topicName("topicName")
            .build())

Lambda 账户中的 CDK:

val myLambda = Function(...)

val crossAccountTopic = Topic.fromTopicArn(this, "topic-id", "arn:aws:sns:<region>:<accountId>:topicName")

crossAccountTopic.addSubscription(LambdaSubscription(myLambda))

有没有人尝试过这样的事情?有没有办法通过两个帐户中的 CDK 更改来授予访问权限?还是需要手动操作?可能有一种方法可以通过 IAM 角色授予访问权限,因此我将对此进行进一步调查。

【问题讨论】:

    标签: amazon-sns aws-cdk


    【解决方案1】:

    是的,您可以通过 CDK 授予两个帐户的访问权限。首先,您必须在提供帐户中授予访问权限,并部署 CDK/cloudformation 堆栈。然后您可以在客户帐户中授予访问权限。

    SNS 帐户中的 CDK:

    val myTopic = Topic(this, "my-topic-id", TopicProps.builder()
            .displayName("topicName")
            .topicName("topicName")
            .build())
    PolicyStatement snsAccessPolicy = PolicyStatement.Builder.create()
                .principals(listOf(AccountPrincipal("123456346")))
                .actions(Arrays.asList("SNS:Subscribe"))
                .resources(Arrays.asList(myTopic.getTopicArn()))
                .build();
    myTopic.addToResourcePolicy(snsAccessPolicy);
    

    Lambda 账户中的 CDK:

    val myLambda = Function(...)
    
    val crossAccountTopic = Topic.fromTopicArn(this, "topic-id", "arn:aws:sns:<region>:<accountId>:topicName")
    
    crossAccountTopic.addSubscription(LambdaSubscription(myLambda))
    

    【讨论】:

      猜你喜欢
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 2020-07-17
      • 1970-01-01
      相关资源
      最近更新 更多