【问题标题】:IAM nested stack fails to complete due to undefined resource policies由于未定义的资源策略,IAM 嵌套堆栈无法完成
【发布时间】:2018-09-10 18:08:05
【问题描述】:

我创建了一个嵌套的 IAM 堆栈,它由 3 个模板组成: - iam 政策 - iam-角色 -iam 用户/组

masterstack 模板如下所示:

Resources:

Policies:
    Type: AWS::CloudFormation::Stack
    Properties:
        TemplateURL: https://s3.amazonaws.com/xxx/iam/iam_policies.yaml

UserGroups:
    Type: AWS::CloudFormation::Stack
    Properties:
        TemplateURL: https://s3.amazonaws.com/xxx/iam/iam_user_groups.yaml


Roles:
    Type: AWS::CloudFormation::Stack
    Properties:
        TemplateURL: https://s3.amazonaws.com/xxx/iam/iam_roles.yaml

政策 ARN 通过 Outputs 部分导出,例如:

Outputs:
  StackName:
   Description: Name of the Stack
   Value: !Ref AWS::StackName

  CodeBuildServiceRolePolicy:
    Description: ARN of the managed policy
    Value: !Ref CodeBuildServiceRolePolicy

在角色模板中,策略 ARN 的导入方式类似于

CodeBuildRole:
Type: AWS::IAM::Role
Properties:
  RoleName: !Sub ${EnvironmentName}-CodeBuildRole
  AssumeRolePolicyDocument:
    Version: '2012-10-17'
    Statement:
      - Action: 
        - 'sts:AssumeRole'
        Effect: Allow
        Principal:
          Service: 
          - codebuild.amazonaws.com
  Path: / 
  ManagedPolicyArns:
  - !GetAtt 
    - Policies
    - Outputs.CodeBuildServiceRolePolicy

但是当我尝试创建堆栈时,它会说无法创建角色堆栈,因为

Template error: instance of Fn::GetAtt references undefined resource Policies

如何首先强制创建策略,以便第二个和第三个模板可以使用这些策略来创建角色和用户/组?还是其他地方的问题?

感谢

【问题讨论】:

    标签: amazon-cloudformation


    【解决方案1】:

    你的问题,

    如何强制先创建策略,然后再强制创建 第三个模板可以使用策略来创建角色和用户/组吗? 还是其他地方的问题?

    您可以使用“DependsOn”属性。它会自动确定模板中的哪些资源可以并行化,以及哪些资源具有需要其他操作先完成的依赖项。您可以使用 DependsOn 显式指定依赖项,这会覆盖默认并行性并指示 CloudFormation 按指定顺序对这些资源进行操作。

    在您的情况下,第二个和第三个模板 DependsOn Policies

    更多详情:DependsOn

    【讨论】:

      【解决方案2】:

      您无法访问输出的原因是,您没有为其他堆栈公开输出。

      使用您要导出的数据更新您的输出。参考 - Outputs 相同。

      然后,使用依赖堆栈中的函数 Fn::ImportValue 来消费所需的数据。参考 - ImportValue 相同。

      希望这会有所帮助。

      【讨论】:

      • 谢谢,但我认为没有必要使用 export/ImportValue,因为它是一个嵌套堆栈。如果我使用导出/导入交叉引用值,它当然可以工作。但我希望它们在嵌套堆栈中。
      猜你喜欢
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 2021-07-06
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多