AWS Copilot - 将导入的策略附加到任务角色
AWS Copilot - Attach Imported Policy to Task Role
我正在尝试在以下情况下使用 CloudFormation AddOn 模板:
- 服务 1
创建一个 SNS 主题和一个具有发布到它的所有必要权限的托管策略。 SNS 主题将收集“Activity”条记录,然后将它们分散给多个订阅者。
- 一个公共代码库抽象出 SNS 的使用 - 任何需要 post activity 消息的应用程序都在不知道 SNS 在幕后使用的情况下这样做。
- 服务 N 需要使用公共代码库发布 activity 消息,并且需要任何必要的权限。
因此服务 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 中开放主题策略。
有更好的方法吗?
谢谢!
这是因为 Copilot 会扫描 Addons 模板以确定您正在输出的资源类型。插件有几个“魔法”输出。他们是:
- 安全组
- 托管策略
- 秘密
为了检测这些输出,我们扫描模板以查找引用资源的逻辑 ID。这意味着我们目前没有办法导出 Fn::ImportValue
调用结果的资源类型,因为它们不引用该插件模板中定义的逻辑 ID!
很抱歉这给您带来了问题——您似乎需要将托管策略添加到您要授予此访问权限的每个服务的插件堆栈中。不过,这是我们可能可以做的事情,如果您能给我们一个 Github 问题,我们会很高兴,这样我们就可以优先考虑并收集对提案的反馈。
我正在尝试在以下情况下使用 CloudFormation AddOn 模板:
- 服务 1 创建一个 SNS 主题和一个具有发布到它的所有必要权限的托管策略。 SNS 主题将收集“Activity”条记录,然后将它们分散给多个订阅者。
- 一个公共代码库抽象出 SNS 的使用 - 任何需要 post activity 消息的应用程序都在不知道 SNS 在幕后使用的情况下这样做。
- 服务 N 需要使用公共代码库发布 activity 消息,并且需要任何必要的权限。
因此服务 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 中开放主题策略。
有更好的方法吗? 谢谢!
这是因为 Copilot 会扫描 Addons 模板以确定您正在输出的资源类型。插件有几个“魔法”输出。他们是:
- 安全组
- 托管策略
- 秘密
为了检测这些输出,我们扫描模板以查找引用资源的逻辑 ID。这意味着我们目前没有办法导出 Fn::ImportValue
调用结果的资源类型,因为它们不引用该插件模板中定义的逻辑 ID!
很抱歉这给您带来了问题——您似乎需要将托管策略添加到您要授予此访问权限的每个服务的插件堆栈中。不过,这是我们可能可以做的事情,如果您能给我们一个 Github 问题,我们会很高兴,这样我们就可以优先考虑并收集对提案的反馈。