AWS Copilot-将导入的策略附加到任务角色



我正在尝试在以下场景中使用CloudFormation AddOn模板:

  • 服务1创建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的云形成堆栈;但是,任务角色没有附加托管策略。

我做了一个快速测试,看看是否可以将策略直接添加到AddOn堆栈,这确实有效。

Outputs:
activityPublishAccessPolicy:
Description: "The IAM::ManagedPolicy to attach to the task role."
Value: !Ref activityPolicy

这让我相信Copilot只将ManagedPolicies附加到在其自己的AddOn堆栈中创建的Task Role,但这只是猜测。

我不希望在每个服务中都写一个新的策略来做到这一点,如果可能的话,我也不希望在整个VPC中打开主题策略。

有更好的方法吗?谢谢

这是因为Copilot扫描Addons模板以确定要输出的资源的类型。有几个";魔术;插件的输出。它们是:

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

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

很抱歉,这给你带来了问题——你可能需要将托管策略添加到你想授予访问权限的每个服务的插件堆栈中。不过,这是我们可以做点什么的,如果你能为我们解决Github问题,我们可以优先考虑并收集对提案的反馈。

最新更新