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

时间:2020-05-24 12:54:55

标签: 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”命令,但这不会在其输出中显示策略名称。当我通过脚本运行此命令以获取数十个策略的信息时,无法知道输出将属于哪个策略。

还有另一种方法吗?

3 个答案:

答案 0 :(得分:3)

您要做的唯一的操作如下:

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

答案 1 :(得分:1)

正如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变量的第二行中完成的。

这使我们在实际循环中几乎无济于事。在这里,我们只打印策略名称,一些漂亮的行,然后调用您预测将使用的函数get-policy-version。

答案 2 :(得分:0)

对@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