【发布时间】:2021-09-19 01:42:52
【问题描述】:
我正在尝试在以下场景中使用 CloudFormation AddOn 模板:
- 服务 1 创建一个 SNS 主题和一个托管策略,该策略具有发布到它的所有必要权限。 SNS 主题将收集“活动”记录,然后将它们分发给多个订阅者。
- 一个通用代码库抽象了 SNS 的使用 - 任何需要发布活动消息的应用程序都会这样做,而无需知道 SNS 正在背后使用。
- 服务 N 需要使用公共代码库发布活动消息,并且需要任何必要的权限。
所以服务 1 将托管策略 ARN 作为导出输出写入 AddOn 堆栈,如下所示:
Outputs:
activityPublishPolicy:
Description: "Activity Publish Policy ARN"
Value: !Ref activitySnsTopicPublishPolicy
Export:
Name: !Sub ${App}-${Env}-activity-publish-policy
然后在服务 N 中,我希望导入发布策略的 ARN 并将其附加到任务角色:
Outputs:
activityPublishAccessPolicy:
Description: "The IAM::ManagedPolicy to attach to the task role."
Value: !ImportValue
'Fn::Sub': '${App}-${Env}-activity-publish-policy'
ARN 被很好地导入并写入服务 N 的 Cloud Formation 堆栈;但是,任务角色没有附加托管策略。
我做了一个快速测试,看看是否可以将策略直接添加到 AddOn 堆栈并且确实有效。
Outputs:
activityPublishAccessPolicy:
Description: "The IAM::ManagedPolicy to attach to the task role."
Value: !Ref activityPolicy
这让我相信 Copilot 仅将 ManagedPolicies 附加到在其自己的 AddOn 堆栈中创建的任务角色,但这只是猜测。
我不希望在每个服务中都编写新策略来执行此操作,并且如果可能的话,我不希望在整个 VPC 中打开主题策略。
有没有更好的方法来做到这一点? 谢谢!
【问题讨论】:
标签: amazon-web-services amazon-cloudformation amazon-iam