【问题标题】:How to list users and its permissions with AWS CLI?如何使用 AWS CLI 列出用户及其权限?
【发布时间】:2023-03-13 00:13:01
【问题描述】:

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

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

{
    "PolicyNames": []
}

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

【问题讨论】:

    标签: amazon-web-services aws-cli


    【解决方案1】:

    该命令仅列出用户的内联策略,您还需要获取附加到 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
    

    我强烈建议在 Python 和 Boto3 中执行类似的操作,而不是使用 AWS CLI 工具。

    【讨论】:

    • 问题是关于权限的,答案是关于政策的。
    • @zdenko.s 列出附加到用户的安全策略是列出他们拥有哪些权限的最佳方式。权限是策略中的语句。你知道更好的方法吗?
    • 这只是开始,而不是问题的完整答案。
    • 问题是关于 bash,答案是关于 python。
    • @axlotl 你在说什么?答案是针对 bash。最后,我还建议研究 Python,仅此而已。
    【解决方案2】:

    受这篇文章的启发,我写这篇文章是为了在清除用户之前捕获用户的权限,以防以后需要恢复:

    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;
    }
    

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

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

    getUserIamPermissions <username>
    

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

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

    【讨论】:

      【解决方案3】:

      首先,您会获得政策列表(正如@Mark-b 在分析器中提到的)
      接下来,您将获得每个政策的版本:

      aws iam list-policy-versions --policy-arn

      具体版本请查询PolicyDocument

      aws iam get-policy-version --policy-arn arn:aws:iam::123456789012:policy/MyPolicy --version-id vX

      您将获得带有 IAM 政策声明的 JSON 格式的 PolicyDocument

      【讨论】:

        【解决方案4】:

        请在有关列出所有用户及其策略、组、附加策略的一个 bash 脚本下方运行。

        aws iam list-users |grep -i username > list_users ; cat list_users |awk '{print $NF}' |tr '\"' ' ' |tr '\,' ' '|while read user; do echo "\n\n--------------Getting information for user $user-----------\n\n" ; aws iam list-user-policies --user-name $user --output yaml; aws iam list-groups-for-user  --user-name $user --output yaml;aws iam  list-attached-user-policies --user-name $user --output yaml ;done ;echo;echo
        

        【讨论】:

          【解决方案5】:

          您可以使用 AWS API GetAccountAuthorizationDetails 获取 IAM 权限配置的快照

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-21
            • 2020-01-19
            • 2019-01-11
            • 1970-01-01
            • 2021-05-20
            • 2022-10-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多