【问题标题】:AWS Copilot - Attach Imported Policy to Task RoleAWS Copilot - 将导入的策略附加到任务角色
【发布时间】: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


    【解决方案1】:

    这是因为 Copilot 会扫描插件模板以确定您输出的资源的类型。插件有几个“魔法”输出。它们是:

    • 安全组
    • 托管策略
    • 秘密

    为了检测这些输出,我们扫描模板以查找所引用资源的逻辑 ID。这意味着我们目前没有办法导出 Fn::ImportValue 调用结果的资源类型,因为它们不引用该插件模板中定义的逻辑 ID!

    很抱歉,这给您带来了问题——您似乎需要将托管策略添加到您要授予此访问权限的每个服务的插件堆栈中。不过,这是我们可能会做的事情,如果您能帮我们剪掉一个 Github 问题,我们会很高兴,这样我们就可以优先考虑并收集有关提案的反馈。

    【讨论】:

      猜你喜欢
      • 2017-05-17
      • 1970-01-01
      • 2020-10-31
      • 2018-09-29
      • 1970-01-01
      • 2020-08-25
      • 2017-12-13
      • 2021-04-29
      • 2020-09-27
      相关资源
      最近更新 更多