首页 > 解决方案 > 如何使用一个命令在命令行上删除具有多个版本的 iam 策略?

问题描述

我正在尝试删除具有多个版本的命令行的策略,如下所示:

function iam-list-versions () {
  aws iam list-policy-versions --query "Versions[].VersionId" --policy-arn $1 --output text 
}

function iam-delete-policy-versions () {
  iam-list-versions $1 | xargs -n 1 -I{} aws iam delete-policy-version --policy-arn $1 --version-id {}
}

function iam-delete-policy () {
  iam-delete-policy-versions $1
  aws iam delete-policy --policy-arn $1
}

然后运行 iam-delete-policy arn:aws:iam::123456789012:policy/... 但我不断收到错误:

An error occurred (DeleteConflict) when calling the DeletePolicyVersion operation: Cannot delete the default version of a policy.

An error occurred (DeleteConflict) when calling the DeletePolicy operation: This policy has more than one version. Before you delete a policy, you must delete the policy's versions. The default version is deleted with the policy.

看起来我的iam-delete-policy-versions功能不起作用。希望他们能简单地添加一个--force标志。

标签: amazon-iamamazon-policy

解决方案


错误消息表明:

  • 您不能删除策略的默认版本。相反,请删除策略本身。
  • 当有多个版本时,您无法删除策略。

我还注意到list-policy-versions返回一个名为的字段,该字段IsDefaultVersion指示策略是否是默认版本。

因此,您需要执行以下操作:

  • 称呼list-policy-versions
  • 对于每个响应IsDefaultVersion = False,请致电delete-policy-version
  • 删除所有版本后,调用delete-policy每个策略(或,每个IsDefaultVersion = True

这在 Python 脚本中可能会更容易。


推荐阅读