AWS CLI accessanalyzer get-analyzed-resource 命令详解:查询被分析资源的访问详情
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
本篇指南聚焦 AWS CLI 中accessanalyzer get-analyzed-resource命令的完整用法。通过该命令,你可以基于分析器(Analyzer)的 ARN 与目标资源的 ARN,精确查询 IAM Access Analyzer 对该资源的分析结论(如是否公开、资源所有者、最近分析时间等)。读完本文,你将掌握该命令的参数构成、输出字段语义、底层请求实现以及常见错误的排查方法。
命令用途与适用场景
get-analyzed-resource用于检索一个已被分析器分析过的资源的信息。它回答的核心问题是:这个资源(如 S3 存储桶、IAM 角色)在外部访问分析器中记录了哪些访问特征?
典型使用场景包括:
- 审计某个 S3 存储桶是否被分析器判定为公开(
isPublic字段); - 获取资源的 ARN、所属账号与资源类型,用于后续与
list-findings、get-finding等命令联动; - 校验
start-resource-scan发起的重新扫描是否已完成(通过对比analyzedAt时间戳)。
适用范围限制:根据 service-2.json 中的操作说明,此操作仅支持外部访问分析器(external access analyzers),不适用于 unused-access 或 internal-access 类型的分析器。
命令语法与参数详解
命令的基础语法为:
aws accessanalyzer get-analyzed-resource \ --analyzer-arn <value> \ --resource-arn <value>该命令包含两个必填参数,与 service-2.json 中GetAnalyzedResourceRequest的required列表一致:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
--analyzer-arn | string | 是 | 分析器的 ARN,用于指定从哪个分析器获取信息。对应模型中的AnalyzerArn形状,模式为[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:analyzer/.{1,255},即 ARN 末尾必须带analyzer/前缀及 1~255 个字符的分析器名称。 |
--resource-arn | string | 是 | 目标资源的 ARN。对应ResourceArn形状,模式为arn:[^:]*:[^:]*:[^:]*:[^:]*:.*,即标准六段式 ARN。 |
参数如何传送到服务端
从 service-2.json 的操作定义可以看到,GetAnalyzedResource是一个只读(readonly)GET 操作:
- HTTP 方法:
GET - 请求路径:
/analyzed-resource - 两个参数均通过
querystring(查询字符串)传递,locationName分别为analyzerArn与resourceArn
这意味着当你执行上述命令时,实际发出的 HTTPS 请求形如:
GET /analyzed-resource?analyzerArn=<...>&resourceArn=<...> HTTP/1.1 Host: access-analyzer.us-west-2.amazonaws.com了解这一点有助于你通过 VPC Flow Logs、API Gateway 日志或抓包工具核对命令是否按预期触发了请求。
完整示例与输出解读
以下示例直接继承自 get-analyzed-resource.rst,用于检索账号中已被分析的一个资源:
aws accessanalyzer get-analyzed-resource \ --analyzer-arn arn:aws:access-analyzer:us-west-2:111122223333:analyzer/ConsoleAnalyzer-account \ --resource-arn arn:aws:s3:::amzn-s3-demo-bucket输出示例:
{ "resource": { "analyzedAt": "2024-02-15T18:01:53.002000+00:00", "isPublic": false, "resourceArn": "arn:aws:s3:::amzn-s3-demo-bucket", "resourceOwnerAccount": "111122223333", "resourceType": "AWS::S3::Bucket" } }输出字段逐项说明
响应中的resource字段对应模型中的AnalyzedResource结构(定义见 service-2.json),其中以下字段为必返字段(required列表):resourceArn、resourceType、createdAt、analyzedAt、updatedAt、isPublic、resourceOwnerAccount。
| 字段 | 类型 | 语义 |
|---|---|---|
resourceArn | string | 被分析资源的 ARN。 |
resourceType | string | 被分析资源的类型,例如AWS::S3::Bucket、AWS::IAM::Role、AWS::SNS::Topic。 |
createdAt | Timestamp | 该资源对应 finding(发现项)被创建的时间。 |
analyzedAt | Timestamp | 资源最近一次被分析的时间。可与start-resource-scan触发的时间比对,判断扫描是否已生效。 |
updatedAt | Timestamp | 该 finding 最近一次被更新的时间。 |
isPublic | boolean | 生成该 finding 的策略是否向资源授予了公开访问权限。false表示分析器未发现公开访问路径。 |
resourceOwnerAccount | string | 拥有该资源的 AWS 账号 ID。 |
actions | list | (可选返回)外部主体(external principal)被策略授予的操作列表。 |
sharedVia | list | (可选返回)访问的授予方式,仅对 S3 存储桶的 finding 填充,例如存储桶策略、访问控制列表等。 |
status | string | 该 finding 的当前状态(ACTIVE/ARCHIVED/RESOLVED等)。 |
error | string | 分析资源时发生错误时的错误消息,未出错时不返回。 |
上面的示例输出未展示createdAt、updatedAt、actions、sharedVia、status、error等可选字段——这是因为分析器未发现公开访问路径时,这些字段往往不出现或为空。若你的资源存在公开访问问题,输出会包含isPublic: true及对应的actions、sharedVia明细,可直接作为修复策略的依据。
与相关命令的联动:从创建分析器到查询资源
get-analyzed-resource处于 Access Analyzer 工作流的"查询"环节,通常与以下命令配合使用(示例文档均位于 awscli/examples/accessanalyzer/):
- 创建分析器:create-analyzer.rst 展示如何创建分析器。创建完成后,分析器会持续分析区域内的受支持资源。
- 列出已分析资源:list-analyzed-resources.rst 展示如何按
--analyzer-arn与可选的--resource-type列出该分析器下所有已分析的资源摘要(仅含resourceArn、resourceOwnerAccount、resourceType三项)。你可以先执行它拿到目标资源的 ARN,再用get-analyzed-resource获取完整详情。 - 手动触发重扫:start-resource-scan.rst 展示如何对指定资源发起扫描。扫描完成后,再执行
get-analyzed-resource即可读取最新分析结果。
一个典型的排查链路如下:
# 1. 列出分析器下所有已分析的 S3 存储桶 aws accessanalyzer list-analyzed-resources \ --analyzer-arn arn:aws:access-analyzer:us-west-2:111122223333:analyzer/ConsoleAnalyzer-account \ --resource-type AWS::S3::Bucket # 2. 获取指定存储桶的完整分析详情 aws accessanalyzer get-analyzed-resource \ --analyzer-arn arn:aws:access-analyzer:us-west-2:111122223333:analyzer/ConsoleAnalyzer-account \ --resource-arn arn:aws:s3:::amzn-s3-demo-bucket错误处理与常见异常
根据 service-2.json,该操作可能返回以下错误:
| 错误码 | 含义 | 常见触发原因与排查思路 |
|---|---|---|
ResourceNotFoundException | 资源未找到 | 指定的分析器 ARN 或资源 ARN 不存在;或者该资源尚未被该分析器分析过。可先运行list-analyzed-resources确认资源确实在已分析列表中。 |
ValidationException | 参数校验失败 | ARN 格式不符合模式约束(如分析器 ARN 缺少analyzer/段)、参数缺失等。对照上文参数表核对 ARN。 |
AccessDeniedException | 权限不足 | 当前 IAM 身份缺少access-analyzer:GetAnalyzedResource权限,或无权访问该分析器。 |
ThrottlingException | 请求被限流 | 请求频率过高,建议使用指数退避重试。 |
InternalServerException | 服务端内部错误 | 服务端临时故障,可稍后重试。 |
由于该操作是只读 GET 请求,执行它不会修改任何资源或分析器状态,可以放心在审计脚本中高频调用。
小结
get-analyzed-resource是 IAM Access Analyzer 运维与安全审计中查看单资源分析结论的入口命令。掌握它的两个必填参数(--analyzer-arn、--resource-arn)、输出中AnalyzedResource各字段的语义,以及它仅适用于外部访问分析器的限制,即可在 AWS CLI 侧快速完成"资源是否公开、由谁拥有、何时分析"等核心判断。底层实现细节(GET/analyzed-resource、querystring 传参、readonly 语义)可直接在 service-2.json 中交叉验证,更多同系列命令示例可参考 awscli/examples/accessanalyzer/ 目录。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考