代码之家  ›  专栏  ›  技术社区  ›  pelican

无法删除cfn堆栈,角色无效或无法假定

  •  37
  • pelican  · 技术社区  · 7 年前

    我是aws cloudformation的新手;我想知道是否有人知道在堆栈无法删除时强制删除堆栈的方法。失败,出现以下错误:

    Failed to delete stack: Role arn:aws:iam::role/CloudFormationRole-NestedCFN-CodePipeline is invalid or cannot be assumed
    

    当我尝试删除嵌套的子堆栈而不是首先删除父堆栈时,通常会发生此错误。如果我不小心删除了父堆栈,有没有办法删除嵌套堆栈?

    7 回复  |  直到 6 年前
        1
  •  64
  •   Juan Zapata    7 年前

    我遇到了同样的问题,删除堆栈的唯一方法是使用AWS CLI并执行以下命令:

    aws cloudformation delete-stack --role-arn arn:aws:iam::xxxx:role/anyrolewithpermissions --stack-name StuckStack
    

    请确保使用具有足够权限的其他角色。

        2
  •  52
  •   Eliran Malka    6 年前

    我有过几次这样的问题。解决方案有点老套。在您的情况下,需要创建一个名为 CloudFormationRole-NestedCFN-CodePipeline . 创建此角色时,可能需要选择 CloudFormation 当它要求您时提供服务 选择将使用此角色的服务 然后 附加权限策略 . 创建角色后,请再次尝试删除堆栈。
    其中一些是猜测游戏,因为您需要选择正确的资源(即AWS服务),即“受信任的实体”。根据您的角色名称,它可以是CloudFormation或CodePipeline。

    删除CloudFormation堆栈后,可以删除刚刚创建的IAM角色。

    出现此错误的原因是,您可能删除了一个具有IAM角色的CloudFormation堆栈,该角色正由您尝试删除的堆栈使用。

    我希望AWS有一个更优雅的解决方案,但这是我的解决方法。

        3
  •  8
  •   Hom Bahrani    4 年前

    当删除堆栈所需的角色被意外删除时,通常会发生这种情况。您可能会收到错误消息

    Role arn:aws:iam::<account>:role/<role name> is invalid or cannot be assumed
    

    IAM &燃气轮机; roles &燃气轮机; create role &燃气轮机;点击 cloudformation 对于服务>确保你给它的权利 permissions 这样cloudformation就可以删除堆栈。(在我的情况下,我授予了it管理员权限,因为我计划在删除堆栈后立即删除角色> Role name 在错误消息中使用相同的角色名称。

    现在应该可以删除堆栈

        4
  •  1
  •   Anmol    5 年前

    这通常发生在嵌套堆栈的情况下。只需创建一个具有相同名称的角色,并授予该角色的完全管理员访问权限。使用此权限权限,角色将能够删除堆栈。成功删除堆栈后删除角色

        5
  •  0
  •   Victor    7 年前

    不幸的是,没有办法强制删除CF堆栈。

    您可以尝试以下几点:

    1. 手动删除冲突资源,然后重新启动堆栈 删除。
    2. 从CF模板中删除冲突资源,并 使用它更新堆栈。
        6
  •  0
  •   Robbie    6 年前

    在我的例子中,我删除了创建堆栈的管道,这删除了堆栈使用的角色。

    选项1)使用管道堆栈中的另一个管道,然后“更新”不能删除的堆栈,但告诉它使用管道创建的新角色。然后删除堆栈(即使更新失败,新角色仍在发挥作用,您可以删除)。

    选项2)创建一个与您已删除的角色匹配的角色(在我的情况下如下),然后使用此角色更新堆栈,然后删除。

    CloudformationServiceRole:
      Type: AWS::IAM::Role
      Properties:
        AssumeRolePolicyDocument:
          Statement:
          - Action:
            - sts:AssumeRole
            Effect: Allow
            Principal:
              Service:
              - cloudformation.amazonaws.com
          Version: '2012-10-17'
        Path: "/"
        Policies:
          - PolicyName: DeployCloudformationStack
            PolicyDocument:
              Version: '2012-10-17'
              Statement:
              - Resource: "*"
                Effect: Allow
                Action:
                - "*" 
    

    之后可能会有其他维修!

        7
  •  0
  •   hynespm    6 年前

    解决此问题的更简单方法是使用变更集。可以遵循以下步骤

    1. 创建具有正确权限的角色
    2. 选择要删除的堆栈并创建更改集
    3. 在更改集中,使用现有模板,浏览向导,但更改其使用的IAM角色
    4. 然后创建并执行变更集。

    然后可以相应地删除堆栈