Politiques IAM pour Amazon Redshift Spectrum - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Politiques IAM pour Amazon Redshift Spectrum

Par défaut, Amazon Redshift Spectrum utilise AWS Glue Data Catalog les régions prises AWS en charge AWS Glue. Dans d'autres AWS régions, Redshift Spectrum utilise le catalogue de données Athena. Votre cluster a besoin d'une autorisation pour accéder à votre catalogue de données externe dans AWS Glue ou Athena et à vos fichiers de données dans Amazon S3. Vous fournissez cette autorisation en faisant référence à un rôle AWS Identity and Access Management (IAM) attaché à votre cluster. Si vous utilisez un métastore Apache Hive pour gérer votre catalogue de données, il n’est pas nécessaire que vous fournissiez un accès à Athena.

Vous pouvez créer des chaînes de rôles pour permettre à votre cluster d’endosser d’autres rôles non attachés au cluster. Pour plus d’informations, consultez Créer des rôles IAM dans Amazon Redshift Spectrum.

Le AWS Glue catalogue auquel vous accédez peut être crypté pour renforcer la sécurité. Si le AWS Glue catalogue est crypté, vous avez besoin de la AWS KMS clé AWS Glue pour accéder au catalogue de AWS Glue données. Pour plus d'informations, consultez la section Chiffrer votre catalogue de AWS Glue données dans le guide du AWS Glue développeur.

Autorisations Amazon S3

Au minimum, votre cluster a besoin d’un accès GET et LIST à votre compartiment Amazon S3. Si votre bucket n'est pas dans le même AWS compte que votre cluster, celui-ci doit également autoriser votre cluster à accéder aux données. Pour plus d'informations, consultez Autoriser Amazon Redshift à accéder à AWS d'autres services en votre nom.

Note

Le compartiment Amazon S3 ne peut pas appliquer une politique de compartiment qui restreint l’accès uniquement à partir de points de terminaison VPC spécifiques.

La politique suivante accorde un accès GET et LIST à n’importe quel compartiment Amazon S3. La politique autorise l’accès aux compartiments Amazon S3 pour Redshift Spectrum, ainsi que les opérations COPY.

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

La politique suivante accorde un accès GET et LIST à votre compartiment Amazon S3 nommé myBucket.

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

Autorisations Amazon S3 entre comptes

Pour autoriser Redshift Spectrum à accéder aux données d'un compartiment Amazon S3 appartenant à un autre AWS compte, ajoutez la politique suivante au compartiment Amazon S3. Pour plus d’informations, consultez Accorder des autorisations entre comptes sur un compartiment.

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

Politiques visant à accorder ou restreindre l’accès à l’aide de Redshift Spectrum

Pour accorder l’accès à un compartiment Amazon S3 uniquement en utilisant Redshift Spectrum, incluez une condition qui autorise l’accès pour l’agent utilisateur AWS Redshift/Spectrum. La politique suivante autorise l’accès aux compartiments Amazon S3 uniquement pour Redshift Spectrum. Elle exclut les autres accès, notamment les opérations COPY.

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

De même, vous pouvez souhaiter créer un rôle IAM qui autorise l’accès pour les opérations COPY, mais exclut l’accès de Redshift Spectrum. Pour ce faire, incluez une condition qui refuse l’accès pour l’agent utilisateur AWS Redshift/Spectrum. La politique suivante autorise l’accès à un compartiment Amazon S3 à l’exception de 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"}} }] }

Politiques visant à accorder des autorisations minimales

La politique suivante accorde les autorisations minimales requises pour utiliser Redshift Spectrum avec Amazon S3 et AWS Glue Athena.

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

Si vous utilisez Athena pour votre catalogue de données à la place de AWS Glue, la politique exige un accès complet à Athéna. La politique suivante donne accès aux ressources Athena. Si votre base de données externe se trouve dans un métastore Hive, vous n’avez pas besoin de l’accès Athena.

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

Créer des rôles IAM dans Amazon Redshift Spectrum

Lorsque vous attachez un rôle à votre cluster, celui-ci peut assumer ce rôle pour accéder à Amazon S3, Athena et en votre AWS Glue nom. Si un rôle attaché à votre cluster n’a pas accès aux ressources nécessaires, vous pouvez créer une chaîne avec un autre rôle, lequel peut appartenir à un autre compte. Votre cluster endosse alors provisoirement le rôle relié par la chaîne afin d’accéder aux données. Vous pouvez également accorder des accès entre comptes en créant des chaînes de rôles. Une chaîne comprend 10 rôles maximum. Chaque rôle de la chaîne passe au rôle suivant, jusqu’à ce que le cluster endosse le dernier rôle de la chaîne.

Pour créer une chaîne de rôles, vous devez établir une relation d’approbation entre ces rôles. Un rôle endossant un autre rôle doit avoir une politique d’autorisation lui permettant d’endosser le rôle spécifié. Le rôle qui transmet les autorisations, quant à lui, doit avoir une politique d’approbation lui permettant de transmettre ses autorisations à un autre rôle. Pour plus d’informations, consultez Création de liens de rôles IAM dans Amazon Redshift.

Lorsque vous exécutez la commande CREATE EXTERNAL SCHEMA, vous pouvez créer des chaînes de rôles en insérant une liste d’ARN de rôles séparés par des virgules.

Note

La liste des rôles de la chaîne ne doit pas inclure d’espaces.

Dans l’exemple suivant, MyRedshiftRole est attaché au cluster. MyRedshiftRole assume le rôle AcmeData qui appartient au compte 111122223333.

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';

Contrôle de l'accès au catalogue AWS Glue de données

Si vous l'utilisez AWS Glue pour votre catalogue de données, vous pouvez appliquer un contrôle d'accès précis au catalogue de AWS Glue données dans le cadre de votre politique IAM. Par exemple, vous pouvez exposer uniquement quelques bases de données et tables à un rôle IAM spécifique.

Les sections suivantes décrivent les politiques IAM pour les différents niveaux d'accès aux données stockées dans le catalogue de AWS Glue données.

Politique pour les opérations de base de données

Si vous souhaitez autoriser les utilisateurs à consulter et à créer une base de données, ils doivent disposer de droits d'accès à la fois à la base de données et au catalogue de AWS Glue données.

L’exemple de requête suivant crée une base de données.

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

La politique IAM suivante fournit les autorisations minimales requises pour créer une base de données.

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

L’exemple de requête suivant dresse la liste des bases de données actuelles.

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

La politique IAM suivante fournit les autorisations minimales requises pour répertorier les bases de données actuelles.

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

Politique pour les opérations de table

Si vous souhaitez octroyer aux utilisateurs les autorisations nécessaires pour créer, supprimer, modifier ou effectuer toute autre action sur les tables, ils ont besoin de plusieurs types d’accès. Ils ont besoin d’accéder aux tables elles-mêmes, aux bases de données auxquelles elles appartiennent et au catalogue.

L’exemple de requête suivant crée une table externe.

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

La politique IAM suivante fournit les autorisations minimales requises pour créer une table externe.

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

Les exemples de requêtes suivants dressent la liste des tables externes actuelles.

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';

La politique IAM suivante fournit les autorisations minimales requises pour répertorier les tables externes actuelles.

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

L’exemple de requête suivant modifie une table existante.

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

La politique IAM suivante fournit les autorisations minimales requises pour modifier une table existante.

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

L’exemple de requête suivant supprime une table existante.

DROP TABLE example_db.example_tbl0;

La politique IAM suivante fournit les autorisations minimales requises pour supprimer une table existante.

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

Politique pour des opérations de partition

Si vous souhaitez accorder à des utilisateurs des autorisations pour effectuer des opérations au niveau des partitions (afficher, créer, supprimer, modifier, etc.), ceux-ci ont besoin d’autorisations sur les tables auxquelles les partitions appartiennent. Ils ont également besoin d’autorisations sur les bases de données associées et le catalogue de données AWS Glue .

L’exemple de requête suivant crée une partition.

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/';

La politique IAM suivante fournit les autorisations minimales requises pour créer une partition.

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

L’exemple de requête suivant dresse la liste des partitions actuelles.

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

La politique IAM suivante fournit les autorisations minimales requises pour répertorier les partitions actuelles.

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

L’exemple de requête suivant modifie une partition existante.

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

La politique IAM suivante fournit les autorisations minimales requises pour modifier une partition existante.

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

L’exemple de requête suivant supprime une partition existante.

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

La politique IAM suivante fournit les autorisations minimales requises pour supprimer une partition existante.

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