如何使用 AWS CLI 列出用户及其权限?

far*_*332 4 amazon-web-services aws-cli

我运行这个命令:aws iam list-users,我得到一个用户列表,但没有列出权限(意味着如果有人是 root,或者 s3fullaccess 等等)。

我运行另一个命令:aws iam list-user-policies --user-name xxxxx,我得到以下结果为空:

{
    "PolicyNames": []
}
Run Code Online (Sandbox Code Playgroud)

我需要哪个命令或什么命令组合来显示所有用户及其各自的权限?,谢谢。

Dan*_*one 10

受这篇文章的启发,我写了这篇文章来捕获用户的权限,然后再清除它们,以防以后需要恢复:

function _getUserIamPermissions() {
    export AWS_PAGER="";
    local _user="${1}";
    
    local outputManagedPolicies="";
    local outputUserPolicies="";
    local outputManagedGroupPolicies="";
    local outputGroupPolicies="";

    # Managed Policies Attached to the IAM User
    local _managedpolicies=$(aws iam list-attached-user-policies --user-name "${_user}" | jq -r '.AttachedPolicies[].PolicyArn';);
    for policy in ${_managedpolicies}; do
        local versionId=$(aws iam get-policy --policy-arn "${policy}" | jq -r '.Policy.DefaultVersionId';);
        outputManagedPolicies=$(aws iam get-policy-version --policy-arn "${policy}" --version-id "${versionId}";);
        printf "%s" "${outputManagedPolicies}";
    done;

    # Inline Policies on the IAM User
    local _userpolicies=$(aws iam list-user-policies --user-name "${_user}" | jq -r '.PolicyNames[]';);
    for policy in ${_userpolicies}; do
        outputUserPolicies=$(aws iam get-user-policy --user-name "${_user}" --policy-name "${policy}";);
        printf "%s" "${outputUserPolicies}";
    done;

    # Get all of the IAM User's assigned IAM Groups
    local _groups=$(aws iam list-groups-for-user --user-name "${_user}" | jq -r '.Groups[].GroupName';);
    for group in ${_groups}; do
        # Managed Policies Attached to the IAM Group
        local _managedgrouppolicies=$(aws iam list-attached-group-policies --group-name "${group}" | jq -r '.AttachedPolicies[].PolicyArn';);
        for policy in ${_managedgrouppolicies}; do
            local versionId=$(aws iam get-policy --policy-arn "${policy}" | jq -r '.Policy.DefaultVersionId';);
            outputManagedGroupPolicies=$(aws iam get-policy-version --policy-arn "${policy}" --version-id "${versionId}" | jq --arg arn "${policy}" '{"PolicyArn": $arn, "Policy": .}';);
            printf "%s" "${outputManagedGroupPolicies}";
        done;

        # Inline Policies on the IAM Group
        local _grouppolicies=$(aws iam list-group-policies --group-name "${group}" | jq -r '.PolicyNames[]';);
        for policy in ${_grouppolicies}; do
            outputGroupPolicies=$(aws iam get-group-policy --group-name "${group}" --policy-name "${policy}";);
            printf "%s" "${outputGroupPolicies}";
        done;
    done;
}

function getUserIamPermissions() {
    local username="${1}";
    _getUserIamPermissions "${username}" | jq -s;
}
Run Code Online (Sandbox Code Playgroud)

根据此处找到的信息进行更新:# https://www.badllama.com/content/using-aws-cli-check-user-permissions

用法:使用它的最快方法以及我使用它的方式是通过 AWS CloudShell。我打开 CloudShell 终端,将其粘贴进去,然后运行:

getUserIamPermissions <username>
Run Code Online (Sandbox Code Playgroud)

输出是一个 JSON 数组,其中包含所有用户的:

  1. 附加到 IAM 用户的托管策略
  2. IAM 用户的内联策略
  3. 附加到用户的 IAM 组的托管策略
  4. 用户 IAM 组的内联策略


Mar*_*k B 8

该命令仅列出用户的内联策略,您还需要获取附加到 IAM 用户的托管策略列表。然后,您还需要获取用户所属组的列表,并列出附加到每个组的内联策略和托管策略。

因此,您需要从 CLI 执行以下操作:

aws iam list-user-policies
aws iam list-attached-user-policies
aws iam list-groups-for-user

# For each group:
aws iam list-group-policies
aws iam list-attached-group-policies
Run Code Online (Sandbox Code Playgroud)

我强烈建议在 Python 和 Boto3 中做这样的事情,而不是使用 AWS CLI 工具。