在 Quicksight 中使用 Athena 作为数据源时,如何解决“访问被拒绝”错误?

3 分钟阅读
0

当我尝试使用 Amazon Athena 作为 Amazon QuickSight 账户中的数据源时,我收到“访问被拒绝”错误。如何解决此问题?

简短描述

以下是您在 Amazon QuickSight 中使用 Amazon Athena 作为数据源时出现访问被拒绝错误的常见原因:

  • 您的 QuickSight 账户没有访问 Amazon Simple Storage Service (Amazon S3) 存储桶所需的权限。
  • 使用 AWS Key Management Service (AWS KMS) 密钥加密您的数据文件。
  • 您没有分配必要的 AWS Identity and Access Management (IAM) 权限策略。
  • Amazon S3 存储桶不存在。或者,用于查询数据的 IAM 角色没有所需的 S3 权限。
  • 您没有分配必要的服务控制策略 (SCP)。(适用于使用 AWS Organizations 的 QuickSight 账户)
  • 您的 QuickSight 用户或组没有 AWS Lake Formation 权限。(适用于使用 Lake Formation 的 Athena 账户)

**注意:**在开始进行问题排查之前,请确保您可以在 Athena 中访问数据。

解决方案

如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI

您的 QuickSight 账户没有访问 Amazon S3 存储桶所需的权限

您将收到与以下类似的错误消息:

An error has been thrown from AWS Athena client. Permission denied on S3 path:
sourceErrorMessage: s3:/example bucket/object name

要获取 S3 存储桶的权限,请完成以下步骤:

  1. 打开 Amazon QuickSight 控制台
  2. 选择 Manage QuickSight(管理 QuickSight)。
  3. 选择 Security & permissions(安全性和权限)。
  4. QuickSight access to AWS Services(AWS 服务的 QuickSight 访问权限)下,选择 Manage(管理)。
  5. 从 AWS 服务列表中,选择 Amazon S3
  6. 选择 Select S3 buckets(选择 S3 存储桶),然后选择要从 QuickSight 访问的 S3 存储桶。
  7. 选择 Write permission for Athena Workgroup(Athena 工作组的写入权限),然后选择 Finish(完成)。
  8. 选择 Save(保存)。

使用 AWS KMS 密钥加密您的数据文件

如果使用 AWS KMS 密钥加密您的数据文件,则 Amazon S3 可能会拒绝您访问该数据。要解决此问题,请授予您的 QuickSight 服务角色访问 AWS KMS 密钥的权限。完成以下步骤。

使用 AWS CLI

1.    使用 IAM 控制台查找 QuickSight 服务角色 ARN。

2.    使用 Amazon S3 控制台查找 AWS KMS 密钥 ARN。
转到包含您的数据文件的存储桶。
选择 Overview(概述)选项卡,然后找到 KMS key ID(KMS 密钥 ID)。

3.    将 QuickSight 服务角色 ARN 添加到 KMS 密钥策略中。

4.    运行 AWS CLI create-grant 命令:

aws kms create-grant --key-id aws_kms_key_arn --grantee-principal quicksight_role_arn --operations Decrypt

**注意:**将 aws_kms_key_arn 替换为您的 AWS KMS 密钥的 ARN,将 quicksight_role_arn 替换为您的 QuickSight 服务角色的 ARN。

使用 AWS KMS 控制台

要将 QuickSight 服务角色添加到 AWS KMS 密钥策略中,请按照如何更改密钥策略中的说明进行操作。然后,通过添加以下权限策略来编辑密钥策略:

{
     "Sid": "Allow use of the key",
     "Effect": "Allow",
     "Principal": {
         "AWS": [
              "arn:aws:iam::aws-account-id:role/service-role/aws-quicksight-service-role-v0",
              "arn:aws:iam::aws-account-id:role/service-role/aws-quicksight-s3-consumers-role-v0"
              ]
         },
         "Action": [
            "kms:Decrypt"
               ],
         "Resource": "*"
}

**注意:**将 aws_account_id 替换为您的 AWS 账户 ID。

您没有分配必要的 IAM 权限策略

如果您没有分配必要的 IAM 权限策略,也可能会收到访问被拒绝错误。要查看分配给您的策略,请完成以下步骤:

  1. 打开 Amazon QuickSight 控制台
  2. 选择 Manage QuickSight(管理 QuickSight)。
  3. 选择 Security & permissions(安全性和权限)。
  4. 选择 IAM policy assignments(IAM 策略分配)。
  5. 检查是否有任何用于访问 Athena 的 IAM 策略分配。
  6. 确认该策略不会限制您对 S3 或 Athena 的访问。

如果存在限制您访问 S3 或 Athena 的策略,请要求您的 QuickSight 管理员更改该策略。如果您是管理员,则停用 IAM 策略分配,然后编辑策略以包含 S3 和 Athena 权限。有关更多信息,请参阅通过 IAM 设置对 AWS 服务的粒度访问

S3 存储桶不存在。或者,用于查询数据的 IAM 角色没有所需的 S3 权限

您收到以下错误:

Unable to verify/create output bucket

要解决上述错误,请参阅如何解决 Amazon Athena 中的”无法验证/创建输出存储桶”错误?

如果存储桶不存在,则添加有效的 S3 存储桶。在 Amazon QuickSight 控制台中,从 AWS 服务列表中选择 Amazon S3。然后,选择用于查询结果位置的 S3 存储桶。

您没有分配必要的 SCP

如果您使用 AWS Organizations,则在没有分配必要的 SCP 时,您可能会收到访问被拒绝错误。让 AWS Organizations 管理员检查您的 SCP 设置,以验证分配给您的权限。如果您是 AWS Organizations 管理员,请参阅创建、更新和删除服务控制策略

您的 QuickSight 用户或组没有 Lake Formation 权限

对于使用 Lake Formation 的 Athena 账户,您可能会收到以下错误:

An error has been thrown from the AWS Athena client. Insufficient permissions to execute the query. Insufficient Lake Formation permission(s)

要授予 QuickSight 的 Lake Formation 权限,您必须是 Lake Formation 管理员。

完成以下步骤:

1.    找到 QuickSight 用户或组的 ARN。

运行以下 AWS CLI 命令之一:

describe-user

aws quicksight describe-user  --user-name user_name  --aws-account-id account_id --namespace default

-或者-

describe-group

aws quicksight describe-group --group-name group_name  --aws-account-id account_id --namespace default

**注意:**在前面的命令中,将 user_name 替换为用户名,将 group_name 替换为组名,将 account_id 替换为账户 ID。

2.    打开 Lake Formation 控制台

3.    选择 Table(表)。

4.    选择 Actions(操作),然后选择 Permissions(权限)。

5.    从主体列表中,选择 Grant(授予)。

6.    在 SAML and Amazon QuickSight users and groups(SAML 和 Amazon QuickSight 用户和组)下,输入 QuickSight 用户或组 ARN。
例如,arn:aws:quicksight:region:accountId:user/namespace/username

7.    选择正确的数据源,然后选择 All table(所有表)。表权限为 Select(选择)和 Describe(描述)。

8.    选择 Grant(授予)。

授予权限后,请返回 QuickSight 控制台尝试再次创建数据集。


相关信息

将 Athena 与 Amazon QuickSight 结合使用时权限不足

介绍 Amazon QuickSight 对 Amazon S3 和 Amazon Athena 的精细访问控制

在 AWS Lake Formation 中为 Amazon QuickSight 作者启用精细权限

AWS 官方
AWS 官方已更新 2 年前