Wie behebe ich Fehler des Typs „Zugriff verweigert“ in Redshift Spectrum bei Amazon-S3-Buckets im selben Konto wie Amazon Redshift?

Lesedauer: 3 Minute
0

Ich möchte auf Daten zugreifen, die in Buckets des Amazon Simple Storage Service (Amazon S3) innerhalb desselben AWS-Kontos wie mein Amazon-Redshift-Cluster gespeichert sind. Ich möchte darüber hinaus mit AWS Glue als Datenkatalog auf die Daten in Amazon Redshift Spectrum zugreifen. Aber es werden mir Berechtigungsfehler angezeigt.

Kurzbeschreibung

Die Rolle für AWS Identity and Access Management (IAM), die dem Redshift-Cluster zugeordnet ist, muss über Berechtigungen für AWS Glue und Amazon S3 verfügen. Wenn die IAM-Rolle nicht über die entsprechenden Berechtigungen verfügt, erhältst du möglicherweise eine Fehlermeldung.

Wenn du ein externes Schema erstellst, wird möglicherweise die folgende Fehlermeldung angezeigt:

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

Wenn du eine Redshift-Spectrum-Tabelle abfragst, wird möglicherweise die folgende Fehlermeldung angezeigt:

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

Wenn du eine Redshift-Spectrum-Tabelle abfragst und der S3-Bucket einen Verschlüsselungsschlüssel von AWS Key Management Services (AWS KMS) verwendet, wird möglicherweise die folgende Fehlermeldung angezeigt:

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

Um diese Fehler zu beheben, musst du eine IAM-Richtlinie mit den erforderlichen Berechtigungen an die IAM-Rolle anhängen, die Amazon Redshift verwendet. Wenn du einen AWS-KMS-Schlüssel zum Verschlüsseln des S3-Buckets verwendet hast, musst du auch Berechtigungen zur Verwendung des Schlüssels hinzufügen.

Lösung

Erstelle eine IAM-Richtlinie. Hänge danach die folgenden Richtlinien an die IAM-Rolle an, die an den Redshift-Cluster angehängt ist.

Hänge die von AWS verwaltete Richtlinie AWSGlueConsoleFullAccess an.

Verwende die folgende Beispielrichtlinie, die den Lesezugriff auf den S3-Bucket ermöglicht, in dem du Daten speicherst:

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

Hinweis: Ersetze den Bucket-Namen durch den Namen deines S3-Buckets.

Füge für einen mit einem AWS-KMS-Schlüssel verschlüsselten Bucket die folgende IAM-Richtlinie hinzu, die die Mindestberechtigungen bereitstellt, damit Redshift Spectrum die verschlüsselten Daten in Amazon S3 entschlüsseln kann:

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

Hinweis: Ersetze die Region durch die AWS-Region, in der sich dein S3-Bucket befindet. Ersetze außerdem die AWS-Konto-ID durch deine Konto-ID und die KMS-Schlüssel-ID durch den KMS-Verschlüsselungsschlüssel.

Ähnliche Informationen

Wie kann ich bei Amazon Redshift Spectrum einen kontoübergreifenden Zugriff auf AWS Glue und Amazon S3 einrichten?

IAM-Richtlinien für Amazon Redshift Spectrum

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Monaten