Comment puis-je utiliser IAM pour restreindre l'accès aux ressources Athena ?

Lecture de 3 minute(s)
0

Je souhaite utiliser AWS Identity and Access Management (IAM) pour restreindre l'accès aux requêtes et aux ressources Amazon Athena.

Brève description

Vous pouvez utiliser des politiques IAM et des entités (utilisateur ou rôle) pour restreindre ou autoriser l'accès aux ressources Athena, telles que les requêtes et les services AWS.

Remarque : Assurez-vous de suivre les meilleures pratiques de sécurité dans IAM.

Résolution

Suivez ces instructions pour vérifier ou fournir les autorisations Athena pour votre cas d'utilisation.

Accès aux emplacements du compartiment Amazon S3

Les requêtes Athena doivent avoir accès au compartiment de données source Amazon Simple Storage Service (Amazon S3) et à l'emplacement du compartiment de résultats de la requête.

Exemple de politique IAM pour fournir l'accès aux emplacements du compartiment S3 :

 {
            "Sid": "BaseQueryResultsPermissions",
            "Effect": "Allow",
            "Action": [
               "s3:GetBucketLocation",
               "s3:GetObject",
               "s3:ListBucket",
               "s3:ListBucketMultipartUploads",
               "s3:ListMultipartUploadParts",
               "s3:AbortMultipartUpload",
               "s3:CreateBucket",
               "s3:PutObject",
               "s3:PutBucketPublicAccessBlock"
            ],
            "Resource": [
               "arn:aws:s3:::Query-Result-Bucket-Name",
               "arn:aws:s3:::Query-Result-Bucket-Name/"
            ]
        }

Remarque : Remplacez Query-Result-Bucket-Name par le nom de votre compartiment.

Si votre requête n'a pas accès à la source S3 et aux compartiments de résultats de la requête, il se peut qu’une erreur Accès refusé s’affiche. Pour plus d'informations, consultez la section Pourquoi l'erreur « Accès refusé » s'affiche-t-elle lorsque j'exécute une requête dans Amazon Athena ?

Autorisations d'accès aux compartiments Amazon S3

Les requêtes Athena doivent également disposer d'autorisations sur les compartiments Amazon S3.

Exemple de politique IAM pour accorder des autorisations aux compartiments S3 :

{
            "Sid": "BaseAthenaExamplesPermissions",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::Glue-Database-Warehouse-Location",
                "arn:aws:s3:::Glue-Database-Warehouse-Location/",
                "arn:aws:s3:::Glue-Table-Location",
                "arn:aws:s3:::Glue-Table-Location/"
            ]
        },
        {
            "Sid": "BaseS3BucketPermissions",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": [
                ""
            ]
        }

Remarque : Remplacez Glue-Database-Warehouse-Location et Glue-Table-Location par vos variables.

Si vous utilisez une clé AWS Key Management Service (AWS KMS) pour assurer le chiffrement, consultez la section Options de chiffrement Amazon S3 prises en charge.

Accès aux groupes de travail Athena

Vous pouvez utiliser des groupes de travail pour contrôler l'accès aux requêtes et les coûts. Consultez des exemples de politiques IAM que vous pouvez utiliser pour donner accès à des groupes de travail pour vos requêtes Athena.

Accès à la base de données et à la table du catalogue de données Glue

Vous pouvez utiliser un contrôle d'accès précis aux bases de données et aux tables du catalogue de données AWS Glue.

Exemple de politique permettant d'accéder à la table du catalogue de données :

{
               "Effect": "Allow",
               "Action": [
                  "glue:GetDatabase",
                  "glue:GetDatabases",
                  "glue:GetTable",
                  "glue:DeleteTable",
                  "glue:GetPartitions",
                  "glue:GetPartition",
                  "glue:DeletePartition",
                  "glue:BatchCreatePartition"
               ],
               "Resource": [
                 "arn:aws:glue:us-east-1:123456789012:catalog",
                 "arn:aws:glue:us-east-1:123456789012:database/example_db",
                 "arn:aws:glue:us-east-1:123456789012:table/example_db/test"
               ]
             },
             {
                "Effect": "Deny",
                "Action": "glue:*",
                "NotResource": [
                  "arn:aws:glue:us-east-1:123456789012:database/example_db",
                  "arn:aws:glue:us-east-1:123456789012:table/example_db/test"
                ]
             }

Remarque : Remplacez example_db et example_db/test par vos variables.

Si votre catalogue de données est chiffré, vous devez ajouter les actions suivantes :

{
"Version": "2012-10-17",
 "Statement": {
"Effect": "Allow",
     "Action": [
           "kms:GenerateDataKey",
           "kms:Decrypt",  
           "kms:Encrypt"
      ],
     "Resource": "arn of the key used to encrypt the catalog"
   }
}

Pour plus d'informations, consultez la section Exemples d'autorisations affinées pour les tables et les bases de données.

Informations connexes

Gestion des identités et des accès dans Athena

Accès entre comptes aux compartiments Amazon S3 dans Athena

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an