本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
組織中的個人在嘗試存取 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
--namespacenamespace
--emailuser-email
--user-roleuser-role
--identity-type IAM --iam-arn arn:aws:iam::account-id
:role/cognito-associated-iam-role
--session-namecognito-username
--external-login-federation-provider-type COGNITO --external-login-idcognito-identity-id
--regionidentity-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
--namespacenamespace
--emailuser-email
--user-roleuser-role
--identity-type IAM --iam-arn arn:aws:iam::account-id
:role/identity-provider-associated-iam-role
--session-nameidentity-username
--external-login-federation-provider-type CUSTOM_OIDC --custom-federation-provider-urlcustom-identity-provider-url
--external-login-idcustom-provider-identity-id
--regionidentity-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
--namespacenamespace
--user-nameidentity-provider-associated-iam-role
/identity-username
--regionidentity-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
--namespacenamespace
--user-namecognito-associated-iam-role
/cognito-username
--emailuser-email
--roleuser-role
--external-login-federation-provider-type COGNITO --external-login-idcognito-identity-id
--regionidentity-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
--namespacenamespace
--user-nameidentity-provider-associated-iam-role
/identity-username
--emailuser-email
--roleuser-role
--external-login-federation-provider-type CUSTOM_OIDC --custom-federation-provider-urlcustom-identity-provider-url
--external-login-idcustom-provider-identity-id
--regionidentity-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
--namespacenamespace
--user-nameidentity-provider-associated-iam-role
/identity-username
--emailuser-email
--roleuser-role
--external-login-federation-provider-type NONE --regionidentity-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。