我正在尝试在以下场景中使用 CloudFormation AddOn 模板:
因此,服务 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 Stack 中创建的任务角色,但这只是猜测。
我不想在每项服务中编写新策略来执行此操作,并且如果可能,我不想在我们的整个 VPC 中打开主题策略。
有没有更好的方法来做到这一点? 谢谢!
答案 0 :(得分:0)
这是因为 Copilot 会扫描插件模板以确定您输出的资源类型。插件有几个“神奇”的输出。它们是:
为了检测这些输出,我们扫描模板以查找引用资源的逻辑 ID。这意味着我们目前无法推导出 Fn::ImportValue
调用结果的资源类型,因为它们不引用该插件模板中定义的逻辑 ID!
很抱歉,这给您带来了问题——您似乎需要将托管策略添加到您要授予此访问权限的每个服务的插件堆栈中。不过,这是我们可以做的事情,如果您能给我们减少 Github 问题,以便我们可以优先考虑并收集提案的反馈,我们会很高兴。