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

时间:2018-02-09 15:46:49

标签: amazon-web-services amazon-cloudformation aws-codepipeline aws-codecommit

我是aws的新形象;我想知道是否有人知道在它刚刚赢得删除时强制删除堆栈的方法。它失败并出现此错误:

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

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

7 个答案:

答案 0 :(得分:23)

我有几次这个问题。解决方案有点像黑客攻击。在您的情况下,您需要创建一个名为CloudFormationRole-NestedCFN-CodePipeline的新角色。创建此角色后,当您要求选择将使用此角色的服务然后附加权限政策时,您可能需要选择CloudFormation服务即可。创建角色后,尝试再次删除堆栈 其中一些是猜谜游戏,因为您需要选择正确的资源(即AWS服务),这是一个"可信实体"。根据您的角色名称,它可以是CloudFormation或CodePipeline。

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

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

我希望AWS提供更优雅的解决方案,但这是我的解决方法。

答案 1 :(得分:18)

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

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

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

答案 2 :(得分:0)

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

你可以尝试一些事情:

  1. 手动删除冲突的资源,然后重新启动堆栈 删除。
  2. 从CF模板中删除冲突的资源 用它更新堆栈。

答案 3 :(得分:0)

就我而言,我删除了创建堆栈的管道,这删除了堆栈使用的角色。

选项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:
            - "*" 

此后可能还有其他维修!

答案 4 :(得分:0)

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

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

然后您可以相应地删除堆栈

答案 5 :(得分:0)

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

答案 6 :(得分:0)

这通常发生在需要删除堆栈的角色被意外删除时。您可能会收到错误消息

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

转到 IAM > roles > create role > 点击 cloudformation 获取服务 > 确保您给它正确的 permissions,以便 cloudformation 可以删除堆栈。 (在我的例子中,我给了它管理员权限,因为我打算在删除堆栈后直接删除角色 > for Role name 在错误消息中使用相同的角色名称。

您现在应该可以删除堆栈