View a markdown version of this page

私有金鑰 JWT 用戶端身分驗證 - Amazon Bedrock AgentCore

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

私有金鑰 JWT 用戶端身分驗證

透過私有金鑰 JWT,AgentCore Identity 會根據 RFC 7523 第 2.2 節,使用已簽署的 JWT 用戶端聲明來驗證下游身分提供者的字符端點,而不是用戶端秘密。私有金鑰永遠不會離開 AWS Key Management Service (KMS)。AgentCore Identity 透過 簽署每個聲明kms:Sign。您的身分提供者擁有用於驗證用戶端聲明並傳回存取權杖的對應公有金鑰。

此方法消除 AgentCore Identity 與您的授權伺服器之間的共用秘密,在您的完全控制下將其取代為非對稱金鑰對。

私有金鑰 JWT 用戶端身分驗證的運作方式

  • 您可以使用 clientId、非對稱 KMS 簽署金鑰的 ARN,以及身分提供者進行私有金鑰 JWT 用戶端身分驗證所需的相同簽署演算法,來設定自訂 OAuth 2.0 登入資料提供者。

  • 當 AgentCore Identity machine-to-machine(M2M)、on-behalf-of(OBO) 或授權碼流程的權杖時,它會建立短期 JWT 用戶端聲明。聲明包含您的身分提供者所需的宣告。

  • AgentCore Identity 接著會使用 AWS KMS 搭配提供的非對稱簽署金鑰 ARN 來簽署聲明。

  • 簽署的聲明會與 client_assertion一起傳送至權杖端點client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer。

  • 授權伺服器會根據您註冊的公有金鑰驗證聲明,並發出請求的權杖。

私有金鑰 JWT 可在自訂 OAuth 2.0 登入資料提供者 (CustomOauth2) 上使用。它適用於所有授權流程:用戶端憑證 (M2M)、具有 JWT 授權 (OBO) 的字符交換,以及授權碼 (使用者委派存取)。

在 AgentCore Identity 中設定私有金鑰 JWT

若要成功設定登入資料提供者,請先驗證您的身分提供者對私有金鑰 JWT 用戶端身分驗證的要求:簽署演算法、公有金鑰和必要的 JWT 用戶端聲明宣告。

簽署演算法

識別身分提供者進行私有金鑰 JWT 用戶端身分驗證所需的簽署演算法。這對應於建立或更新 OAuth 2.0 自訂登入資料提供者privateKeyJwtConfig時 中的 signingAlgorithm 欄位。

  • 當您在 AgentCore Identity 中建立登入資料提供者時,請指定與簽署演算法相同的演算法。

  • 此簽署演算法也會用來選擇可接受的 KMS 金鑰規格,詳述如下。

AWS KMS 非對稱金鑰組態

判斷您的身分提供者如何管理簽署金鑰:

  • 如果您的身分提供者接受上傳的公有金鑰,請建立使用SIGN_VERIFY量的非對稱 KMS 金鑰對。選擇支援簽署演算法的金鑰規格 (請參閱下表)。金鑰必須與登入資料提供者位於相同的區域。在 AgentCore Identity 上建立登入資料提供者時指定 KMS 金鑰 ARN。

    建立之後,請使用 kms:GetPublicKey API 來產生對應的公有金鑰。 kms:GetPublicKey會傳回 DER 編碼的 X.509 公有金鑰或 SPKI。有些身分提供者需要這些特定格式的公有金鑰。例如,Microsoft Entra 需要 X.509 憑證物件,Okta 需要 JSON Web 金鑰,而 Ping Identity 同時支援兩者。將公有金鑰轉換為您的身分提供者所需的格式,並將其上傳至您的身分提供者。

  • 如果您的身分提供者建立金鑰對並提供私有金鑰材料,請將其匯入使用SIGN_VERIFY量的 KMS 金鑰。選擇與簽署演算法相容的金鑰規格 (請參閱下表)。如需說明,請參閱匯入 AWS KMS 金鑰的金鑰材料。在 AgentCore Identity 上建立登入資料提供者時指定 KMS 金鑰 ARN。

signingAlgorithm 您選擇的 會決定接受哪些 KMS 金鑰規格:

簽署演算法 已接受的 KMS 金鑰規格

RS256

RSA_2048, RSA_3072, RSA_4096

PS256

RSA_2048, RSA_3072, RSA_4096

ES256

ECC_NIST_P256

AWS KMS 金鑰政策

若要使用私有金鑰 JWT 的非對稱 KMS 簽署金鑰,您的金鑰必須允許 AgentCore Identity 代表您執行簽署和金鑰描述操作。將下列許可附加至 KMS 金鑰的金鑰政策。

kms:ViaService 條件可確保只有在請求是透過 Amazon Bedrock AgentCore Identity 發出時,才能使用金鑰。當金鑰政策將 kms:DescribeKey和 授予呼叫身分時kms:Sign,支援跨帳戶金鑰。將 Principal ARN 取代為將呼叫 AgentCore Identity 的帳戶根 ARN。

{ "Id": "identity-service-cmk-policy", "Version": "2012-10-17", "Statement": [ { "Sid": "BedrockAgentCoreIdentityPrivateKeyJwtAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "kms:Sign", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" }, "StringLike": { "kms:ViaService": "bedrock-agentcore-identity.*.amazonaws.com" } } } ] }

不支援跨區域金鑰。KMS 金鑰必須與登入資料提供者位於相同的 AWS 區域。

JWT 用戶端聲明中的其他宣告

檢查您的身分提供者是否需要 JWT 用戶端聲明標頭中的其他宣告,還是私有金鑰 JWT 用戶端身分驗證的承載。若是如此,請將它們包含在 中的 additionalHeaderClaims和 additionalPayloadClaims 欄位中privateKeyJwtConfig。

  • 對於 additionalHeaderClaims,我們不允許宣告alg或 typ。

  • 對於 additionalPayloadClaims,我們不允許宣告 iss、sub、jti、iat、 exp或 nbf。我們將允許覆寫aud宣告 (預設為身分提供者的字符端點)。

使用私有金鑰 JWT 身分驗證,以自訂提供者設定 OAuth 用戶端

若要使用私有金鑰 JWT 用戶端身分驗證設定登入資料提供者,請參閱 AWS 主控台上的使用自訂提供者新增 OAuth 用戶端。您也可以使用 CLI AWS 設定登入資料提供者。

CLI 範例:Microsoft 登入資料提供者的私有金鑰 JWT

aws bedrock-agentcore-control create-oauth2-credential-provider \ --cli-input-json '{ "name": "microsoft-private-key-jwt", "credentialProviderVendor": "CustomOauth2", "oauth2ProviderConfigInput": { "customOauth2ProviderConfig": { "oauthDiscovery": { "discoveryUrl": "https://login.microsoftonline.com/your-tenant-id/v2.0/.well-known/openid-configuration" }, "clientId": "your-client-id", "clientAuthenticationMethod": "PRIVATE_KEY_JWT", "privateKeyJwtConfig": { "privateKeySource": { "kmsKeySource": { "kmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/your-key-id" } }, "signingAlgorithm": "PS256", "additionalHeaderClaims": { "x5t#S256": "Base64url-encoded SHA-256 thumbprint of the DER encoding of the X.509 public key certificate uploaded to Microsoft Entra" }, "additionalPayloadClaims": { "aud": "https://login.microsoftonline.com/your-tenant-id/oauth2/v2.0/token" } } } } }'

CLI 範例:具有On-behalf-of私有金鑰 JWT

aws bedrock-agentcore-control create-oauth2-credential-provider \ --cli-input-json '{ "name": "okta-private-key-jwt", "credentialProviderVendor": "CustomOauth2", "oauth2ProviderConfigInput": { "customOauth2ProviderConfig": { "oauthDiscovery": { "discoveryUrl": "https://your-app.okta.com/oauth2/default/.well-known/openid-configuration" }, "clientId": "your-client-id", "clientAuthenticationMethod": "PRIVATE_KEY_JWT", "privateKeyJwtConfig": { "privateKeySource": { "kmsKeySource": { "kmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/your-key-id" } }, "signingAlgorithm": "RS256" }, "onBehalfOfTokenExchangeConfig": { "grantType": "TOKEN_EXCHANGE", "tokenExchangeGrantTypeConfig": { "actorTokenContent": "NONE" } } } } }'

使用私有金鑰 JWT 身分驗證搭配自訂提供者的 OAuth 用戶端參數

參數 必要 描述

clientAuthenticationMethod

是

設定為 PRIVATE_KEY_JWT。

clientId

是

在您的身分提供者註冊的用戶端識別符。

privateKeyJwtConfig.privateKeySource.kmsKeySource.kmsKeyArn

是

非對稱 KMS 簽署金鑰的完整 ARN。必須與登入資料提供者位於相同的區域。支援跨帳戶。

privateKeyJwtConfig.signingAlgorithm

是

簽署 JWT 的演算法。其中之一:RS256、PS256、ES256。

privateKeyJwtConfig.additionalHeaderClaims

否

其他 JWT 標頭宣告 (映射,最多 10 個項目)。使用此項目來傳遞與您的身分提供者註冊的金鑰相符x5t#S256的 kid或 。無法覆寫 alg或 typ。

privateKeyJwtConfig.additionalPayloadClaims

否

其他 JWT 承載宣告 (映射,最多 10 個項目)。無法覆寫 iss、sub、jti、iat、 exp或 nbf。使用此選項來新增提供者特定的宣告或覆寫 aud(預設權杖端點)。

clientSecret

非必要

使用私有金鑰 JWT 時省略 。