組織中的個人在嘗試存取 Amazon QuickSight 時,會收到 "External Login is Unauthorized" 的訊息 - Amazon QuickSight

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

組織中的個人在嘗試存取 Amazon QuickSight 時,會收到 "External Login is Unauthorized" 的訊息

   目標對象:Amazon QuickSight 管理員 

當您組織中的個人使用 AssumeRoleWithWebIdentity 聯合到 Amazon QuickSight 時,QuickSight 會將單一以角色為基礎的使用者映射至單一外部登入。在某些情況下,可能會透過與原始映射使用者不同的外部登入 (例如 Amazon Cognito) 對該個別人員進行驗證。若如此,他們將無法存取 QuickSight 並收到以下意外錯誤訊息。

用於聯合的外部登入對 QuickSight 使用者來說是未經授權的。

若要了解如何對此問題進行疑難排解,請參閱下列章節:

為什麼會發生這種情況?

您正在使用簡化的 Amazon Cognito 流程

如果您正在使用 Amazon Cognito 聯合到 QuickSight,則單一登入 (IAM Identity Center) 設定可能會使用 CognitoIdentityCredentials API 操作來擔任 QuickSight 角色。此方法會將 Amazon Cognito 身分池中的所有使用者映射至單一 QuickSight 使用者,而且不受 Amazon QuickSight 支援。

建議您改用 AssumeRoleWithWebIdentity API 操作,此操作會指定角色工作階段名稱。

您正使用未經身分驗證 Amazon Cognito 使用者

Amazon Cognito IAM Identity Center 是針對 Amazon Cognito 身分池中未經驗證的使用者設定的。QuickSight 角色信任政策的設定方式如下列範例所示。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-west-2:cognito-pool-id" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } } } ] }

此設定可讓暫時的 Amazon Cognito 使用者擔任映射至唯一 QuickSight 使用者的角色工作階段。因為未驗證的身分是暫時的,所以 QuickSight 不支援這些身分。

建議您不要使用此設定,因為 Amazon QuickSight 不支援此設定。對於 Amazon QuickSight,請確保 Amazon Cognito IAM Identity Center 使用經過身分驗證的使用者。

您已刪除並重新建立具有相同使用者名稱屬性的 Amazon Cognito 使用者

在此情況下,已刪除並重新建立映射至 Amazon QuickSight 使用者的關聯 Amazon Cognito 使用者。新建立的 Amazon Cognito 使用者具有不同的基礎主旨。視角色工作階段名稱映射至 QuickSight 使用者的方式而定,工作階段名稱可能會對應至同一個以 QuickSight 角色為基礎的使用者。

建議您使用 UpdateUser API 操作,將 QuickSight 使用者重新映射至更新的 Amazon Cognito 使用者主旨。如需詳細資訊,請參閱下列 UpdateUser API 範例

您正在將多個 Amazon Cognito 使用者集區映射到與一個身分集區 AWS 帳戶 不同的 ,並使用 QuickSight

Amazon QuickSight 不支援將不同 中的多個 Amazon Cognito 使用者集區對應 AWS 帳戶 至一個身分集區和 QuickSight。 QuickSight Amazon QuickSight

可以如何修正這個問題?

您可以使用 QuickSight 公用 API 操作來更新使用者的外部登入資訊。使用下列選項來了解如何操作。

使用 RegisterUser 建立具有外部登入資訊的使用者

如果外部登入提供者是 Amazon Cognito,則請使用下列 CLI 程式碼建立使用者。

aws quicksight register-user --aws-account-id account-id --namespace namespace --email user-email --user-role user-role --identity-type IAM --iam-arn arn:aws:iam::account-id:role/cognito-associated-iam-role --session-name cognito-username --external-login-federation-provider-type COGNITO --external-login-id cognito-identity-id --region identity-region

external-login-id 應該是 Amazon Cognito 使用者的身分 ID。格式為 <identity-region>:<cognito-user-sub>,如下列範例所示。

aws quicksight register-user --aws-account-id 111222333 --namespace default --email cognito-user@amazon.com --user-role ADMIN --identity-type IAM --iam-arn arn:aws:iam::111222333:role/CognitoQuickSightRole --session-name cognito-user --external-login-federation-provider-type COGNITO --external-login-id us-east-1:12345678-1234-1234-abc1-a1b1234567 --region us-east-1

如果外部登入提供者是自訂 OpenID Connect (OIDC) 提供者,請使用下列 CLI 程式碼建立使用者。

aws quicksight register-user --aws-account-id account-id --namespace namespace --email user-email --user-role user-role --identity-type IAM --iam-arn arn:aws:iam::account-id:role/identity-provider-associated-iam-role --session-name identity-username --external-login-federation-provider-type CUSTOM_OIDC --custom-federation-provider-url custom-identity-provider-url --external-login-id custom-provider-identity-id --region identity-region

以下是範例。

aws quicksight register-user --aws-account-id 111222333 --namespace default --email identity-user@amazon.com --user-role ADMIN --identity-type IAM --iam-arn arn:aws:iam::111222333:role/CustomIdentityQuickSightRole --session-name identity-user --external-login-federation-provider-type CUSTOM_OIDC --custom-federation-provider-url idp.us-east-1.amazonaws.com/us-east-1_ABCDE --external-login-id 12345678-1234-1234-abc1-a1b1234567 --region us-east-1

若要進一步了解如何在 CLI 中使用 RegisterUser,請參閱《Amazon QuickSight API 參考》中的 RegisterUser

使用 DescribeUser 檢查使用者的外部登入資訊

如果使用者是來自外部登入提供者的以角色為基礎的聯合身分使用者,請使用 DescribeUser API 操作檢查該使用者的外部登入資訊,如下列程式碼所示。

aws quicksight describe-user --aws-account-id account-id --namespace namespace --user-name identity-provider-associated-iam-role/identity-username --region identity-region

以下是範例。

aws quicksight describe-user --aws-account-id 111222333 --namespace default --user-name IdentityQuickSightRole/user --region us-west-2

結果會包含外部登入資訊欄位 (如果有)。以下是範例。

{ "Status": 200, "User": { "Arn": "arn:aws:quicksight:us-east-1:111222333:user-default-IdentityQuickSightRole-user", "UserName": "IdentityQuickSightRole-user", "Email": "user@amazon.com", "Role": "ADMIN", "IdentityType": "IAM", "Active": true, "PrincipalId": "federated-iam-AROAAAAAAAAAAAAAA:user", "ExternalLoginFederationProviderType": "COGNITO", "ExternalLoginFederationProviderUrl": "cognito-identity.amazonaws.com", "ExternalLoginId": "us-east-1:123abc-1234-123a-b123-12345678a" }, "RequestId": "12345678-1234-1234-abc1-a1b1234567" }

若要進一步了解如何在 CLI 中使用 DescribeUser,請參閱《Amazon QuickSight API 參考》中的 DescribeUser

使用 UpdateUser 更新使用者的外部登入資訊

在某些情況下,您可能會發現 DescribeUser 結果中為使用者儲存的外部登入資訊不正確,或是外部登入資訊遺失。如果是這樣,您可以使用 UpdateUser API 操作對其進行更新。使用以下範例。

對於 Amazon Cognito 使用者,請使用以下內容。

aws quicksight update-user --aws-account-id account-id --namespace namespace --user-name cognito-associated-iam-role/cognito-username --email user-email --role user-role --external-login-federation-provider-type COGNITO --external-login-id cognito-identity-id --region identity-region

以下是範例。

aws quicksight update-user --aws-account-id 111222333 --namespace default --user-name CognitoQuickSightRole/cognito-user --email cognito-user@amazon.com --role ADMIN --external-login-federation-provider-type COGNITO --external-login-id us-east-1:12345678-1234-1234-abc1-a1b1234567 --region us-west-2

對於自訂 OIDC 提供者使用者,請使用以下內容。

aws quicksight update-user --aws-account-id account-id --namespace namespace --user-name identity-provider-associated-iam-role/identity-username --email user-email --role user-role --external-login-federation-provider-type CUSTOM_OIDC --custom-federation-provider-url custom-identity-provider-url --external-login-id custom-provider-identity-id --region identity-region

以下是範例。

aws quicksight update-user --aws-account-id 111222333 --namespace default --user-name IdentityQuickSightRole/user --email user@amazon.com --role ADMIN --external-login-federation-provider-type CUSTOM_OIDC --custom-federation-provider-url idp.us-east-1.amazonaws.com/us-east-1_ABCDE --external-login-id 123abc-1234-123a-b123-12345678a --region us-west-2

如果您要刪除使用者的外部登入資訊,請使用 NONE external login federation provider type。使用下列 CLI 命令刪除外部登入資訊。

aws quicksight update-user --aws-account-id account-id --namespace namespace --user-name identity-provider-associated-iam-role/identity-username --email user-email --role user-role --external-login-federation-provider-type NONE --region identity-region

以下是範例。

aws quicksight update-user --aws-account-id 111222333 --namespace default --user-name CognitoQuickSightRole/cognito-user --email cognito-user@amazon.com --role ADMIN --external-login-federation-provider-type NONE --region us-west-2

若要進一步了解如何在 CLI 中使用 UpdateUser,請參閱《Amazon QuickSight API 參考》中的 UpdateUser