Amazon Redshift と同じアカウントの Amazon S3 バケットで Redshift Spectrum を使用してアクセス拒否エラーを解決する方法を教えてください。

所要時間2分
0

Amazon Redshift クラスターと同じアカウント内の Amazon Simple Storage Service (Amazon S3) バケットに保存されているデータにアクセスしたいと考えています。また、データカタログとして AWS Glue を使用した Amazon Redshift Spectrum を使用してデータにアクセスしたいと考えています。ところが、アクセス許可エラーが表示されます。

簡単な説明

Redshift クラスターにアタッチされている AWS Identity and Access Management (IAM) ロールには、AWS Glue および 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 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 バケットが KMS キーを使用して暗号化されている場合は、キーを使用するアクセス許可もアタッチする必要があります。

解決方法

AWS マネージドポリシー AWSGlueConsoleFullAccess を Redshift クラスターにアタッチされている IAM ロールにアタッチします。

次の例を使用して IAM ポリシーを作成し、そのポリシーを Redshift クラスターにアタッチされている IAM ロールにアタッチします。これにより、データが保存されている S3 バケットへの読み取りアクセスが可能になります。

**注意:**bucket name はお客様の 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>"
      ]
    }
  ]
}

Redshift Spectrum が使用している S3 バケットが AWS KMS 暗号化キーを使用して暗号化されている場合は、次の IAM ポリシーを作成してアタッチします。Redshift クラスターにアタッチされている IAM ロールにポリシーをアタッチします。このポリシーは、Redshift Spectrum が Amazon S3 内の暗号化されたデータを復号化できるようにアクセスを提供します。以下は、復号化を許可する最小権限の例です。

注意:****リージョンは使用している S3 バケットが置かれている AWS リージョンに置き換え、AWS アカウント ID は使用しているアカウント ID に置き換え、KMS キー ID は KMS 暗号化キーに置き換えてください。

{
  "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>"
      ]
    }
  ]
}

関連情報

AWS Glue と Amazon S3 に対する Amazon Redshift Spectrum のクロスアカウントアクセスを作成するにはどうすればいいですか?

Amazon Redshift Spectrum 用の IAM ポリシー

AWS公式
AWS公式更新しました 1年前
コメントはありません