選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

搭配身分提供者使用 Amazon Verified Permissions

焦點模式
搭配身分提供者使用 Amazon Verified Permissions - Amazon Verified Permissions

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

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

身分來源是 Amazon Verified Permissions 中外部身分提供者 (IdP) 的表示法。身分來源提供來自使用與您政策存放區具有信任關係的 IdP 驗證的使用者的資訊。當您的應用程式從身分來源使用字符提出授權請求時,您的政策存放區可以對使用者屬性和存取許可做出授權決策。您可以新增 Amazon Cognito 使用者集區或自訂 OpenID Connect (OIDC) IdP 做為您的身分來源。

您可以搭配 Verified Permissions 使用 OpenID Connect (OIDC) 身分提供者 (IdPs)。您的應用程式可以使用 OIDC 相容身分提供者產生的 JSON Web 字符 (JWTs) 產生授權請求。權杖中的使用者身分會對應至主體 ID。使用 ID 權杖時,已驗證的許可會將屬性宣告對應至主體屬性。使用存取字符,這些宣告會映射到內容。使用這兩種字符類型,您可以將類似 的宣告對應groups至委託人群組,並建置評估角色型存取控制 (RBAC) 的政策。

注意

Verified Permissions 根據來自 IdP 權杖的資訊做出授權決策,但不會以任何方式直接與 IdP 互動。

如需使用 Amazon Cognito 使用者集區或 OIDC 身分提供者為 Amazon API Gateway REST APIs 建置授權邏輯step-by-step演練,請參閱使用 Amazon Verified Permissions 搭配 Amazon Cognito 授權 API Gateway APIs,或在安全部落格上自攜身分提供者。 Amazon Cognito AWS

使用 Amazon Cognito 身分來源

已驗證的許可與 Amazon Cognito 使用者集區密切相關。Amazon Cognito JWTs具有可預測的結構。Verified Permissions 會辨識此結構,並從其中包含的資訊中取得最大利益。例如,您可以使用 ID 字符或存取字符來實作角色型存取控制 (RBAC) 授權模型。

新的 Amazon Cognito 使用者集區身分來源需要下列資訊:

  • AWS 區域。

  • 使用者集區 ID。

  • 您要與身分來源建立關聯的主體實體類型,例如 MyCorp::User

  • 您要與身分來源建立關聯的主體群組實體類型,例如 MyCorp::UserGroup

  • 使用者集區的用戶端 IDs,您想要授權 向政策存放區發出請求。

由於 Verified Permissions 僅適用於相同 中的 Amazon Cognito 使用者集區 AWS 帳戶,因此您無法在另一個帳戶中指定身分來源。Verified Permissions 會將實體字首 - 在對使用者集區主體採取行動的政策中必須參考的身分來源識別符 - 設定為使用者集區的 ID,例如 us-west-2_EXAMPLE。在此情況下,您會參考該使用者集區中的使用者,並將 ID a1b2c3d4-5678-90ab-cdef-EXAMPLE22222us-west-2_EXAMPLE|a1b2c3d4-5678-90ab-cdef-EXAMPLE22222

使用者集區字符宣告可以包含屬性、範圍、群組、用戶端 IDs和自訂資料。Amazon Cognito JWTs能夠包含各種資訊,有助於在 Verified Permissions 中做出授權決策。其中包含:

  1. 具有cognito:字首的使用者名稱和群組宣告

  2. 使用 自訂使用者屬性 custom: prefix

  3. 在執行時間新增的自訂宣告

  4. OIDC 標準宣告,例如 subemail

我們會詳細說明這些宣告,以及如何在 的 Verified Permissions 政策中管理這些宣告將身分提供者字符映射至結構描述

重要

雖然您可以在過期前撤銷 Amazon Cognito 權杖,但 JWTs被視為無狀態資源,這些資源會與簽章和有效性獨立。符合 JSON Web 權杖 RFC 7519 的服務預期會遠端驗證權杖,而且不需要向發行者驗證權杖。這表示 Verified Permissions 可以根據已撤銷的字符授予存取權,或為稍後刪除的使用者授予存取權。若要降低此風險,我們建議您建立最短有效期間的權杖,並在想要移除繼續使用者工作階段的授權時撤銷重新整理權杖。如需詳細資訊,請參閱使用字符撤銷結束使用者工作階段

下列範例示範如何建立政策,以參考與委託人相關聯的一些 Amazon Cognito 使用者集區宣告。

permit( principal, action, resource == ExampleCo::Photo::"VacationPhoto94.jpg" ) when { principal["cognito:username"]) == "alice" && principal["custom:department"]) == "Finance" };

下列範例示範如何建立 政策,以參考 Cognito 使用者集區中的使用者主體。請注意,主體 ID 採用 的形式"<userpool-id>|<sub>"

permit( principal == ExampleCo::User::"us-east-1_example|a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", action, resource == ExampleCo::Photo::"VacationPhoto94.jpg" );

Verified Permissions 中使用者集區身分來源的 Cedar 政策針對包含英數字元和底線 () 以外的字元的宣告名稱使用特殊語法_。這包括包含:字元的使用者集區字首宣告,例如 cognito:usernamecustom:department。若要撰寫參考 cognito:usernamecustom:department宣告的政策條件principal["custom:department"],請分別將它們寫入 principal["cognito:username"]和 。

注意

如果權杖包含具有 cognito:custom:字首的宣告,以及具有常值 cognito或 的宣告名稱customIsAuthorizedWithToken 的授權請求將使用 失敗ValidationException

如需映射宣告的詳細資訊,請參閱將 ID 字符映射至結構描述。如需 Amazon Cognito 使用者授權的詳細資訊,請參閱《Amazon Amazon Cognito開發人員指南》中的使用 Amazon 驗證許可授權

使用 OIDC 身分來源

您也可以將任何合規的 OpenID Connect (OIDC) IdP 設定為政策存放區的身分來源。OIDC 提供者類似於 Amazon Cognito 使用者集區:它們會產生 JWTs作為身分驗證產品。若要新增 OIDC 提供者,您必須提供發行者 URL

新的 OIDC 身分來源需要下列資訊:

  • 發行者 URL。驗證的許可必須能夠在此 URL 上探索.well-known/openid-configuration端點。

  • 不包含萬用字元的 CNAME 記錄。例如, a.example.com 無法映射到 *.example.net。相反地, *.example.com 無法映射到 a.example.net

  • 您想要在授權請求中使用的字符類型。在這種情況下,您選擇了身分字符

  • 您要與身分來源建立關聯的使用者實體類型,例如 MyCorp::User

  • 您要與身分來源建立關聯的群組實體類型,例如 MyCorp::UserGroup

  • ID 字符範例,或 ID 字符中宣告的定義。

  • 您要套用至使用者和群組實體 IDs字首。在 CLI 和 API 中,您可以選擇此字首。在您使用 API Gateway 設定和身分提供者引導式設定選項建立的政策存放區中,驗證許可會指派發行者名稱減 的字首https://,例如 MyCorp::User::"auth.example.com|a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"

如需使用 API 操作來授權來自 OIDC 來源請求的詳細資訊,請參閱 授權可用的 API 操作

以下範例示範如何建立政策,允許會計部門員工存取年底報告、進行機密分類,而且不在衛星辦公室。已驗證的許可會從委託人的 ID 權杖中的宣告衍生這些屬性。

請注意,在主體中參考群組時,您必須使用 in 運算子才能正確評估政策。

permit( principal in MyCorp::UserGroup::"MyOIDCProvider|Accounting", action, resource in MyCorp::Folder::"YearEnd2024" ) when { principal.jobClassification == "Confidential" && !(principal.location like "SatelliteOffice*") };

用戶端和對象驗證

當您將身分來源新增至政策存放區時,已驗證許可具有組態選項,可驗證 ID 和存取權杖是否如預期般使用。此驗證會在處理 IsAuthorizedWithTokenBatchIsAuthorizedWithToken API 請求時發生。ID 和存取字符,以及 Amazon Cognito 和 OIDC 身分來源的行為有所不同。使用 Amazon Cognito 使用者集區提供者,驗證許可可以驗證 ID 和存取權杖中的用戶端 ID。使用 OIDC 提供者時,已驗證許可可以在 ID 字符中驗證用戶端 ID,並在存取字符中驗證對象。

用戶端 ID 是與您的應用程式使用的身分提供者執行個體相關聯的識別符,例如 1example23456789對象是與存取權杖的預期相依方或目的地相關聯的 URL 路徑,例如 https://mytoken.example.com。使用存取權杖時,aud宣告一律與對象相關聯。

Verified Permissions 會執行身分來源對象和用戶端驗證,如下所示:

Amazon Cognito

Amazon Cognito ID 權杖具有包含應用程式用戶端 ID 的aud宣告。存取權杖的client_id宣告也包含應用程式用戶端 ID。

當您在身分來源中輸入一或多個用戶端應用程式驗證值時,驗證許可會將此應用程式用戶端 IDs 清單與 ID 字符aud宣告或存取字符client_id宣告進行比較。Verified Permissions 不會驗證 Amazon Cognito 身分來源的相依對象 URL。

OIDC

OIDC ID 字符具有包含用戶端 IDs 的aud宣告,例如 1example23456789

OIDC Access 字符具有包含字符受眾 URL 的aud宣告,例如 https://myapplication.example.com,以及包含用戶端 IDs的client_id宣告,例如 1example23456789

設定您的政策存放區時,請輸入一或多個值,以供您的政策存放區用來驗證權杖的對象之對象的對象驗證

  • ID 字符 – Verified Permissions 透過檢查aud宣告中至少有一個用戶端 IDs成員符合對象驗證值來驗證用戶端 ID。

  • 存取權杖 – Verified Permissions 透過檢查aud宣告中的 URL 是否符合對象驗證值來驗證對象。如果不存在aud宣告,可以使用 cidclient_id宣告來驗證對象。請洽詢您的身分提供者,了解正確的受眾聲明和格式。

Amazon Cognito ID 權杖具有包含應用程式用戶端 ID 的aud宣告。存取權杖的client_id宣告也包含應用程式用戶端 ID。

當您在身分來源中輸入一或多個用戶端應用程式驗證值時,驗證許可會將此應用程式用戶端 IDs 清單與 ID 字符aud宣告或存取字符client_id宣告進行比較。Verified Permissions 不會驗證 Amazon Cognito 身分來源的相依對象 URL。

JWTs的用戶端授權

您可能想要在應用程式中處理 JSON Web 字符,並將其宣告傳遞給驗證許可,而無需使用政策存放區身分來源。您可以從 JSON Web 權杖 (JWT) 擷取實體屬性,並將其剖析為驗證許可。

此範例示範如何使用 JWT.1 從應用程式呼叫 Verified Permissions。

async function authorizeUsingJwtToken(jwtToken) { const payload = await verifier.verify(jwtToken); let principalEntity = { entityType: "PhotoFlash::User", // the application needs to fill in the relevant user type entityId: payload["sub"], // the application need to use the claim that represents the user-id }; let resourceEntity = { entityType: "PhotoFlash::Photo", //the application needs to fill in the relevant resource type entityId: "jane_photo_123.jpg", // the application needs to fill in the relevant resource id }; let action = { actionType: "PhotoFlash::Action", //the application needs to fill in the relevant action id actionId: "GetPhoto", //the application needs to fill in the relevant action type }; let entities = { entityList: [], }; entities.entityList.push(...getUserEntitiesFromToken(payload)); let policyStoreId = "PSEXAMPLEabcdefg111111"; // set your own policy store id const authResult = await client .isAuthorized({ policyStoreId: policyStoreId, principal: principalEntity, resource: resourceEntity, action: action, entities, }) .promise(); return authResult; } function getUserEntitiesFromToken(payload) { let attributes = {}; let claimsNotPassedInEntities = ['aud', 'sub', 'exp', 'jti', 'iss']; Object.entries(payload).forEach(([key, value]) => { if (claimsNotPassedInEntities.includes(key)) { return; } if (Array.isArray(value)) { var attibuteItem = []; value.forEach((item) => { attibuteItem.push({ string: item, }); }); attributes[key] = { set: attibuteItem, }; } else if (typeof value === 'string') { attributes[key] = { string: value, } } else if (typeof value === 'bigint' || typeof value ==='number') { attributes[key] = { long: value, } } else if (typeof value === 'boolean') { attributes[key] = { boolean: value, } } }); let entityItem = { attributes: attributes, identifier: { entityType: "PhotoFlash::User", entityId: payload["sub"], // the application needs to use the claim that represents the user-id } }; return [entityItem]; }

1 此程式碼範例使用 aws-jwt-verify 程式庫來驗證由 OIDC 相容 IdPs 簽署的 JWTs。

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。