使用 AWS CLI 的 apigatewayv2 get-authorizer 命令查询 HTTP API 授权器配置
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
导读
aws apigatewayv2 get-authorizer是 AWS CLI 中用于查询 API Gateway v2(HTTP API / WebSocket API)单个授权器(Authorizer)详细配置的命令。本文以 get-authorizer.rst 官方示例文档为骨架,完整演示命令的参数用法、输出字段含义,并对照本仓库的 service-2.json 服务模型,深入解析请求参数、响应结构、授权器类型(JWT / REQUEST)以及get-authorizers分页查询等配套能力。读完本文,你将能够熟练使用 CLI 查看 API 上任意授权器的完整配置,并理解底层 REST 调用与各字段的校验语义。
一、命令概览与适用场景
在 API Gateway v2 中,授权器(Authorizer)决定 API 请求在到达后端集成之前如何被鉴权。get-authorizer命令用于按 ID 获取某个 API 下单个授权器的当前配置快照,典型使用场景包括:
- 排查线上 API 的 JWT 鉴权配置是否与预期一致(如签发者 Issuer、受众 Audience 是否匹配);
- 在自动化脚本中读取授权器配置,与配置管理基线做差异比对;
- 在修改授权器(
update-authorizer)前后核对配置变更结果。
该命令的 API 语义在仓库服务模型中定义如下(service-2.json):
"GetAuthorizer": { "name": "GetAuthorizer", "http": { "method": "GET", "requestUri": "/v2/apis/{apiId}/authorizers/{authorizerId}", "responseCode": 200 }, ... "documentation": "<p>Gets an Authorizer.</p>" }也就是说,CLI 命令底层是对GET /v2/apis/{apiId}/authorizers/{authorizerId}的调用,两个路径参数即命令的两个必填参数。
二、命令语法与参数详解
官方示例(get-authorizer.rst)给出的完整命令如下:
aws apigatewayv2 get-authorizer \ --api-id a1b2c3d4 \ --authorizer-id a1b2c3该命令共两个必填参数,其定义可在 service-2.json 的GetAuthorizerRequest结构中查到:
| 参数 | CLI 选项 | 说明 | 位置 | 必填 |
|---|---|---|---|---|
ApiId | --api-id | API 标识符(创建 API 后返回的 ID) | URI 路径参数 | 是 |
AuthorizerId | --authorizer-id | 授权器标识符(创建授权器后返回的 ID) | URI 路径参数 | 是 |
从模型可以看到,两者在请求结构中都标记为"required",且location: "uri",因此缺少任意一个参数 CLI 都会直接报参数校验错误,不会发起网络请求。
--api-id可通过aws apigatewayv2 get-apis获取;--authorizer-id可通过 get-authorizers.rst 中演示的aws apigatewayv2 get-authorizers --api-id a1b2c3d4列出全部授权器后取得。示例中的a1b2c3d4、a1b2c3为文档使用的占位 ID,实际使用时请替换为真实值。
三、输出字段深度解读
官方示例的输出如下:
{ "AuthorizerId": "a1b2c3", "AuthorizerType": "JWT", "IdentitySource": [ "$request.header.Authorization" ], "JwtConfiguration": { "Audience": [ "123456abc" ], "Issuer": "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_abc123" }, "Name": "my-jwt-authorizer" }GetAuthorizerResponse的完整成员定义位于 service-2.json,其中所有可选字段都会在存在时返回,下表逐一说明其语义与约束:
| 字段 | 含义 | 约束 / 适用类型 |
|---|---|---|
AuthorizerId | 授权器唯一标识 | 只读,由 API Gateway 生成 |
AuthorizerType | 授权器类型 | 枚举值仅REQUEST与JWT(见 service-2.json),JWT仅支持 HTTP API |
Name | 授权器名称 | 长度 1–128 字符 |
IdentitySource | 授权身份来源表达式列表 | 对 JWT:单条表达式,指定从请求何处提取 Token,目前仅支持基于 Header 和 Query 参数的表达式,如$request.header.Authorization(见 IdentitySourceList) |
JwtConfiguration.Audience | JWT 受众列表 | 合法的 JWT 其aud声明必须匹配列表中至少一项(RFC 7519 §4.1.3),仅 HTTP API 支持 |
JwtConfiguration.Issuer | 令牌签发者基域 | 例如 Amazon Cognito 用户池格式https://cognito-idp.<region>.amazonaws.com/<userPoolId>,JWT 类型必填(见 JWTConfiguration) |
AuthorizerUri | 授权器 URI | REQUEST 类型(Lambda 授权器)返回,形如arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/<FunctionARN>/invocations,仅 REQUEST 类型支持 |
AuthorizerCredentialsArn | 调用授权器所用的 IAM 角色 ARN | 仅 REQUEST 类型支持;不指定时使用基于资源的权限 |
AuthorizerPayloadFormatVersion | Lambda 授权器载荷格式版本 | 取值1.0或2.0,仅 HTTP API Lambda 授权器 |
AuthorizerResultTtlInSeconds | 授权结果缓存 TTL | 0–3600 秒;为 0 表示禁用缓存,仅 HTTP API Lambda 授权器 |
EnableSimpleResponses | 是否启用简单响应格式 | 启用后 Lambda 授权器可返回布尔值替代 IAM 策略,仅 HTTP API |
IdentityValidationExpression | 身份校验表达式 | 不适用于 REQUEST 授权器 |
值得注意:上例输出中 JWT 授权器返回了AuthorizerId、AuthorizerType、IdentitySource、JwtConfiguration、Name五个字段;如果查询的是 REQUEST(Lambda)授权器,输出中还会出现AuthorizerUri、AuthorizerPayloadFormatVersion、AuthorizerResultTtlInSeconds等字段——CLI 直接返回服务端完整配置,方便在脚本中用--query提取字段做自动化判断,例如:
aws apigatewayv2 get-authorizer \ --api-id a1b2c3d4 \ --authorizer-id a1b2c3 \ --query "JwtConfiguration.Issuer" \ --output text四、配套命令:授权器的完整生命周期
get-authorizer是授权器查询链中的一环,配合仓库中同目录的示例文档可形成完整的操作闭环:
4.1 创建 JWT 授权器(create-authorizer)
参考 create-authorizer.rst,创建示例中查询到的同名授权器:
aws apigatewayv2 create-authorizer \ --name my-jwt-authorizer \ --api-id a1b2c3d4 \ --authorizer-type JWT \ --identity-source '$request.header.Authorization' \ --jwt-configuration Audience=123456abc,Issuer=https://cognito-idp.us-west-2.amazonaws.com/us-west-2_abc123注意--identity-source中的$request.header.Authorization需用单引号包裹,防止 Shell 把$request当变量展开;--jwt-configuration使用 CLI 的逗号分隔键值对语法。创建成功后会返回AuthorizerId,该 ID 即后续get-authorizer/update-authorizer/delete-authorizer的参数。
4.2 列出全部授权器(get-authorizers)
参考 get-authorizers.rst:
aws apigatewayv2 get-authorizers \ --api-id a1b2c3d4输出为Items数组,包含该 API 下每个授权器的完整配置(示例中返回了两个 JWT 授权器)。该操作支持分页:请求结构(GetAuthorizersRequest)包含MaxResults与NextToken两个查询参数,响应(GetAuthorizersResponse)在Items之外返回NextToken用于取下一页。仓库的 paginators-1.json 中为GetAuthorizers配置了分页映射:
"GetAuthorizers": { "input_token": "NextToken", "limit_key": "MaxResults", "output_token": "NextToken", "result_key": "Items" }这意味着 CLI 的get-authorizers默认支持分页参数--max-items、--page-size与--starting-token,由 botocore 的 Paginator 自动逐页拉取,无需手写翻页逻辑。
4.3 更新授权器(update-authorizer)
参考 update-authorizer.rst,修改已有授权器的身份来源:
aws apigatewayv2 update-authorizer \ --api-id a1b2c3d4 \ --authorizer-id a1b2c3 \ --identity-source '$request.header.Authorization'4.4 删除授权器(delete-authorizer)
参考 delete-authorizer.rst,删除授权器(命令成功时不产生输出,可通过退出码或--no-cli-pager观察结果):
aws apigatewayv2 delete-authorizer \ --api-id a1b2c3d4 \ --authorizer-id a1b2c3五、错误处理与注意事项
GetAuthorizer操作在 service-2.json 中声明了两类错误,实际使用get-authorizer时应重点关注:
- NotFoundException(404):
api-id或authorizer-id不存在,或该授权器不属于所指定的 API。排查时可先用get-authorizers确认 ID 拼写与所属 API。 - TooManyRequestsException(429):单位时间内请求数超过账户/API 限额,CLI 会按 botocore 的默认重试策略自动退避重试,持续触发时需降低调用频率。
其他注意事项:
- 命令的
--api-id与--authorizer-id均为必填且无默认值;--authorizer-id属于 URI 路径参数,即使授权器被删除后再次查询,也会因资源不存在而返回NotFoundException。 - 示例中的 ID、Audience、Issuer 均为文档占位值,直接复制运行会得到
NotFoundException,请替换为实际资源。 - 若需在脚本中无交互使用,可配合
--output json(默认)或--output text解析字段,避免人工阅读。
六、小结
本文以 get-authorizer.rst 为核心,完整覆盖了aws apigatewayv2 get-authorizer的参数用法、输出字段语义、配套的创建/列表/更新/删除命令,并从 service-2.json 与 paginators-1.json 中还原了底层GET /v2/apis/{apiId}/authorizers/{authorizerId}调用、请求/响应结构约束以及get-authorizers的分页能力。掌握这些内容后,你可以把授权器配置查询直接融入 CI/CD 审计与自动化巡检流程,快速定位 JWT 签发者、受众不匹配等常见鉴权问题。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考