ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

AWS CLI 实战:使用 `accessanalyzer list-findings-v2` 检索并过滤 IAM Access Analyzer 发现结果

AWS CLI 实战:使用 `accessanalyzer list-findings-v2` 检索并过滤 IAM Access Analyzer 发现结果 AWS CLI 实战使用accessanalyzer list-findings-v2检索并过滤 IAM Access Analyzer 发现结果【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cliIAM Access Analyzer 会在分析资源策略后生成发现结果finding标识账户信任边界之外的外部访问、未使用访问或内部访问风险。本指南基于 AWS CLI 官方示例文档完整讲解aws accessanalyzer list-findings-v2命令的用法如何指定 analyzer、如何用--filter按资源与资源类型精确筛选、如何理解返回结果的结构并结合本仓库的 AWS CLI 服务模型源码service-2.json剖析每个参数的底层定义、支持的操作符与分页机制让你能直接复制命令投入安全审计实战。命令概述list-findings-v2能做什么list-findings-v2用于检索指定 analyzer分析器生成的发现结果列表。从 AWS CLI 的 botocore 服务模型可以看到该操作的完整定义见 service-2.jsonHTTP 方法为POST请求 URI 为/findingv2成功响应码为200该操作是只读操作readonly: true可能抛出的异常包括ResourceNotFoundException、ValidationException、InternalServerException、ThrottlingException和AccessDeniedException。模型文档中还明确指出一个关键事实ListFindings与ListFindingsV2在 IAM 策略中都对应access-analyzer:ListFindings这一 Action即执行本命令前调用者必须拥有access-analyzer:ListFindings权限同时旧版ListFindings仅支持外部访问external access分析器而内部访问internal access和未使用访问unused access分析器必须使用ListFindingsV2——这也是日常运维中优先使用 V2 版本的重要原因。基本用法检索指定 analyzer 的发现结果原文档给出的第一个典型场景是检索账户中指定 analyzer 生成的发现结果并通过过滤条件只保留名称包含Cognito的 IAM 角色。命令如下aws accessanalyzer list-findings-v2 \ --analyzer-arn arn:aws:access-analyzer:us-west-2:111122223333:analyzer/ConsoleAnalyzer-account \ --filter {resource: {contains: [Cognito]}, resourceType: {eq: [AWS::IAM::Role]}}参数拆解--analyzer-arn必填要从中检索发现结果的分析器 ARN。在请求模型ListFindingsV2Request中它是唯一的必填字段见 service-2.json。示例中的arn:aws:access-analyzer:us-west-2:111122223333:analyzer/ConsoleAnalyzer-account表明这是一个在us-west-2区域、由账户111122223333创建、名为ConsoleAnalyzer-account的分析器。实际使用时请替换为aws accessanalyzer list-analyzers输出的真实 ARN。--filter可选一个 JSON 格式的过滤条件键为 IAM Access Analyzer 的过滤键filter key如resource、resourceType、principal、action等值为对应的匹配准则Criterion。上面的示例同时叠加了两个条件resource: {contains: [Cognito]}资源的 ARN 中包含子串CognitoresourceType: {eq: [AWS::IAM::Role]}资源类型严格等于AWS::IAM::Role。实际输出示例执行上述命令后返回的 JSON 输出如下来自原文档{ findings: [ { analyzedAt: 2024-02-16T18:17:47.88800000:00, createdAt: 2021-02-26T21:17:24.71000000:00, id: 597f3bc2-3adc-4c18-9879-5c4b23485e46, resource: arn:aws:iam::111122223333:role/Cognito_testpoolUnauth_Role, resourceType: AWS::IAM::Role, resourceOwnerAccount: 111122223333, status: ACTIVE, updatedAt: 2021-02-26T21:17:24.71000000:00, findingType: ExternalAccess }, { analyzedAt: 2024-02-16T18:17:47.88800000:00, createdAt: 2021-02-26T21:17:50.90500000:00, id: ce0e221a-85b9-4d52-91ff-d7678075442f, resource: arn:aws:iam::111122223333:role/Cognito_testpoolAuth_Role, resourceType: AWS::IAM::Role, resourceOwnerAccount: 111122223333, status: ACTIVE, updatedAt: 2021-02-26T21:17:50.90500000:00, findingType: ExternalAccess } ] }可见过滤条件生效返回的两条结果都是名称包含Cognito的 IAM 角色Cognito_testpoolUnauth_Role与Cognito_testpoolAuth_Role分别对应未认证Unauth与已认证Auth两种身份池角色。深入理解过滤条件Criterion 的四种操作符--filter参数的底层类型是FilterCriteriaMap——一个键为字符串、值为Criterion结构体的 Map见 service-2.json。每个Criterion支持四种操作符且可组合使用见 service-2.json操作符含义取值类型eq等于字符串列表命中任意一个即匹配neq不等于字符串列表排除其中任意值contains包含子串字符串列表命中任意一个子串即匹配exists是否存在布尔值true/false对应到 CLI 的 JSON 写法# 等于查找状态为 ACTIVE 的发现结果 --filter {status: {eq: [ACTIVE]}} # 不等于排除所有 S3 桶相关结果 --filter {resourceType: {neq: [AWS::S3::Bucket]}} # 包含查找资源 ARN 中包含 prod 的结果 --filter {resource: {contains: [prod]}} # 存在查找带有特定错误信息的结果 --filter {error: {exists: true}} # 多条件叠加同时满足多个键 --filter {status: {eq: [ACTIVE]}, resourceType: {contains: [AWS::S3]}}提示关于可用过滤键的完整清单可查阅 AWS 官方 IAM User Guide 中的 IAM Access Analyzer filter keys原文档中给出的参考链接。本仓库仅封装 AWS API过滤键本身由 IAM Access Analyzer 服务定义。更多参数排序与分页ListFindingsV2Request除analyzerArn与filter外还支持maxResults、nextToken和sort三个参数见 service-2.json。使用--sort控制排序sort参数对应SortCriteria结构体见 service-2.json包含两个字段attributeName参与排序的字段名如createdAt、updatedAt、resourceType等orderBy排序方向取值为ASC升序或DESC降序。# 按创建时间降序最新的发现结果排在最前 aws accessanalyzer list-findings-v2 \ --analyzer-arn arn:aws:access-analyzer:us-west-2:111122223333:analyzer/ConsoleAnalyzer-account \ --sort {attributeName: createdAt, orderBy: DESC}使用--max-results与--next-token分页当结果集较大时单次响应最多返回由maxResults指定的条数Integer类型并通过响应中的nextToken提供下一页游标见 service-2.json。对应的分页配置也完整定义在 paginators-1.json 中input_token与output_token均为nextTokenlimit_key为maxResultsresult_key为findings。这意味着除了手动拼接游标你还可以直接利用 AWS CLI 内置的分页能力——追加--page-size对应每次 API 请求的 maxResults并使用--no-paginate之外的默认分页行为或通过--starting-token从指定位置继续# 每页 20 条自动翻页并聚合所有结果 aws accessanalyzer list-findings-v2 \ --analyzer-arn arn:aws:access-analyzer:us-west-2:111122223333:analyzer/ConsoleAnalyzer-account \ --page-size 20 # 手动分页拿到第一页后用 nextToken 取下一页 aws accessanalyzer list-findings-v2 \ --analyzer-arn arn:aws:access-analyzer:us-west-2:111122223333:analyzer/ConsoleAnalyzer-account \ --max-results 20 \ --next-token 上一步返回的nextToken响应结构详解FindingSummaryV2的字段含义响应中的findings列表元素类型为FindingSummaryV2见 service-2.json必填字段包括analyzedAt、createdAt、id、resourceType、resourceOwnerAccount、status与updatedAt。各字段说明如下字段说明analyzedAt生成该发现结果的资源策略或 IAM 实体被分析的时刻createdAt发现结果被创建的时刻updatedAt发现结果最近一次被更新的时刻id发现结果的唯一 ID后续可用get-finding-v2 --id id获取详情resource被外部主体访问的具体资源 ARN如arn:aws:iam::111122223333:role/Cognito_testpoolUnauth_RoleresourceType资源类型如AWS::IAM::Role、AWS::S3::BucketresourceOwnerAccount拥有该资源的 AWS 账户 IDstatus发现结果状态如ACTIVE活跃、ARCHIVED已归档、RESOLVED已解决error当发现结果类型为 Error 时携带的错误信息findingType发现结果的类型见下文findingType的取值与适用场景FindingType的枚举定义见 service-2.jsonExternalAccess外部访问发现结果来自外部访问分析器标识信任区之外的实体对资源有访问权限示例输出中的两条记录即为此类型UnusedIAMRole、UnusedIAMUserAccessKey、UnusedIAMUserPassword、UnusedPermission未使用访问发现结果来自未使用访问分析器InternalAccess内部访问发现结果来自内部访问分析器。由于ListFindingsV2同时支持以上全部三种分析器类型而旧版ListFindings仅支持外部访问分析器因此findingType字段是你区分结果来源、按类型进一步审计的关键维度。前置条件与权限要求调用list-findings-v2前需满足已创建 Access Analyzer需要通过控制台或aws accessanalyzer create-analyzer创建分析器并拿到其 ARNIAM 权限调用者必须具有access-analyzer:ListFindings权限ListFindings与ListFindingsV2共用该 Action。一个最小化的策略示例{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: access-analyzer:ListFindings, Resource: arn:aws:access-analyzer:*:*:analyzer/* } ] }区域一致性--analyzer-arn中的区域必须与 CLI 当前配置的区域一致否则会命中ResourceNotFoundException或AccessDeniedException。与旧版list-findings的选择建议服务模型文档见 service-2.json明确提示ListFindings仅支持外部访问分析器内部访问与未使用访问分析器必须使用ListFindingsV2。此外V2 版本在FindingSummaryV2中新增了findingType字段能更清晰地标识结果类型。因此在新项目中应统一优先使用list-findings-v2只有当你确认只涉及外部访问分析器且依赖旧版响应结构时才考虑使用list-findings。相关资源本示例文档awscli/examples/accessanalyzer/list-findings-v2.rst服务模型操作与参数定义awscli/botocore/data/accessanalyzer/2019-11-01/service-2.json分页配置awscli/botocore/data/accessanalyzer/2019-11-01/paginators-1.json更完整的使用方式创建分析器、查看单条结果详情等可参考同目录下的create-analyzer、get-finding-v2等示例文件awscli/examples/accessanalyzer/【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表