

 Amazon Redshift ne prendra plus en charge la création de nouveaux UDFs Python à partir du patch 198. Les fonctions Python définies par l’utilisateur existantes continueront de fonctionner normalement jusqu’au 30 juin 2026. Pour plus d’informations, consultez le [ billet de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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
<a name="c-spectrum-iam-policies"></a>

Cette rubrique décrit les autorisations IAM requises pour utiliser 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 Gestion des identités et des accès AWS (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 de plus amples informations, veuillez consulter [Créer des rôles IAM dans Amazon Redshift Spectrum](#c-spectrum-chaining-roles).

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](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html) dans le *[guide du AWS Glue développeur](https://docs.aws.amazon.com/glue/latest/dg/)*.

**Topics**
+ [Autorisations Amazon S3](#spectrum-iam-policies-s3)
+ [Cross-account Autorisations Amazon S3](#spectrum-iam-policies-cross-account)
+ [Politiques visant à accorder ou restreindre l’accès à l’aide de Redshift Spectrum](#spectrum-iam-policies-spectrum-only)
+ [Politiques visant à accorder des autorisations minimales](#spectrum-iam-policies-minimum-permissions)
+ [Créer des rôles IAM dans Amazon Redshift Spectrum](#c-spectrum-chaining-roles)
+ [Contrôle de l'accès au AWS Glue Catalogue de données](#c-spectrum-glue-acess)

## Autorisations Amazon S3
<a name="spectrum-iam-policies-s3"></a>

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](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html). 

**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.

------
#### [ JSON ]

****  

```
{
	"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é `amzn-s3-demo-bucket`.

------
#### [ JSON ]

****  

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

------

## Cross-account Autorisations Amazon S3
<a name="spectrum-iam-policies-cross-account"></a>

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 la section [Octroi d'autorisations de Cross-Account bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Example permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}: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
<a name="spectrum-iam-policies-spectrum-only"></a>

L’exemple suivant autorise l’accès aux compartiments Amazon S3 pour Amazon Redshift. Lorsque vous ajoutez cette politique à un rôle IAM, nous vous recommandons d’utiliser un rôle IAM uniquement utilisé pour Amazon Redshift. Nous vous recommandons également de ne pas réutiliser les rôles existants ni d’ajouter d’autorisations supplémentaires à ce rôle IAM.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucketVersions",
                "s3:ListBucket"
            ],
            "Resource": [ 
                "arn:aws:s3:::amzn-s3-demo-bucket", 
                "arn:aws:s3:::amzn-s3-demo-bucket/*" 
            ]
        }
    ]
}
```

------

## Politiques visant à accorder des autorisations minimales
<a name="spectrum-iam-policies-minimum-permissions"></a>

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

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucketVersions",
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "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.

------
#### [ JSON ]

****  

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

------

## Créer des rôles IAM dans Amazon Redshift Spectrum
<a name="c-spectrum-chaining-roles"></a>

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](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html#authorizing-redshift-service-chaining-roles). 

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 AWS Glue Catalogue de données
<a name="c-spectrum-glue-acess"></a>

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.

**Topics**
+ [Politique pour les opérations de base de données](#c-spectrum-glue-acess-database)
+ [Politique pour les opérations de table](#c-spectrum-glue-acess-tables)
+ [Politique pour des opérations de partition](#c-spectrum-glue-acess-partitions)

### Politique pour les opérations de base de données
<a name="c-spectrum-glue-acess-database"></a>

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.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabase",
                "glue:CreateDatabase"
            ],
            "Resource": [
                "arn:aws:glue:us-west-2:{{111122223333}}:database/example_db",
                "arn:aws:glue:us-west-2:{{111122223333}}: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.

------
#### [ JSON ]

****  

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

------

### Politique pour les opérations de table
<a name="c-spectrum-glue-acess-tables"></a>

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.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:CreateTable"
            ],
            "Resource": [
                "arn:aws:glue:us-west-2:{{111122223333}}:catalog",
                "arn:aws:glue:us-west-2:{{111122223333}}:database/example_db",
                "arn:aws:glue:us-west-2:{{111122223333}}: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.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetTables"
            ],
            "Resource": [
                "arn:aws:glue:us-west-2:{{111122223333}}:catalog",
                "arn:aws:glue:us-west-2:{{111122223333}}:database/example_db",
                "arn:aws:glue:us-west-2:{{111122223333}}:table/example_db/example_tbl0",
                "arn:aws:glue:us-west-2:{{111122223333}}: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.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetTable",
                "glue:UpdateTable"
            ],
            "Resource": [
                "arn:aws:glue:us-west-2:{{111122223333}}:catalog",
                "arn:aws:glue:us-west-2:{{111122223333}}:database/example_db",
                "arn:aws:glue:us-west-2:{{111122223333}}: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.

------
#### [ JSON ]

****  

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

------

### Politique pour des opérations de partition
<a name="c-spectrum-glue-acess-partitions"></a>

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.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetTable",
                "glue:BatchCreatePartition"
            ],
            "Resource": [
                "arn:aws:glue:us-west-2:{{111122223333}}:catalog",
                "arn:aws:glue:us-west-2:{{111122223333}}:database/example_db",
                "arn:aws:glue:us-west-2:{{111122223333}}: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.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetPartitions",
                "glue:GetTables",
                "glue:GetTable"
            ],
            "Resource": [
                "arn:aws:glue:us-west-2:{{111122223333}}:catalog",
                "arn:aws:glue:us-west-2:{{111122223333}}:database/example_db",
                "arn:aws:glue:us-west-2:{{111122223333}}: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.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetPartition",
                "glue:UpdatePartition"
            ],
            "Resource": [
                "arn:aws:glue:us-west-2:{{111122223333}}:catalog",
                "arn:aws:glue:us-west-2:{{111122223333}}:database/example_db",
                "arn:aws:glue:us-west-2:{{111122223333}}: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.

------
#### [ JSON ]

****  

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

------