无法删除 cfn 堆栈,角色无效或无法承担
Unable to delete cfn stack, role is invalid or cannot be assumed
我是 aws cloudformation 的新手;我想知道是否有人知道在堆栈不会删除时强制删除堆栈的方法。它失败并出现此错误:
Failed to delete stack: Role arn:aws:iam::role/CloudFormationRole-NestedCFN-CodePipeline is invalid or cannot be assumed
当我尝试删除嵌套的子堆栈而不是先删除父堆栈时,通常会发生此错误。如果我不小心删除了父堆栈,有没有办法删除嵌套堆栈?
遗憾的是,无法强制删除 CF 堆栈。
您可以尝试的几件事:
- 手动删除冲突资源,然后重新启动堆栈
删除。
- 删除CF模板中的冲突资源
用它更新堆栈。
这个问题我遇到过几次。解决方案有点麻烦。在您的情况下,您需要创建一个名为 CloudFormationRole-NestedCFN-CodePipeline
的新角色。当您创建此角色时,您可能需要 select CloudFormation
服务,当它要求您 选择将使用此角色的服务 然后 附加权限策略。创建角色后,再次尝试删除堆栈。
其中一些是猜谜游戏,因为您需要选择 "trusted entity" 的正确资源(即 AWS 服务)。根据您的角色名称,它可以是 CloudFormation 或 CodePipeline。
删除CloudFormation堆栈后,您可以删除刚刚创建的IAM角色。
您收到此错误的原因是您可能删除了一个 CloudFormation 堆栈,该堆栈具有您尝试删除的堆栈正在使用的 IAM 角色。
我希望 AWS 有一个更优雅的解决方案,但这是我的解决方法。
我遇到了同样的问题,删除堆栈的唯一方法是使用 AWS CLI 并执行以下命令:
aws cloudformation delete-stack --role-arn arn:aws:iam::xxxx:role/anyrolewithpermissions --stack-name StuckStack
请确保使用具有足够权限的另一个角色。
在我的例子中,我删除了创建堆栈的管道,这删除了堆栈使用的角色。
选项 1) 从管道堆栈中启用另一个管道,然后 "update" 您无法删除的堆栈,但告诉它使用管道创建的新角色。然后删除堆栈(即使更新失败,新的作用还在,可以删除)。
选项 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:
- "*"
之后可能还有其他维修工作要做!
解决此问题的更简单方法是使用更改集。可以按照以下步骤进行
- 创建具有正确权限的角色
- Select 您希望删除和创建更改集的堆栈
- 在更改集中,使用现有模板,通过向导导航但更改它使用的 IAM 角色
- 然后创建并执行变更集。
然后你可以相应地删除堆栈
这通常发生在嵌套堆栈的情况下。只需创建一个具有相同名称的角色并授予完全管理员访问权限 role.With 此权限角色将能够删除堆栈。删除栈成功后删除角色
这通常发生在需要删除堆栈的角色被意外删除时。您可能会收到错误消息
Role arn:aws:iam::<account>:role/<role name> is invalid or cannot be assumed
转到 IAM
> roles
> create role
> 点击 cloudformation
获取服务 > 确保你给它正确的 permissions
以便cloudformation 可以删除堆栈。 (在我的例子中,我给了它管理员权限,因为我打算在删除堆栈后立即删除该角色 > Role name
在错误消息中使用相同的角色名称。
您现在应该可以删除堆栈了
我是 aws cloudformation 的新手;我想知道是否有人知道在堆栈不会删除时强制删除堆栈的方法。它失败并出现此错误:
Failed to delete stack: Role arn:aws:iam::role/CloudFormationRole-NestedCFN-CodePipeline is invalid or cannot be assumed
当我尝试删除嵌套的子堆栈而不是先删除父堆栈时,通常会发生此错误。如果我不小心删除了父堆栈,有没有办法删除嵌套堆栈?
遗憾的是,无法强制删除 CF 堆栈。
您可以尝试的几件事:
- 手动删除冲突资源,然后重新启动堆栈 删除。
- 删除CF模板中的冲突资源 用它更新堆栈。
这个问题我遇到过几次。解决方案有点麻烦。在您的情况下,您需要创建一个名为 CloudFormationRole-NestedCFN-CodePipeline
的新角色。当您创建此角色时,您可能需要 select CloudFormation
服务,当它要求您 选择将使用此角色的服务 然后 附加权限策略。创建角色后,再次尝试删除堆栈。
其中一些是猜谜游戏,因为您需要选择 "trusted entity" 的正确资源(即 AWS 服务)。根据您的角色名称,它可以是 CloudFormation 或 CodePipeline。
删除CloudFormation堆栈后,您可以删除刚刚创建的IAM角色。
您收到此错误的原因是您可能删除了一个 CloudFormation 堆栈,该堆栈具有您尝试删除的堆栈正在使用的 IAM 角色。
我希望 AWS 有一个更优雅的解决方案,但这是我的解决方法。
我遇到了同样的问题,删除堆栈的唯一方法是使用 AWS CLI 并执行以下命令:
aws cloudformation delete-stack --role-arn arn:aws:iam::xxxx:role/anyrolewithpermissions --stack-name StuckStack
请确保使用具有足够权限的另一个角色。
在我的例子中,我删除了创建堆栈的管道,这删除了堆栈使用的角色。
选项 1) 从管道堆栈中启用另一个管道,然后 "update" 您无法删除的堆栈,但告诉它使用管道创建的新角色。然后删除堆栈(即使更新失败,新的作用还在,可以删除)。
选项 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:
- "*"
之后可能还有其他维修工作要做!
解决此问题的更简单方法是使用更改集。可以按照以下步骤进行
- 创建具有正确权限的角色
- Select 您希望删除和创建更改集的堆栈
- 在更改集中,使用现有模板,通过向导导航但更改它使用的 IAM 角色
- 然后创建并执行变更集。
然后你可以相应地删除堆栈
这通常发生在嵌套堆栈的情况下。只需创建一个具有相同名称的角色并授予完全管理员访问权限 role.With 此权限角色将能够删除堆栈。删除栈成功后删除角色
这通常发生在需要删除堆栈的角色被意外删除时。您可能会收到错误消息
Role arn:aws:iam::<account>:role/<role name> is invalid or cannot be assumed
转到 IAM
> roles
> create role
> 点击 cloudformation
获取服务 > 确保你给它正确的 permissions
以便cloudformation 可以删除堆栈。 (在我的例子中,我给了它管理员权限,因为我打算在删除堆栈后立即删除该角色 > Role name
在错误消息中使用相同的角色名称。
您现在应该可以删除堆栈了