スキップしてコンテンツを表示

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 Error [XX000]: ERROR: User: arn:aws:sts::111111111111:assumed-role/KCARole/RedshiftIamRoleSession is not authorized to perform: glue:CreateDatabase on resource: arn:aws:glue:eu-west-1:111111111111:catalog because no identity-based policy allows the glue:CreateDatabase action

Redshift Spectrum テーブルをクエリする際、次のエラーメッセージが表示される場合があります。

SQL Error [XX000]: ERROR: Spectrum Scan Error Detail: ----------------------------------------------- error: Spectrum Scan Error code: 15007 context: Forbidden: HTTP response error code: 403 Message: AccessDenied Access Denied

Redshift Spectrum テーブルをクエリする際、S3 バケットが AWS Key Management Service (AWS KMS) 暗号化キーを使用している場合、次のエラーメッセージが表示される場合があります。

SQL Error [XX000]: ERROR: Spectrum Scan Error Detail: ----------------------------------------------- error: Spectrum Scan Error code: 15007 context: Forbidden: HTTP response error code: 403 Message: AccessDenied The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access (暗号文が参照するカスタマーマスターキーは、存在しないか、リージョン内にありません。または、アクセスが許可されていません)

これらのエラーを解決するには、Amazon Redshift が使用する IAM ロールに対し、必要なアクセス許可を含む IAM ポリシーをアタッチする必要があります。S3 バケットが AWS KMS キーを使用して暗号化されている場合は、そのキーを使用するためのアクセス許可も追加する必要があります。

解決策

IAM ポリシーを作成します。次に、Redshift クラスターにアタッチされている IAM ロールに以下のポリシーをアタッチします。

AWS マネージドポリシー AWSGlueConsoleFullAccess をアタッチします。

データを保存する 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 キーで暗号化されたバケットには、次の 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 account ID をアカウント ID に、KMS key ID を KMS 暗号化キーに置き換えます。

関連情報

AWS Glue と Amazon S3 に、Amazon Redshift Spectrum へのクロスアカウントアクセスを付与する方法を教えてください

Amazon Redshift Spectrum 用の IAM ポリシー

AWS公式更新しました 10ヶ月前
コメントはありません