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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

我所在组织中的个人在尝试访问 Amazon 时会收到 “外部登录未授权” 消息 QuickSight

   目标受众:Amazon QuickSight 管理员 

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

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

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

为什么会出现这种情况?

正在使用简化的 Amazon Cognito 流

如果您使用 Amazon Cognito 进行联合登录 QuickSight,则单点登录(IAM 身份中心)设置可能会使用 CognitoIdentityCredentials API 操作来代入角色。 QuickSight 此方法将 Amazon Cognito 身份池中的所有用户映射到单个 QuickSight 用户,亚马逊不支持此方法。 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

我们建议您不要使用此设置,因为亚马逊不支持这种设置 QuickSight。对于亚马逊 QuickSight,请确保亚马逊 Cognito IAM 身份中心使用经过身份验证的用户。

删除并重新创建了一个具有相同用户名属性的 Amazon Cognito 用户

在本例中,映射到亚马逊用户的关联 Amazon Cognito QuickSight 用户已被删除并重新创建。新创建的 Amazon Cognito 用户具有不同的基础主题。根据角色会话名称与QuickSight 用户的映射方式,会话名称可能对应于同一个 QuickSight基于角色的用户。

我们建议您使用 UpdateUser API QuickSight 操作将用户重新映射到更新后的 Amazon Cognito 用户主题。有关更多信息,请参阅以下 UpdateUser API 示例

您正在将多个 Amazon Cognito 用户池映射Amazon Web Services 账户到一个身份池中,并使用 QuickSight

将不同身份池中的多个 Amazon Cognito 用户池映射Amazon Web Services 账户到一个身份池,亚马逊QuickSight 不支持该用户池。 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中的。