Pourquoi mon utilisateur IAM a-t-il accès aux ressources du catalogue de données même après la restriction de ses autorisations dans Lake Formation ?

Dernière mise à jour : 25/03/2021

J'ai restreint les autorisations de table pour un utilisateur dans AWS Lake Formation (par exemple, SELECT avec ExcludedColumnNames). Cependant, celui-ci peut toujours interroger la table en utilisant Amazon Athena.

Brève description

Lake Formation accorde l'autorisation Super aux utilisateurs IAMAllowedPrincipals par défaut. Cette autorisation s'applique à toutes les ressources existantes du catalogue de données AWS Glue. Si Use only IAM access control (Utiliser uniquement le contrôle d'accès IAM) est activé, alors Lake Formation accorde également l'autorisation Super aux nouvelles ressources. Cela signifie que les stratégies AWS Identity and Access Management (IAM) contrôlent l'accès aux ressources du catalogue de données et aux emplacements Amazon Simple Storage Service (Amazon S3). Pour plus d'informations, consultez la section À propos de la mise à niveau vers le modèle d'autorisations Lake Formation.

Pour restreindre l'accès, modifiez les paramètres par défaut pour vous assurer d'utiliser le modèle d'autorisations Lake Formation pour les ressources du catalogue de données nouvelles et existantes.

Solution

Pour mettre à jour les paramètres de sécurité de toutes les nouvelles bases de données et tables de votre lac de données, consultez Modifier les paramètres du catalogue de données.

Pour mettre à jour les paramètres de sécurité uniquement pour certaines nouvelles ressources, vous devrez mettre à jour les autorisations uniquement sur ces ressources après les avoir créées. Pour plus d'informations, consultez Sécuriser les ressources du catalogue de données .

La modification des paramètres de sécurité par défaut s'applique uniquement aux ressources créées après la mise à jour des paramètres de sécurité.

Pour modifier les paramètres de sécurité des bases de données existantes, supprimez explicitement les autorisations de IAMAllowedPrincipals sur chaque base de données en procédant comme suit :

  1. Ouvrez la console AWS Lake Formation.
  2. Dans le volet de navigation, sous Catalogue de données, choisissez Bases de données.
  3. Sélectionnez le cercle en regard de la base de données à mettre à jour.
  4. Choisissez Actions, puis Modifier.
  5. Sous Autorisations par défaut des tables nouvellement créées, désactivez Use only IAM access control for new tables in this database (Utiliser uniquement le contrôle d'accès IAM pour les nouvelles tables de cette base de données).
  6. Sélectionnez Enregistrer.
  7. Sur la page Bases de données, assurez-vous que la base de données est sélectionnée. Choisissez Actions, puis Révoquer.
  8. Dans la boîte de dialogue Révoquer des autorisations, sous la liste Utilisateurs et rôles IAM, faites défiler vers le bas jusqu'à l'en-tête Groupe, puis choisissez IAMAllowedPrincipals.
  9. Sous Autorisations de base de données, vérifiez que Super est sélectionné, puis choisissez Révoquer.

Pour modifier les paramètres de sécurité des tables existantes, supprimez explicitement les autorisations de IAMAllowedPrincipals sur chaque table en procédant comme suit :

  1. Ouvrez la console AWS Lake Formation.
  2. Dans le volet de navigation, choisissez Tables.
  3. Sur la page Tables, sélectionnez le cercle en regard de celle que vous souhaitez mettre à jour.
  4. Choisissez Actions, puis Révoquer.
  5. Dans la boîte de dialogue Révoquer des autorisations, sous la liste Utilisateurs et rôles IAM, faites défiler vers le bas jusqu'à l'en-tête Groupe, puis choisissez IAMAllowedPrincipals.
  6. Sous Autorisations de table, vérifiez que Super est sélectionné, puis choisissez Révoquer.

Remarque : assurez-vous que le chemin d'accès Amazon S3 à la base de données ou à la table est enregistré auprès de Lake Formation.

Après avoir modifié les paramètres de sécurité des ressources existantes, accordez des autorisations de table à l'utilisateur ou au rôle IAM. Vous pouvez le faire à l'aide de la console Lake Formation ou depuis l'interface de ligne de commande AWS (AWS CLI).

Remarque : si vous recevez des erreurs lors de l'exécution des commandes AWS CLI, assurez-vous d'utiliser la version la plus récente d'AWS CLI.

Voici des exemples de commandes CLI qui accordent l'autorisation SELECT sur des colonnes spécifiques :

Autoriser SELECT sur une colonne spécifique uniquement :

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT"  --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnNames": ["prodcode","location","period","withdrawals"]}}'

Exclure les colonnes (autoriser SELECT sur toutes les colonnes à l'exception de la colonne spécifiée sous ExcludedColumnNames) :

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT"  --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnWildcard": {"ExcludedColumnNames": ["location"]}}}'

Pour effectuer des opérations Lake Formation, les mandataires doivent disposer d'autorisations Lake Formation et IAM. Aussi, pour interroger la table dans Athena, l'utilisateur doit avoir l'autorisation d'exécuter des requêtes Athena. Par exemple, pour interroger une table à partir d'Athena lorsque Lake Formation gère les autorisations, l'utilisateur doit disposer des autorisations IAM suivantes :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "minimumAWSGlueLakeFormationAthenapermissiontorunselectqueryontable",
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess",
                "glue:SearchTables",
                "glue:GetTables",
                "glue:GetPartitions",
                "glue:GetDatabases",
                "glue:GetTable",
                "glue:GetDatabase",
                "athena:GetNamespace",
                "athena:ListWorkGroups",
                "athena:GetCatalogs",
                "athena:GetNamespaces",
                "athena:GetExecutionEngine",
                "athena:GetExecutionEngines",
                "athena:GetTables",
                "athena:GetTable"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AthenaPermissionToRunQueryInAWorkergroup",
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:GetQueryResults",
                "athena:DeleteNamedQuery",
                "athena:GetNamedQuery",
                "athena:ListQueryExecutions",
                "athena:StopQueryExecution",
                "athena:GetQueryResultsStream",
                "athena:ListNamedQueries",
                "athena:CreateNamedQuery",
                "athena:GetQueryExecution",
                "athena:BatchGetNamedQuery",
                "athena:BatchGetQueryExecution"
            ],
            "Resource": [
                "arn:aws:athena:*:*:workgroup/*"
            ]
        },
        {
            "Sid": "allowS3PermissionToSaveAthenaQueryResults",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:CreateBucket",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::aws-athena-query-results-*"
            ]
        }
    ]
}

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?