如何解決在 Quicksight 中使用 Athena 做為資料來源時出現的 "Access denied (存取遭拒)" 錯誤?

上次更新日期:2022 年 7 月 29 日

當我嘗試使用 Amazon Athena 做為 Amazon QuickSight 帳戶中的資料來源時,出現 "Access denied (存取遭拒)" 錯誤。如何解決此錯誤?

簡短描述

以下是當您在 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 Command Line Interface (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 (QuickSight 對 AWS 服務的存取權) 下,選擇 Manage (管理)。
  5. 從 AWS 服務清單中,選取 Amazon S3
  6. 選擇 Select S3 buckets (選取 S3 儲存貯體),然後選取您要從 QuickSight 存取的 S3 儲存貯體。
  7. 選擇 Write permission for Athena Workgroup (Athena 工作群組的寫入許可),然後選擇 Finish (完成)。
  8. 選擇 Save (儲存)。

您的資料檔案已使用 AWS KMS key 加密

如果您的資料檔案使用 AWS KMS key 加密,則 Amazon S3 可能會拒絕您存取資料。若要解決此問題,請授予 AWS KMS key 存取權給您的 QuickSight 服務角色。完成以下步驟。

使用 AWS CLI

1.    使用 IAM 主控台尋找 QuickSight 服務角色 ARN。

2.    使用 Amazon S3 主控台尋找 AWS KMS key ARN。
        前往包含資料檔案的儲存貯體。
        選擇 Overview (概觀) 分頁,然後找到 KMS key ID

3.    將 QuickSight 服務角色 ARN 新增至 KMS key 政策。

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 key 的 ARN,並將 quicksight_role_arn 取代為 QuickSight 服務角色的 ARN。

使用 AWS KMS 主控台

若要將 QuickSight 服務角色新增至 AWS KMS key 政策,請按照如何變更金鑰政策中的指示進行操作。然後,透過新增下列許可政策來編輯金鑰政策:

{
     "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)

若要授予 Lake Formation 許可給 QuickSight,您必須是 Lake Formation 管理員。

完成以下步驟:

1.    找到 QuickSight 使用者或群組的 ARN。

執行下列其中一個 AWS CLI 命令:

describe-user

aws quicksight describe-user  --user-name user_name  --aws-account-id account_id --namespace default
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.    選擇 Tables (表格)。

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 tables (所有表格)。表格許可為 Select (選取) 和 Describe (描述)。

8.    選擇 Grant (授予)。

授予許可後,請返回 QuickSight 主控台,嘗試再次建立資料集。