【问题标题】:AWS IAM - How to show describe policy statements using the CLI?AWS IAM - 如何使用 CLI 显示描述策略语句?
【发布时间】:2020-09-11 03:20:36
【问题描述】:
如何使用 AWS CLI 显示 IAM 策略的完整内容,包括效果、操作和资源语句?
“aws iam list-policies”命令列出所有策略,但不列出策略中包含的实际 JSON E、A、R 语句。
我可以使用“aws iam get-policy-version”命令,但这不会在其输出中显示策略名称。当我通过脚本运行此命令以获取数十个策略的信息时,无法知道输出将属于哪个策略。
还有其他方法吗?
【问题讨论】:
标签:
amazon-web-services
amazon-iam
aws-cli
amazon-policy
【解决方案2】:
正如 mokugo-devops 在他的回答中所说,以及您在问题中所述,您只能使用“get-policy-version”来获取正确的 JSON。这是我的做法:
RAW_POLICIES=$(aws iam list-policies --query Policies[].[Arn,PolicyName,DefaultVersionId])
POLICIES=$(echo $RAW_POLICIES | tr -d " " | sed 's/\],/\]\n/g')
for POLICY in $POLICIES
do echo $POLICY | cut -d '"' -f 4
echo -e "---------------\n"
aws iam get-policy-version --version-id $(echo $POLICY | cut -d '"' -f 6) --policy-arn $(echo $POLICY | cut -d '"' -f 2)
echo -e "\n-----------------\n"
done
现在对脚本进行一些解释:
RAW_POLICIES 将为您提供一个巨大的数组列表,每个数组都包含请求的策略名称和策略 ARN,以及需要的默认版本 ID。然而,它包含的空格会使直接在 bash 中对其进行迭代不太舒服(尽管对于足够顽固的人来说并非不可能)。
为了使接下来的循环更容易,我们将清理空格,然后使用 sed 插入我们需要的空格。这是在定义 POLICIES 变量的第二行中完成的。
这让我们在实际循环中几乎没有什么可做的。在这里,我们只打印 Policy 名称、一些漂亮的行并调用您预测将使用的函数 get-policy-version。
【解决方案3】:
对@uberhumus 的建议稍作修改,以减少将被提取的策略数量。在查询中使用 --scope 本地限定符来限制它。否则它会在帐户中吐出 100 条策略。将范围限制为本地将仅列出用户在帐户中配置的策略...这是修改后的版本:
RAW_POLICIES=$(aws iam list-policies **--scope Local** --query Policies[].[Arn,PolicyName,DefaultVersionId])
POLICIES=$(echo $RAW_POLICIES | tr -d " " | sed 's/\],/\]\n/g')
for POLICY in $POLICIES
do echo $POLICY | cut -d '"' -f 4
echo -e "---------------\n"
aws iam get-policy-version --version-id $(echo $POLICY | cut -d '"' -f 6) --policy-arn $(echo $POLICY | cut -d '"' -f 2)
echo -e "\n-----------------\n"
done