使用 Amazon Bedrock AgentCore Identity 通过私钥 JWT 进行身份验证
Amazon Bedrock AgentCore Identity 现在支持私钥 JWT 客户端身份验证,使代理能够使用签名的 JWT 而不是共享密钥向身份提供商进行身份验证。私钥安全地存储在 AWS KMS 中,公钥注册到身份提供商。本文解释了工作流程、支持的授权流程(M2M、OBO、用户委托),并提供了详细的配置步骤,包括创建 KMS 签名密钥、注册公钥以及设置凭证提供程序。还展示了用于审计的 CloudTrail 事件示例。
Amazon Bedrock AgentCore Identity 现在支持私钥 JWT 客户端身份验证,为您的代理提供了一种更安全的身份验证方式。与传统的使用共享客户端密钥不同,私钥 JWT 通过使用 JSON Web 令牌(JWT)客户端断言来让您的代理对下游身份提供商的令牌端点进行身份验证。您可以在身份提供商处注册一个公钥,而相应的私钥则安全地保存在 AWS Key Management Service(AWS KMS)中。当 AgentCore Identity 需要进行身份验证时,它会使用 AWS KMS 对断言进行签名,并将签名的断言发送给身份提供商,身份提供商则使用您注册的公钥进行验证。
工作原理
以一个客户支持代理为例,该代理需要从受身份提供商保护的内部订单 API 中读取客户的订单历史记录。代理调用 AgentCore Identity 的 GetResourceOauth2Token 来请求订单 API 的令牌。AgentCore Identity 从您的凭证提供程序中读取客户端 ID、KMS 密钥 ARN 和签名算法,构建一个短暂的 JWT 客户端断言,并使用您配置的签名算法(RS256、PS256 或 ES256)调用 kms:Sign。AWS KMS 签名断言并返回签名,私钥从不离开 KMS。接着,AgentCore Identity 将签名的断言发布到身份提供商的令牌端点,携带 grant_type=client_credentials 和 client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer。身份提供商使用您注册的公钥验证签名,并返回一个访问令牌给 AgentCore Identity,然后将其传递给您的代理。最后,代理使用该访问令牌调用订单 API 并获取订单历史。
支持的授权流程
私钥 JWT 认证支持三种授权流程:机器对机器(M2M)、代理(OBO)和用户委托访问。M2M 流程中代理作为自身行动,没有人类用户参与,使用 client_credentials 授权。OBO 流程中代理代表特定用户,使用该用户的现有令牌调用下游 API,AgentCore Identity 使用客户端断言验证自身身份,同时交换用户令牌。用户委托访问流程中,用户通过交互式登录/许可(授权码流程)批准代理的操作,然后代理获取代表用户的令牌。
前提条件
您需要一个 AWS 账户,可以对 KMS、AgentCore 和 CloudTrail 进行管理控制台访问。还需要身份提供商上的租户,用于注册应用程序的公钥。确保身份提供商要求的签名算法与 AWS KMS 和 AgentCore Identity 支持的算法一致。
入门指南
首先,创建非对称 KMS 密钥。在 KMS 控制台中,选择“客户管理密钥”并创建密钥。密钥类型选择非对称,密钥用法选择签名和验证,密钥规格选择与签名算法兼容的类型,例如 ECC_NIST_P256 搭配 ES256。配置密钥策略,允许 AgentCore Identity 使用该密钥,通过 kms:ViaService 条件限制只能通过 AgentCore Identity 使用。然后导出公钥并注册到身份提供商。接下来,在 AgentCore 控制台的 Identity 部分,添加 OAuth 客户端,选择私钥 JWT 作为客户端认证方法,提供发现 URL、客户端 ID、KMS 密钥 ARN 和签名算法。可选地,添加头部和有效载荷声明,然后创建客户端。最后,审核 CloudTrail 事件,例如 GetWorkloadAccessToken 和 GetResourceOauth2Token,以及来自 KMS 的 Sign 事件,以确认工作正常。
CloudTrail 日志示例
当代理使用凭证提供程序获取令牌时,操作会被记录在 AWS CloudTrail 中。您可以查看诸如 GetWorkloadAccessToken(获取工作负载身份令牌)和 GetResourceOauth2Token(请求下游资源访问令牌)等事件。Sign 事件显示 AgentCore Identity 调用 kms:Sign 对 JWT 客户端断言进行签名,确认私钥 JWT 身份验证正在工作。这些日志有助于审计和监控代理的访问。