使用CDK进行跨帐户SNS Lambda订阅

时间:2020-06-26 22:43:26

标签: amazon-sns aws-cdk

我有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角色授予访问权限来实现此目的,因此我将对此进行进一步调查。

1 个答案:

答案 0 :(得分:3)

是的,您可以通过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))