【问题标题】: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


【解决方案1】:

如您所说,这样做的唯一方法是:

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

【讨论】:

    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-05
        • 1970-01-01
        • 1970-01-01
        • 2018-04-13
        • 1970-01-01
        相关资源
        最近更新 更多