本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用介面端點存取 Amazon Cognito (AWS PrivateLink)
您可以使用 在 VPC 和 Amazon Cognito 之間 AWS PrivateLink 建立私有連線。您可以像在 VPC 中一樣存取 Amazon Cognito,無需使用網際網路閘道、NAT 裝置、VPN 連接或 Direct Connect 連線。VPC 中的執行個體不需要公有 IP 地址即可存取 Amazon Cognito。
您可以建立由 AWS PrivateLink提供支援的介面端點來建立此私有連線。我們會在您為介面端點啟用的每個子網中建立端點網路介面。這些是請求者管理的網路介面,可做為目的地為 Amazon Cognito 之流量的進入點。
如需詳細資訊,請參閱《AWS PrivateLink 指南》中的「透過 AWS PrivateLink存取 AWS 服務」。
重要
透過 目前不支援下列身分驗證類型 AWS PrivateLink:
-
使用 OAuth 2.0 用戶端登入資料流程的機器對機器 (M2M) 授權
-
使用受管登入和傳統託管 UI 登入。
主題
AWS PrivateLink 整合的身分驗證流程
下表說明 VPCs 中用戶端可用的身分驗證流程,以及您可以套用來管理它們的 IAM 政策。您可以在使用者集區請求中評估的政策是資源控制政策 (RCPs)、VPC 端點政策和身分型政策。
| 資源 | 身分驗證流程 | 用戶端傳輸 VPC 端點時評估的政策 | 用戶端原始伺服器為公有時評估的政策 |
|---|---|---|---|
| 使用者集區 | 受管登入和傳統託管 UI 登入 | 無 (無存取權)1 | 無2 |
| 使用者集區 | Machine-to-machine授權 | 無 (無存取權)1 | 無2 |
| 使用者集區 | SDK 和 REST API 未驗證的請求 | RCPs、VPC 端點政策3 | RCPs |
| 使用者集區 | SDK 和 REST API SigV4 驗證的請求 | RCPs、VPC 端點政策、身分型政策3 | RCPs、身分型政策 |
| 身分集區 | SDK 和 REST API 未經驗證的請求 (基本和增強的流程) | RCPs、VPC 端點政策 | RCPs |
| 身分集區 | SDK 和 REST API SigV4 驗證的請求 (開發人員驗證的流程) | RCPs、身分型政策 | RCPs、身分型政策 |
1 個 VPC 端點不接受使用者集區網域的請求。如果用戶端有網際網路的路由,則會套用 NAT,讓原始伺服器變成公有。
2 使用者集區網域的存在可防止傳輸 VPC 端點的任何使用者集區請求完成。任何用戶端只能將公有傳輸路徑帶到使用者集區網域和 API 服務端點,使得 VPC 端點無法用於使用者集區。指派網域的使用者集區與 不相容 AWS PrivateLink。
3 使用者集區不得指派網域。
的操作模式 AWS PrivateLink
AWS PrivateLink 和 Amazon Cognito 支援下列範例實作模型。
| 資源 | 實作 | 動作 |
|---|---|---|
| 使用者集區 | 全私有 SDK 或 REST API 應用程式 |
|
| 使用者集區 | 公有及私有 |
|
| 使用者集區 | 私有或公有 OAuth 2.0 授權伺服器 |
|
| 身分集區 | 完全私有 |
|
| 身分集區 | 公有及私有 |
|
Amazon Cognito 的考量事項
在您設定 Amazon Cognito 的介面端點之前,請檢閱 AWS PrivateLink 指南中的考量事項。Amazon Cognito 支援透過介面端點呼叫所有 Amazon Cognito API 動作。如需這些操作的詳細資訊,請參閱 Amazon Cognito 使用者集區 API 參考和 Amazon Cognito 聯合身分 API 參考。
AWS PrivateLink for Amazon Cognito 僅適用於商業 AWS 區域。
使用者集區和 AWS PrivateLink
您可以透過介面端點向所有使用者集區 API 操作提出請求,但不能向使用者集區 OAuth 2.0 授權伺服器請求的操作提出請求,例如用戶端憑證授予和受管登入。
cognito-idp 使用者集區 API 具有未驗證、已驗證和字符授權的 API 操作。您可以在 VPC 端點和資源控制政策中授予已驗證操作的許可。您也可以授予未驗證和字符授權操作的許可,與身分型政策不同。VPC 端點和資源控制政策類型能夠評估和拒絕或允許其他公有操作的請求。
網域端點的請求也是公開的,但您無法在 政策中評估它們。VPC 私有 DNS 不會將使用者集區網域的請求路由到您的 VPC 端點。您只能透過公有網際網路路徑請求網域服務。如需詳細資訊,請參閱政策對使用者集區操作的影響。
受支援的操作
VPC 中的系統可以將請求傳送至使用者集區 API 動作,但無法傳送至使用者集區網域端點。使用網域端點的 OpenID Connect (OIDC) 和 OAuth 2.0 工作流程,例如machine-to-machine(M2M)、聯合登入和授權碼授予,無法透過 VPC 端點存取。VPC 端點政策不會影響這些 HTTP 工作流程,而且無法處理它們。從 VPC 內對網域端點的請求一律會在介面端點失敗,但當您為使用者集區設定 VPC 端點時,仍可透過公有 DNS 和路由繼續使用。
為了防止從 VPC 中的系統指派網域,Amazon Cognito 會在介面端點封鎖CreateUserPoolDomain請求。這可防止從 VPC 中的系統將網域新增至您的使用者集區。若要防止從所有系統新增網域,請將資源控制政策 (RCP),如下列範例套用至您的 AWS 帳戶。此政策會針對指定的使用者集區封鎖CreateUserPoolDomain動作。
{ "Version": "2012-10-17", "Statement": [ { "Principal": "*", "Effect": "Deny", "Action": [ "cognito-idp:CreateUserPoolDomain" ], "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE" } ] }
您的使用者集區可能有網域,而且在所有情況下都無法透過該網域 AWS PrivateLink。cognito-idp 服務端點的所有 SDK 型使用者集區 API 請求都會透過 接受請求 AWS PrivateLink,但 除外CreateUserPoolDomain。使用者集區 API 服務端點和網域端點一律可透過公有網際網路路徑存取。若要解決來自公有來源AWS WAF ACLs。
政策對使用者集區操作的影響
VPC 端點政策和資源控制政策 (RCPs) 可以控制所有使用者集區 API 操作,即使是通常為公開和未經驗證的操作。您也可以使用 VPC 條件金鑰,對身分型政策中的使用者集區存取套用限制。只有包含 SigV4 格式身分驗證資訊的請求,才能在以身分為基礎的政策中控制。受管登入和傳統託管 UI 操作是單獨的類別,不符合 VPC 傳輸或將任何類型的政策套用到其動作的資格。
未驗證的操作
用戶端應用程式的 Amazon Cognito 操作不會使用 SigV4 進行身分驗證。範例操作位於 的範例政策中為您的介面端點建立端點政策。未驗證操作的其他範例為 GetUser和 AssociateSoftwareToken。當您將這些操作新增至以身分為基礎的政策時,它們沒有作用。不過,您可以在 VPC 端點政策和 RCPs存取。
未驗證的操作不會與 IAM 主體相關聯。您的 VPC 端點政策或 RCP 必須允許這些動作的所有主體。
已驗證的操作
使用 SigV4 驗證使用者集區管理和伺服器端身分驗證的 API 操作。對於已驗證的操作,您可以使用套用至 VPC 端點的端點政策、組織中的資源控制政策,以及套用至主體的身分型政策來限制主體。身分型和資源控制政策是 VPC 感知的,具有網路型條件金鑰,例如 aws:SourceVpc和 aws:SourceVpce。
如需使用者集區之 API 操作的伺服器端、用戶端和管理類別的詳細資訊,請參閱 API 和 SDK 身分驗證的授權模型。
身分集區和 AWS PrivateLink
Amazon Cognito 身分集區透過 支援所有 API 操作 AWS PrivateLink。
受支援的操作
透過界面端點支援所有身分集區 API 操作。身分集區沒有網域端點,也不受相同的限制。不過,身分集區會因為與 整合,而對網路型存取控制有特定的考量 AWS STS。
AWS STS 整合的網路內容限制
身分集區使用 AWS STS AssumeRoleWithWebIdentity 操作來提供臨時 AWS 登入資料。當身分集區 AWS PrivateLink 在增強型身分驗證流程中呼叫 AWS STS 時,如 aws:SourceIp、 aws:SourceVpc和 的網路內容金鑰會aws:SourceVpce包含來自身分集區服務基礎設施的值,而不是來自應用程式的網路內容。
如果您的 IAM 角色信任政策或資源控制政策 (RCPs) 使用網路型條件金鑰來限制存取,身分集區操作可能會意外遭到拒絕。若要解決此限制,您可以使用下列其中一種方法:
用於服務識別的主體標籤
標記與身分集區搭配使用的 IAM 角色,並修改您的政策,以便在委託人具有適當的標籤時允許操作。首先,將標籤新增至您的身分集區角色:
aws iam tag-role \ -\-role-nameMyIdentityPoolRole\ -\-tags Key=CognitoServiceCall,Value=true
然後修改以網路為基礎的政策,以允許已標記的主體。例如,在 RCP 中:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "sts:AssumeRoleWithWebIdentity", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": ["allowed-ip-ranges"] }, "StringNotEqualsIfExists": { "aws:ResourceTag/CognitoServiceCall": "true" } } } ] }
服務特定內容索引鍵
身分集區提供 VPC 端點政策和 RCPs 中資源層級授權的服務特定內容金鑰。使用這些內容金鑰,您可以啟用精細存取控制,並在 政策中區分已驗證和未驗證的使用者。
non-SigV4 操作可用的服務特定內容金鑰,例如 GetId、GetCredentialsForIdentity、GetOpenIdToken、UnlinkIdentity
-
cognito-identity-unauth:IdentityPoolArn- 依身分集區 ARN 篩選未驗證使用者的存取權 -
cognito-identity-unauth:AccountId- 依未驗證使用者的 AWS 帳戶 ID 篩選存取權 -
cognito-identity-auth:IdentityPoolArn- 依已驗證使用者的身分集區 ARN 篩選存取權 -
cognito-identity-auth:AccountId- 依已驗證使用者的 AWS 帳戶 ID 篩選存取權
SigV4 操作可用的服務特定內容索引鍵,例如 DeleteIdentities 和 DescribeIdentity
-
cognito-identity:IdentityPoolArn- 依身分集區 ARN 篩選存取權
您可以在 VPC 端點政策中使用這些內容金鑰,根據身分驗證狀態限制存取,如下列範例所示:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": [ "cognito-identity:GetId", "cognito-identity:GetCredentialsForIdentity" ], "Resource": "*", "Condition": { "StringEquals": { "cognito-identity-unauth:IdentityPoolArn": "arn:aws:cognito-identity:us-east-1:123456789012:identitypool/us-east-1:12345678-ffff-ffff-ffff-123456" } } } ] }
使用資源控制政策控制存取
Amazon Cognito 支援使用資源控制政策 (RCP) 控制對資源RCPs存取。透過以網路為基礎的條件金鑰,RCPs 可以定義允許 AWS PrivateLink 存取使用者集區和身分集區的網路和動作。RCPs 中的Action陳述式可以控制對已驗證和未驗證的使用者集區 API 操作的存取。
例如,下列範例政策可防止從特定 VPC 存取所有使用者集區。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCognitoAccessOutsideVPC", "Effect": "Deny", "Principal": "*", "Action": "cognito-idp:*", "Resource": "*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": "vpc-02d6770f46ef1653b" } } } ] }
建立 Amazon Cognito 的介面端點
您可以使用 Amazon VPC 主控台或 () 為 Amazon Cognito 建立介面端點AWS CLI。 AWS Command Line Interface 如需詳細資訊,請參閱《AWS PrivateLink 指南》中的「建立介面端點」。
使用下列服務名稱建立 Amazon Cognito 使用者集區的介面端點:
com.amazonaws.region.cognito-idp
使用下列服務名稱建立 Amazon Cognito 身分集區的介面端點:
com.amazonaws.region.cognito-identity
如果您為介面端點啟用私有 DNS,您可以使用其預設的區域 DNS 名稱向 Amazon Cognito 提出 API 請求。例如,cognito-idp.us-east-1.amazonaws.com對於使用者集區和cognito-identity.us-east-1.amazonaws.com對於身分集區。
為您的介面端點建立端點政策
端點政策為 IAM 資源,您可將其連接至介面端點。預設端點政策允許透過介面端點完整存取 Amazon Cognito。若要控制 Amazon Cognito 從 VPC 允許的存取,請將自訂端點政策連接至介面端點。
端點政策會指定以下資訊:
-
可執行動作 (AWS 帳戶、IAM 使用者和 IAM 角色) 的主體。
-
可執行的動作。
-
可供執行動作的資源。
-
在允許或拒絕請求之前,必須滿足的條件。
如需詳細資訊,請參閱《AWS PrivateLink 指南》中的「使用端點政策控制對服務的存取」。
範例:使用者集區動作的 VPC 端點政策
以下是使用者集區的自訂端點政策範例。當您將此政策連接到介面端點時,它會授予所有資源上所有主體所列出的使用者集區動作的存取權。
{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": "arn:aws:iam::123456789012:assumed-role/MyWebAppRole/MyWebAppSession" }, "Effect": "Allow", "Action": [ "cognito-idp:AdminInitiateAuth", "cognito-idp:AdminRespondToAuthChallenge", "cognito-idp:AdminSetUserPassword" ], "Resource":"arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE" }, { "Effect": "Allow", "Action": [ "cognito-idp:InitiateAuth", "cognito-idp:RespondToAuthChallenge", "cognito-idp:ForgotPassword", "cognito-idp:ConfirmForgotPassword" ], "Resource":"arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE" } ] }
範例:身分集區動作的 VPC 端點政策
以下是身分集區的自訂端點政策範例。此政策使用服務特定的內容金鑰,限制來自特定身分集區的已驗證使用者存取。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": [ "cognito-identity:GetId", "cognito-identity:GetCredentialsForIdentity", "cognito-identity:GetOpenIdToken" ], "Resource": "*", "Condition": { "StringEquals": { "cognito-identity-auth:IdentityPoolArn": "arn:aws:cognito-identity:us-east-1:123456789012:identitypool/us-east-1:12345678-ffff-ffff-ffff-123456" } } } ] }
建立 AWS PrivateLink 操作的身分型政策
身分型政策是您可以連接到 AWS 委託人的 IAM 資源。您可以使用 IAM 驗證操作的身分型政策,透過 VPC 端點控制對 Amazon Cognito 的存取。與端點政策不同,您無法在身分型政策中設定未驗證操作的許可。驗證或管理操作需要 Signature 第 4 版授權。對於使用者集區,已驗證的操作包括 AdminInitiateAuth 等伺服器端身分驗證請求,以及 UpdateUserPool 等管理請求。對於身分集區,已驗證的操作包含 DeleteIdentities 和 DescribeIdentity 等管理請求。
身分型政策會指定下列資訊:
-
可執行的動作。
-
可供執行動作的資源。
-
在允許或拒絕請求之前,必須滿足的條件。
範例:使用者集區伺服器端身分驗證的身分型政策
下列範例政策授予從指定端點存取指定使用者集區中列出的使用者集區動作的權限。將此政策套用至 Web 應用程式的擔任 IAM 角色。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cognito-idp:AdminInitiateAuth", "cognito-idp:AdminRespondToAuthChallenge", "cognito-idp:AdminSetUserPassword" ], "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE", "Condition": { "StringEquals": { "aws:SourceVpce": "vpce-1a2b3c4d" } } } ] }
範例:身分集區管理操作的身分型政策
下列範例政策會授予從指定 VPC 端點存取身分集區管理動作的權限。將此政策套用至需要執行身分集區管理的 IAM 主體。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cognito-identity:DeleteIdentities", "cognito-identity:DescribeIdentity" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceVpce": "vpce-1a2b3c4d" }, "StringEquals": { "cognito-identity:IdentityPoolArn": "arn:aws:cognito-identity:us-east-1:123456789012:identitypool/us-east-1:12345678-ffff-ffff-ffff-123456" } } } ] }