news 2026/9/13 15:31:48

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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-cli

IAM 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.json):

  • HTTP 方法为POST,请求 URI 为/findingv2,成功响应码为200
  • 该操作是只读操作("readonly": true);
  • 可能抛出的异常包括ResourceNotFoundExceptionValidationExceptionInternalServerExceptionThrottlingExceptionAccessDeniedException

模型文档中还明确指出一个关键事实:ListFindingsListFindingsV2在 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,如resourceresourceTypeprincipalaction等),值为对应的匹配准则(Criterion)。上面的示例同时叠加了两个条件:
    • "resource": {"contains": ["Cognito"]}:资源的 ARN 中包含子串Cognito
    • "resourceType": {"eq": ["AWS::IAM::Role"]}:资源类型严格等于AWS::IAM::Role

实际输出示例

执行上述命令后,返回的 JSON 输出如下(来自原文档):

{ "findings": [ { "analyzedAt": "2024-02-16T18:17:47.888000+00:00", "createdAt": "2021-02-26T21:17:24.710000+00: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.710000+00:00", "findingType": "ExternalAccess" }, { "analyzedAt": "2024-02-16T18:17:47.888000+00:00", "createdAt": "2021-02-26T21:17:50.905000+00: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.905000+00:00", "findingType": "ExternalAccess" } ] }

可见过滤条件生效:返回的两条结果都是名称包含Cognito的 IAM 角色(Cognito_testpoolUnauth_RoleCognito_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 服务定义。

更多参数:排序与分页

ListFindingsV2RequestanalyzerArnfilter外,还支持maxResultsnextTokensort三个参数(见 service-2.json)。

使用--sort控制排序

sort参数对应SortCriteria结构体(见 service-2.json),包含两个字段:

  • attributeName:参与排序的字段名(如createdAtupdatedAtresourceType等);
  • 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_tokenoutput_token均为nextTokenlimit_keymaxResultsresult_keyfindings

这意味着除了手动拼接游标,你还可以直接利用 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),必填字段包括analyzedAtcreatedAtidresourceTyperesourceOwnerAccountstatusupdatedAt。各字段说明如下:

字段说明
analyzedAt生成该发现结果的资源策略或 IAM 实体被分析的时刻
createdAt发现结果被创建的时刻
updatedAt发现结果最近一次被更新的时刻
id发现结果的唯一 ID(后续可用get-finding-v2 --id <id>获取详情)
resource被外部主体访问的具体资源 ARN(如arn:aws:iam::111122223333:role/Cognito_testpoolUnauth_Role
resourceType资源类型(如AWS::IAM::RoleAWS::S3::Bucket
resourceOwnerAccount拥有该资源的 AWS 账户 ID
status发现结果状态,如ACTIVE(活跃)、ARCHIVED(已归档)、RESOLVED(已解决)
error当发现结果类型为 Error 时携带的错误信息
findingType发现结果的类型(见下文)

findingType的取值与适用场景

FindingType的枚举定义见 service-2.json:

  • ExternalAccess:外部访问发现结果,来自外部访问分析器,标识信任区之外的实体对资源有访问权限(示例输出中的两条记录即为此类型);
  • UnusedIAMRoleUnusedIAMUserAccessKeyUnusedIAMUserPasswordUnusedPermission:未使用访问发现结果,来自未使用访问分析器;
  • InternalAccess:内部访问发现结果,来自内部访问分析器。

由于ListFindingsV2同时支持以上全部三种分析器类型(而旧版ListFindings仅支持外部访问分析器),因此findingType字段是你区分结果来源、按类型进一步审计的关键维度。

前置条件与权限要求

调用list-findings-v2前需满足:

  1. 已创建 Access Analyzer:需要通过控制台或aws accessanalyzer create-analyzer创建分析器,并拿到其 ARN;
  2. IAM 权限:调用者必须具有access-analyzer:ListFindings权限(ListFindingsListFindingsV2共用该 Action)。一个最小化的策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "access-analyzer:ListFindings", "Resource": "arn:aws:access-analyzer:*:*:analyzer/*" } ] }
  1. 区域一致性--analyzer-arn中的区域必须与 CLI 当前配置的区域一致,否则会命中ResourceNotFoundExceptionAccessDeniedException

与旧版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-analyzerget-finding-v2等示例文件:awscli/examples/accessanalyzer/

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 15:29:33

国产电源芯片选型避坑指南:架构、工艺、支撑与FAE四维评估法

1. 为什么这份清单不叫“国产电源芯片推荐榜”&#xff0c;而叫“原厂摸底报告”“国产电源芯片”这六个字&#xff0c;这两年在BOM表、采购单、技术评审会上出现的频率&#xff0c;已经高到让很多资深电子工程师下意识皱眉的程度。不是因为不重要——恰恰相反&#xff0c;它太…

作者头像 李华
网站建设 2026/9/13 15:28:46

ASP军事论坛源码解析:三层架构与权限控制实战

简介&#xff1a;面向ASP初学者的网上军事论坛毕业设计项目&#xff0c;完整提供源代码与配套论文&#xff0c;可用于课程设计、毕业设计或Web开发入门实践。系统基于ASP服务器端脚本&#xff0c;结合数据库实现用户注册登录、发帖回复、板块管理、关键词搜索及权限控制等典型论…

作者头像 李华
网站建设 2026/9/13 15:27:30

机械臂轨迹规划实战指南:从抖动到精准的工程落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 15:27:27

如何用 react-scan/lite 无头插桩获取 commit 与 render 事件流

如何用 react-scan/lite 无头插桩获取 commit 与 render 事件流 【免费下载链接】react-scan Scan and fix React performance issues 项目地址: https://gitcode.com/GitHub_Trending/re/react-scan 如果你需要在不引入 react-scan 工具栏、不渲染任何 UI 的前提下&…

作者头像 李华