IAM-Richtlinien für Amazon Redshift Spectrum - Amazon Redshift

IAM-Richtlinien für Amazon Redshift Spectrum

Standardmäßig verwendet Amazon Redshift Spectrum den AWS Glue Data Catalog in AWS-Regionen, die AWS Glue unterstützen. In anderen AWS-Regionen verwendet Redshift Spectrum den Athena-Datenkatalog. Ihr Cluster benötigt die Autorisierung zum Zugriff auf Ihren externen Datenkatalog in AWS Glue oder Athena und Ihre Datendateien in Amazon S3. Sie gewähren diese Berechtigung durch die Referenzierung einer AWS Identity and Access Management- (IAM) Rolle, die mit Ihrem Cluster verbunden ist. Wenn Sie einen Apache-Hive-Metastore zur Verwaltung Ihres Datenkatalogs verwenden, müssen Sie keinen Zugriff auf Athena ermöglichen.

Sie können Rollen miteinander verketten. Auf diese Weise kann der Cluster andere Rolle annehmen, die nicht dem Cluster angefügt sind. Weitere Informationen finden Sie unter Verketten von IAM-Rollen in Amazon Redshift Spectrum.

Der AWS Glue-Katalog, auf den Sie zugreifen, kann für mehr Sicherheit verschlüsselt werden. Wenn der AWS Glue-Katalog verschlüsselt ist, benötigen Sie den AWS KMS-Schlüssel für AWS Glue, um auf den AWS Glue-Datenkatalog zugreifen zu können. Weitere Informationen finden Sie unter Verschlüsseln Ihres AWS Glue-Datenkatalogs im AWS Glue-Entwicklerhandbuch.

Anmerkung

Wenn Sie derzeit externe Redshift-Spectrum-Tabellen im Athena-Datenkatalog haben, können Sie Ihren Athena-Datenkatalog zu einem AWS Glue-Datenkatalog migrieren. Zur Verwendung des AWS Glue-Datenkatalogs mit Redshift Spectrum müssen Sie möglicherweise Ihre IAM-Richtlinien ändern. Weitere Informationen finden Sie unter Upgrade auf den AWS Glue-Datenkatalog im Athena-Benutzerhandbuch.

Amazon-S3-Berechtigungen

Ihr Cluster benötigt mindestens GET- und LIST-Zugriff zu Ihrem Amazon-S3-Bucket. Wenn sich der Bucket nicht in demselben AWS-Konto wie der Cluster befindet, muss der Bucket auch dem Cluster den Zugriff auf die Daten erlauben. Weitere Informationen finden Sie unter Amazon Redshift in Ihrem Namen für den Zugriff auf andere AWS-Services autorisieren.

Anmerkung

Der Amazon-S3-Bucket kann keine Bucket-Richtlinie verwenden, die den Zugriff nur auf bestimmte VPC-Endpunkte beschränkt.

Die folgende Richtlinie gewährt GET- und LIST-Zugriff auf alle Amazon-S3-Buckets. Die Richtlinie erlaubt den Zugriff auf Amazon-S3-Buckets für Redshift Spectrum sowie COPY-Vorgänge.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "*" }] }

Die folgende Richtlinie gewährt GET- und LIST-Zugriff auf Ihren Amazon-S3-Bucket mit der Bezeichnung myBucket.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::myBucket/*" }] }

Kontoübergreifende Amazon-S3-Berechtigungen

Um Redshift Spectrum zum Zugriff auf Daten in einem Amazon-S3-Bucket zu berechtigen, der zu einem anderen AWS-Konto gehört, fügen Sie die folgende Richtlinie zum Amazon-S3-Bucket hinzu. Weitere Informationen finden Sie unter Beispiel 2: Bucket-Eigentümer erteilt kontoübergreifende Bucket-Berechtigungen.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::redshift-account:role/spectrumrole" }, "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::bucketname", "arn:aws:s3:::bucketname/*" ] } ] }

Richtlinien zum Gewähren oder Beschränken des Zugriffs mit Redshift Spectrum

Um den Zugriff auf einen Amazon-S3-Bucket nur mit der Verwendung von Redshift Spectrum zu gewähren, fügen Sie eine Bedingung ein, die den Zugriff für den Benutzeragenten AWS Redshift/Spectrum gewährt. Die folgende Richtlinie erlaubt den Zugriff auf Amazon-S3-Buckets nur für Redshift Spectrum. Andere Zugriffsmöglichkeiten, etwa COPY-Operationen, sind ausgeschlossen.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::myBucket/*", "Condition": {"StringEquals": {"aws:UserAgent": "AWS Redshift/Spectrum"}} }] }

Auf ähnliche Weise können Sie eine IAM-Rolle erstellen, die den Zugriff für COPY-Operationen erlaubt, den Zugriff für Redshift Spectrum jedoch ausschließt. Fügen Sie dazu eine Bedingung ein, die dem Benutzeragenten AWS Redshift/Spectrum den Zugriff verweigert. Die folgende Richtlinie erlaubt den Zugriff auf einen Amazon-S3-Bucket, ausgenommen für Redshift Spectrum.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::myBucket/*", "Condition": {"StringNotEquals": {"aws:UserAgent": "AWS Redshift/Spectrum"}} }] }

Richtlinien zum Gewähren von Mindestberechtigungen

Mit der folgenden Richtlinie werden die Mindestberechtigungen gewährt, die zur Verwendung von Redshift Spectrum mit Amazon S3, AWS Glue und Athena erforderlich sind.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::bucketname", "arn:aws:s3:::bucketname/folder1/folder2/*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource": [ "*" ] } ] }

Wenn Sie für Ihren Datenkatalog Athena anstelle von AWS Glue verwenden, setzt die Richtlinie uneingeschränkten Athena-Zugriff voraus. Die folgende Richtlinie gewährt den Zugriff auf Athena-Ressourcen. Wenn sich Ihre externe Datenbank in einem Hive-Metastore befindet, benötigen Sie keinen Athena-Zugriff.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["athena:*"], "Resource": ["*"] }] }

Verketten von IAM-Rollen in Amazon Redshift Spectrum

Wenn Sie eine Rolle an Ihren Cluster anfügen, kann Ihr Cluster diese Rolle übernehmen, um in Ihrem Namen auf Amazon S3, Athena und AWS Glue zuzugreifen. Wenn eine an den Cluster angefügte Rolle keinen Zugriff auf die erforderlichen Ressourcen hat, können Sie mit ihr eine andere Rolle verketten, die möglicherweise zu einem anderen Konto gehört. Ihr Cluster nimmt dann vorübergehend die verkettete Rolle an, um auf die Daten zuzugreifen. Sie können über verkettete Rollen auch kontoübergreifenden Zugriff gewähren. Sie können maximal 10 Rollen miteinander verketten. Jede Rolle in der Kette nimmt die nächste Rolle in der Kette an, bis hin zum Cluster, der die Rolle am Ende der Kette annimmt.

Zum Verketten von Rollen richten Sie eine Vertrauensstellung zwischen den Rollen ein. Eine Rolle, die eine andere Rolle annimmt, muss über eine Berechtigungsrichtlinie verfügen, die es ihr erlaubt, die angegebene Rolle anzunehmen. Die Rolle, die Berechtigungen übergibt, muss wiederum über eine Vertrauensstellung verfügen, die es ihr erlaubt, ihre Berechtigungen an eine andere Rolle zu übergeben. Weitere Informationen finden Sie unter Verketten von IAM-Rollen in Amazon Redshift.

Wenn Sie den Befehl CREATE EXTERNAL SCHEMA ausführen, können Sie Rollen durch Einschluss einer durch Komma getrennten Liste von Rollen-ARNs verketten.

Anmerkung

Die Liste der verketteten Rollen darf keine Leerstellen enthalten.

Im folgenden Beispiel wird MyRedshiftRole an den Cluster angehängt. MyRedshiftRole nimmt die Rolle AcmeData an, die zum Konto 111122223333 gehört.

create external schema acme from data catalog database 'acmedb' region 'us-west-2' iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole,arn:aws:iam::111122223333:role/AcmeData';

Steuern des Zugriffs auf den AWS Glue-Datenkatalog

Wenn Sie AWS Glue für Ihren Datenkatalog verwenden, können Sie differenzierte Zugriffskontrollen für den AWS Glue-Datenkatalog mithilfe Ihrer IAM-Richtlinie festlegen. Beispielsweise können Sie festlegen, dass nur bestimmte Datenbanken und Tabellen für eine spezifische IAM-Rolle bereitgestellt werden.

In den folgenden Abschnitten werden die IAM-Richtlinien für verschiedene Zugriffsebenen für im AWS Glue-Datenkatalog gespeicherte Daten beschrieben.

Richtlinie für Datenbankoperationen

Wenn Sie Benutzern die Berechtigung zum Anzeigen und Erstellen von Datenbanken erteilen möchten, benötigen diese Zugriffsrechte für die Datenbank und den AWS Glue-Datenkatalog.

Mit der folgenden Beispielabfrage wird eine Datenbank erstellt.

CREATE EXTERNAL SCHEMA example_db FROM DATA CATALOG DATABASE 'example_db' region 'us-west-2' IAM_ROLE 'arn:aws:iam::redshift-account:role/spectrumrole' CREATE EXTERNAL DATABASE IF NOT EXISTS

Mit der folgenden IAM-Richtlinie werden die zum Erstellen einer Datenbank benötigten Mindestberechtigungen erteilt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-west-2:redshift-account:database/example_db", "arn:aws:glue:us-west-2:redshift-account:catalog" ] } ] }

Mit der folgenden Beispielabfrage werden die aktuellen Datenbanken aufgelistet.

SELECT * FROM SVV_EXTERNAL_DATABASES WHERE databasename = 'example_db1' or databasename = 'example_db2';

Mit der folgenden IAM-Richtlinie werden die zum Auflisten der aktuellen Datenbanken benötigten Mindestberechtigungen erteilt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-west-2:redshift-account:database/example_db1", "arn:aws:glue:us-west-2:redshift-account:database/example_db2", "arn:aws:glue:us-west-2:redshift-account:catalog" ] } ] }

Richtlinie für Tabellenoperationen

Wenn Sie Benutzern Berechtigungen für View, Create, Drop, Alter oder andere Aktionen für Tabellen erteilen möchten, benötigen sie mehrere Zugriffsarten. Sie benötigen Zugriff auf die Tabellen selbst, die Datenbanken, zu denen sie gehören, und den Katalog.

Mit der folgenden Beispielabfrage wird eine externe Tabelle erstellt.

CREATE EXTERNAL TABLE example_db.example_tbl0( col0 INT, col1 VARCHAR(255) ) PARTITIONED BY (part INT) STORED AS TEXTFILE LOCATION 's3://test/s3/location/';

Mit der folgenden IAM-Richtlinie werden die zum Erstellen einer externen Tabelle benötigten Mindestberechtigungen erteilt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Resource": [ "arn:aws:glue:us-west-2:redshift-account:catalog", "arn:aws:glue:us-west-2:redshift-account:database/example_db", "arn:aws:glue:us-west-2:redshift-account:table/example_db/example_tbl0" ] } ] }

Mit den folgenden Beispielabfragen werden die aktuellen externen Tabellen aufgelistet.

SELECT * FROM svv_external_tables WHERE tablename = 'example_tbl0' OR tablename = 'example_tbl1';
SELECT * FROM svv_external_columns WHERE tablename = 'example_tbl0' OR tablename = 'example_tbl1';
SELECT parameters FROM svv_external_tables WHERE tablename = 'example_tbl0' OR tablename = 'example_tbl1';

Mit der folgenden IAM-Richtlinie werden die zum Auflisten der aktuellen externen Tabellen benötigten Mindestberechtigungen erteilt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:redshift-account:catalog", "arn:aws:glue:us-west-2:redshift-account:database/example_db", "arn:aws:glue:us-west-2:redshift-account:table/example_db/example_tbl0", "arn:aws:glue:us-west-2:redshift-account:table/example_db/example_tbl1" ] } ] }

Mit der folgenden Beispielabfrage wird eine vorhandene Tabelle geändert.

ALTER TABLE example_db.example_tbl0 SET TABLE PROPERTIES ('numRows' = '100');

Mit der folgenden IAM-Richtlinie werden die zum Ändern einer vorhandenen Tabelle benötigten Mindestberechtigungen erteilt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetTable", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:us-west-2:redshift-account:catalog", "arn:aws:glue:us-west-2:redshift-account:database/example_db", "arn:aws:glue:us-west-2:redshift-account:table/example_db/example_tbl0" ] } ] }

Mit der folgenden Beispielabfrage wird eine vorhandene Tabelle entfernt.

DROP TABLE example_db.example_tbl0;

Mit der folgenden IAM-Richtlinie werden die zum Entfernen einer vorhandenen Tabelle benötigten Mindestberechtigungen erteilt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:us-west-2:redshift-account:catalog", "arn:aws:glue:us-west-2:redshift-account:database/example_db", "arn:aws:glue:us-west-2:redshift-account:table/example_db/example_tbl0" ] } ] }

Richtlinie für Partitionsoperationen

Wenn Sie Benutzern die Berechtigung zum Ausführen von Vorgängen auf Partitionsebene (Anzeigen, Erstellen, Entfernen, Ändern usw.) erteilen möchten, benötigen sie Berechtigungen für die Tabellen, zu denen die Partitionen gehören. Sie benötigen darüber hinaus Berechtigungen für die zugehörigen Datenbanken und den AWS Glue-Datenkatalog.

Mit der folgenden Beispielabfrage wird eine Partition erstellt.

ALTER TABLE example_db.example_tbl0 ADD PARTITION (part=0) LOCATION 's3://test/s3/location/part=0/'; ALTER TABLE example_db.example_t ADD PARTITION (part=1) LOCATION 's3://test/s3/location/part=1/';

Mit der folgenden IAM-Richtlinie werden die zum Erstellen einer Partition benötigten Mindestberechtigungen erteilt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetTable", "glue:BatchCreatePartition" ], "Resource": [ "arn:aws:glue:us-west-2:redshift-account:catalog", "arn:aws:glue:us-west-2:redshift-account:database/example_db", "arn:aws:glue:us-west-2:redshift-account:table/example_db/example_tbl0" ] } ] }

Mit der folgenden Beispielabfrage werden die aktuellen Partitionen aufgelistet.

SELECT * FROM svv_external_partitions WHERE schemname = 'example_db' AND tablename = 'example_tbl0'

Mit der folgenden IAM-Richtlinie werden die zum Auflisten der aktuellen Partitionen benötigten Mindestberechtigungen erteilt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetPartitions", "glue:GetTables", "glue:GetTable" ], "Resource": [ "arn:aws:glue:us-west-2:redshift-account:catalog", "arn:aws:glue:us-west-2:redshift-account:database/example_db", "arn:aws:glue:us-west-2:redshift-account:table/example_db/example_tbl0" ] } ] }

Mit der folgenden Beispielabfrage wird eine vorhandene Partition geändert.

ALTER TABLE example_db.example_tbl0 PARTITION(part='0') SET LOCATION 's3://test/s3/new/location/part=0/';

Mit der folgenden IAM-Richtlinie werden die zum Ändern einer vorhandenen Partition benötigten Mindestberechtigungen erteilt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetPartition", "glue:UpdatePartition" ], "Resource": [ "arn:aws:glue:us-west-2:redshift-account:catalog", "arn:aws:glue:us-west-2:redshift-account:database/example_db", "arn:aws:glue:us-west-2:redshift-account:table/example_db/example_tbl0" ] } ] }

Mit der folgenden Beispielabfrage wird eine vorhandene Partition entfernt.

ALTER TABLE example_db.example_tbl0 DROP PARTITION(part='0');

Mit der folgenden IAM-Richtlinie werden die zum Entfernen einer vorhandenen Partition benötigten Mindestberechtigungen erteilt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:DeletePartition" ], "Resource": [ "arn:aws:glue:us-west-2:redshift-account:catalog", "arn:aws:glue:us-west-2:redshift-account:database/example_db", "arn:aws:glue:us-west-2:redshift-account:table/example_db/example_tbl0" ] } ] }