跳至內容

如何解決與 Amazon Redshift 位於相同帳戶中,Amazon S3 儲存貯體的 Redshift Spectrum 中的拒絕存取錯誤?

2 分的閱讀內容
0

我想存取儲存在與 Amazon Redshift 叢集位於相同 AWS 帳戶內 Amazon Simple Storage Service (Amazon S3) 儲存貯體中的資料。我還想使用 AWS Glue 作為資料目錄來存取 Amazon Redshift Spectrum 中的資料。但是,我收到了權限錯誤。

簡短描述

附加到 Redshift 叢集的 AWS Identity and Access Management (IAM) 角色必須具有 AWS Glue 和 Amazon S3 的權限。如果 IAM 角色沒有正確的權限,那麼您可能會收到錯誤訊息。

建立外部結構描述時,您可能會收到以下錯誤訊息:

「SQL 錯誤 [XX000]: 錯誤: 使用者:arn:aws:sts::111111111111:assumed-role/KCARole/RedshiftIamRoleSession 無權在資源:arn:aws:glue:eu-west-1:111111111111:catalog 上執行:glue:CreateDatabase,因為沒有身分識別型政策允許 glue:CreateDatabase 動作」

當您查詢 Redshift Spectrum 表時,您可能會收到以下錯誤訊息:

「SQL 錯誤 [XX000]: 錯誤: Spectrum 掃描錯誤詳細資訊:-------------------------------------------------------------- 錯誤: Spectrum 掃描錯誤代碼: 15007 個內容: 禁止: HTTP 回應錯誤代碼: 403 則訊息: AccessDenied 拒絕存取」

當您查詢 Redshift Spectrum 表,且 S3 儲存貯體使用 AWS Key Management Service (KMS) 加密金鑰時,您可能會收到以下錯誤訊息:

「SQL 錯誤 [XX000]: 錯誤: Spectrum 掃描錯誤詳細資訊:-------------------------------------------------------------- 錯誤: Spectrum 掃描錯誤代碼: 15007 個內容: 禁止: HTTP 回應錯誤代碼: 403 則訊息: AccessDenied 密文指的是不存在、不存在於此區域,或您無權存取的客戶主金鑰」

若要解決這些錯誤,您必須將具有必要權限的 IAM 政策附加到 Amazon Redshift 所使用的 IAM 角色。如果您使用 AWS KMS key 加密 S3 儲存貯體,那麼您也必須新增使用該金鑰的權限。

解決方法

建立 IAM 政策。然後,將以下政策附加到附加到 Redshift 叢集的 IAM 角色。

附加 AWSGlueConsoleFullAccess AWS 受管政策。

使用以下政策範例,允許對儲存資料的 S3 儲存貯體進行讀取存取:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Allows Redshift to Read S3 bucket specified",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::bucket name/*",
        "arn:aws:s3:::bucket name"
      ]
    }
  ]
}

**注意:**將 bucket name (儲存貯體名稱) 替換為您 S3 儲存貯體的名稱。

對於 AWS KMS key 加密儲存貯體,附加以下 IAM 政策,以提供允許 Redshift Spectrum 解密 Amazon S3 中加密資料的最低權限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Allow Redshift to use the KMS key",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": [
        "arn:aws:kms:region:AWS account ID:key/KMS key ID"
      ]
    }
  ]
}

**注意:**將 region (區域) 替換為您 S3 儲存貯體所在的 AWS 區域。另外,將 AWS 帳戶 ID 替換為您的帳戶 ID,將 KMS 金鑰 ID 替換為 KMS 加密金鑰。

相關資訊

如何建立 Amazon Redshift Spectrum 對 AWS Glue 和 Amazon S3 的跨帳戶存取權?

Amazon Redshift Spectrum 的 IAM 政策

AWS 官方已更新 9 個月前