本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
我组织中的个人在尝试访问 Quick Sight 时会收到 “外部登录未授权” 消息
| 目标受众:亚马逊 Quick Suite 管理员 |
当组织中的某个人使用联合到 Quick Sight 时 AssumeRoleWithWebIdentity,Quick Sight 会将基于角色的单个用户映射到单个外部登录帐户。在某些情况下,该个人可能会通过与原始映射用户不同的外部登录(例如 Amazon Cognito)进行身份验证。如果是这样,他们将无法访问 Quick Sight 并收到以下意外错误消息。
Quick Sight 用户未经授权使用用于联合身份验证的外部登录。
要了解如何排查该问题,请参阅以下各节:
为什么会出现这种情况?
正在使用简化的 Amazon Cognito 流
如果您使用 Amazon Cognito 联合进入 Quick Sight,则单点登录(IAM 身份中心)设置可能会使用 CognitoIdentityCredentials API 操作来担任 Quick Sight 角色。此方法将 Amazon Cognito 身份池中的所有用户映射到单个 Quick Sight 用户,Quick Sight 不支持此方法。
建议您改用指定角色会话名称的 AssumeRoleWithWebIdentity API 操作。
正在使用未经身份验证的 Amazon Cognito 用户
Amazon Cognito IAM Identity Center 是为 Amazon Cognito 身份池中未经身份验证的用户设置的。Quick Sight 角色信任策略的设置如以下示例所示。
此设置允许临时的 Amazon Cognito 用户代入映射到唯一 Quick Sight 用户的角色会话。由于未经身份验证的身份是临时的,因此 Quick Sight 不支持这些身份。
我们建议您不要使用此设置,因为 Quick Sight 不支持该设置。对于 Quick Sight,请确保 Amazon Cognito IAM 身份中心使用经过身份验证的用户。
删除并重新创建了一个具有相同用户名属性的 Amazon Cognito 用户
在本例中,映射到 Quick Sight 用户的关联 Amazon Cognito 用户已被删除并重新创建。新创建的 Amazon Cognito 用户具有不同的基础主题。根据角色会话名称与 Quick Sight 用户的映射方式,会话名称可能对应于相同的基于 Quick Sight 角色的用户。
我们建议您使用 UpdateUser API 操作将 Quick Sight 用户重新映射到更新后的 Amazon Cognito 用户主题。有关更多信息,请参阅以下 UpdateUser API 示例。
你正在使用 Quick Sight Amazon Web Services 账户 将不同的 Amazon Cognito 用户池映射到一个身份池中
Quick Sight 不支持将多个 Amazon Cognito 用户池映射 Amazon Web Services 账户 到一个身份池和 Quick Sight 中。
如何修复此问题?
您可以使用 Quick Sight 公共 API 操作来更新用户的外部登录信息。使用以下选项来了解如何操作。
RegisterUser 用于创建具有外部登录信息的用户
如果外部登录提供程序是 Amazon Cognito,请使用以下 CLI 代码创建用户。
aws quicksight register-user --aws-account-idaccount-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-idaccount-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 Quick Suite API 参考RegisterUser中的。
DescribeUser 用于检查用户的外部登录信息
如果用户是来自外部登录提供程序的基于角色的联合用户,请使用 DescribeUser API 操作查看其外部登录信息,如以下代码所示。
aws quicksight describe-user --aws-account-idaccount-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 Quick Suite API 参考DescribeUser中的。
UpdateUser 用于更新用户的外部登录信息
在某些情况下,您可能会发现 DescribeUser 结果中为用户保存的外部登录信息不正确或缺少外部登录信息。如果是这样,您可以使用 UpdateUser API 操作对其进行更新。使用以下示例。
对于 Amazon Cognito 用户,请使用以下示例。
aws quicksight update-user --aws-account-idaccount-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-idaccount-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-idaccount-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 Quick Suite API 参考UpdateUser中的。