使用 CDK 的跨账户 SNS Lambda 订阅
Cross Account SNS Lambda Subscription using CDK
我在不同的 AWS 账户中有 2 个 AWS CDK 应用程序 运行,我正在尝试添加 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 角色授予访问权限来执行此操作,因此我将对此进行进一步调查。
是的,您可以通过 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))
我在不同的 AWS 账户中有 2 个 AWS CDK 应用程序 运行,我正在尝试添加 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 角色授予访问权限来执行此操作,因此我将对此进行进一步调查。
是的,您可以通过 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))