组织中的个人在尝试访问 Amazon QuickSight 时会收到“External Login is Unauthorized”消息 - Amazon QuickSight
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

组织中的个人在尝试访问 Amazon QuickSight 时会收到“External Login is Unauthorized”消息

   目标受众:Amazon QuickSight 管理员 

当组织中的个人使用 AssumeRoleWithWebIdentity 联合到 Amazon QuickSight 时,QuickSight 会将单个基于角色的用户映射到单个外部登录。在某些情况下,该个人可能会通过与原始映射用户不同的外部登录(例如 Amazon Cognito)进行身份验证。如果是这样,他们将无法访问 QuickSight,并会收到以下意外错误消息。

未授权 QuickSight 用户进行用于联合身份验证的外部登录。

要了解如何排查该问题,请参阅以下各节:

为什么会出现这种情况?

正在使用简化的 Amazon Cognito 流

如果您正使用 Amazon Cognito 联合到 QuickSight,则单点登录(IAM Identity Center)设置可能会使用 API CognitoIdentityCredentials 操作来代入 QuickSight 角色。此方法会将 Amazon Cognito 身份池中的所有用户映射到单个 QuickSight 用户,但 Amazon QuickSight 不支持此方法。

建议您改用指定角色会话名称的 AssumeRoleWithWebIdentity API 操作。

正在使用未经身份验证的 Amazon Cognito 用户

Amazon Cognito IAM Identity Center 是为 Amazon Cognito 身份池中未经身份验证的用户设置的。QuickSight 角色信任策略的设置如下例所示。

此设置允许 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 Web Services 账户 中的多个 Amazon Cognito 用户群体映射到一个身份池和 QuickSight

Amazon QuickSight 不支持将不同 Amazon Web Services 账户 中的多个 Amazon Cognito 用户群体映射到一个身份池和 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 Reference》中的 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 Reference》中的 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 Reference》中的 UpdateUser