AWS IAM - 如何使用 CLI 显示描述策略声明?

bel*_*unk 7 amazon-web-services amazon-iam aws-cli amazon-policy

如何使用 AWS CLI 显示 IAM 策略的完整正文,包括效果、操作和资源语句?

“aws iam list-policies”命令列出所有策略,但不列出策略中包含的实际 JSON E、A、R 语句。

我可以使用“aws iam get-policy-version”命令,但这不会在其输出中显示策略名称。当我通过脚本运行此命令以获取数十个策略的信息时,无法知道输出将属于哪个策略。

还有另一种方法可以做到这一点吗?

Chr*_*ams 8

正如您所说,唯一要做的就是:

  • 通过list-policies动词获取所有 IAM 策略。
  • 循环输出,获取“PolicyId”和“DefaultVersionId”。
  • 将它们传递到get-policy-version动词中。
  • 将迭代中的PolicyName 映射到第二个请求中的PolicyVersion.Document 值。


Ube*_*mus 5

正如 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
Run Code Online (Sandbox Code Playgroud)

现在对脚本进行一些解释:RAW_POLICIES 将为您提供一个巨大的数组列表,每个数组都包含所请求的策略名称和策略 ARN,以及所需的默认版本 ID。然而,它会包含空格,这会使直接在 bash 中对其进行迭代不太舒服(尽管对于足够顽固的人来说并非不可能)。

为了使即将到来的循环更容易,我们将清理空格,然后使用 sed 插入我们需要的空格。这是在定义 POLICIES 变量的第二行中完成的。

这使得我们在实际循环中几乎没有什么可做的。在这里,我们只打印策略名称、一些漂亮的行并调用您预测将使用的函数 get-policy-version。


小智 5

对 @uberhumus 建议进行轻微修改,以减少将提取的策略数量。在查询中使用 --scope Local 限定符来限制它。否则它会吐出帐户中的 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
Run Code Online (Sandbox Code Playgroud)