amazon-iam - 如何使用一个命令在命令行上删除具有多个版本的 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
标志。
解决方案
错误消息表明:
- 您不能删除策略的默认版本。相反,请删除策略本身。
- 当有多个版本时,您无法删除策略。
我还注意到list-policy-versions
返回一个名为的字段,该字段IsDefaultVersion
指示策略是否是默认版本。
因此,您需要执行以下操作:
- 称呼
list-policy-versions
- 对于每个响应
IsDefaultVersion = False
,请致电delete-policy-version
- 删除所有版本后,调用
delete-policy
每个策略(或,每个IsDefaultVersion = True
)
这在 Python 脚本中可能会更容易。
推荐阅读
- powerbi - 定期导入邮件附件
- r - 创建 nxn 矩阵
- delphi - 列表
其中 T 是一条记录 - javascript - 基于另一个字符串/数组Javascript从1个字符串/数组中删除值
- oracle - 使用 Postgres DDL 创建的表是否会转换为 Liquibase 中的其他 DB DDL?
- c - 如何在C中制作动态结构
- performance-testing - 无法将新计算机添加到 gatling 数据库页面
- python - 将 dictionary_tree 转换为元组列表
- r - 当数据没有按性别分开时,如何单独检查性别分布?
- python - 如何获取与作者相关的点赞总数,并在达到一定数量时使用它发送通知