Les utilisateurs disposant d'un accès à plusieurs projets peuvent créer des risques de sécurité en déplaçant des données entre eux. MaxCompute propose une fonctionnalité de protection des données de projet pour contrôler les flux sortants et sécuriser vos données. Cette rubrique décrit la fonctionnalité de protection des données de projet ainsi que les politiques permettant de gérer les flux sortants.
Contexte
Certaines entreprises ont des exigences élevées en matière de sécurité des données. Elles prennent diverses mesures pour prévenir les fuites de données sensibles. Par exemple, les employés ne peuvent exercer leurs fonctions que sur leur lieu de travail et il leur est interdit de sortir du matériel professionnel du bureau. Tous les ports USB des ordinateurs professionnels sont désactivés. Le problème de sécurité lié au transfert de données d'un projet vers un autre peut toutefois se poser.
Prenons l'exemple de l'utilisatrice Alice, qui dispose des autorisations d'accès aux projets Project1 et Project2. Elle possède l'autorisation Select sur la table table1 dans Project1 et l'autorisation CreateTable sur Project2. Dans ce cas, si la fonctionnalité de protection des données de projet est désactivée, Alice peut exécuter l'instruction suivante pour transférer les données de la table table1 depuis Project1 vers Project2. Cette opération entraîne des risques de fuite de données sensibles.
CREATE TABLE project2.table2 AS SELECT * FROM project1.table1;
L'exemple ci-dessus montre qu'un utilisateur disposant simultanément des autorisations d'accès à plusieurs projets MaxCompute peut transférer des données entre ces projets. MaxCompute fournit la fonctionnalité de protection des données de projet. Si un projet contient des données hautement sensibles, son propriétaire doit activer cette fonctionnalité.
Par défaut, la protection des données de projet est désactivée. Un propriétaire de projet peut l'activer en exécutant la commande set projectProtection=true;. Une fois activée, les flux de données sont restreints : les données ne peuvent entrer dans le projet, mais pas en sortir.
Précautions
Après avoir activé la protection des données de projet, tenez compte des points suivants :
Les opérations d'accès aux données interprojets sont bloquées car elles violent les règles de protection des données. Pour créer des exceptions, par exemple pour autoriser le flux sortant de certaines données vers d'autres projets, MaxCompute propose deux stratégies : Politique de flux sortant 1 : Configurer une politique d'exception et Politique de flux sortant 2 : Configurer un projet de confiance.
La fonctionnalité de protection des données de projet contrôle les flux de données, mais pas les autorisations d'accès aux données. Le contrôle des flux de données n'est pertinent que si les utilisateurs disposent des autorisations d'accès aux données.
Dans MaxCompute, la fonctionnalité de partage de ressources basé sur des packages entre projets est indépendante de la fonctionnalité de protection des données de projet. L'effet de ces fonctionnalités s'exclut mutuellement. Le partage de ressources basé sur des packages est prioritaire sur la protection des données de projet. Par exemple, si un utilisateur du projet B reçoit des autorisations d'accès à un objet du projet A via le partage de ressources basé sur des packages, la fonctionnalité de protection des données de projet ne s'applique pas à cet objet.
Politique de flux sortant 1 : Configurer une politique d'exception
Si des opérations d'accès aux données interprojets sont nécessaires, le propriétaire du projet doit configurer à l'avance une politique d'exception pour permettre à un utilisateur spécifié de transférer les données d'un objet spécifié depuis le projet actuel vers un projet cible. Une fois la politique d'exception configurée, les données de l'objet peuvent être transférées vers le projet spécifié, même si la fonctionnalité de protection des données de projet est activée.
Configuration
Client MaxCompute
Configurez la politique d'exception en même temps que vous activez la protection des données de projet. Après la configuration, exécutez la commande SHOW SecurityConfiguration; pour afficher les détails de la politique. Utilisez la commande suivante pour définir une politique d'exception :
SET ProjectProtection=true with exception <policyfile>;
policyfile correspond au fichier de politique d'exception, qui doit être enregistré au format TXT dans le répertoire bin du chemin d'installation du client MaxCompute. Le format du contenu est le suivant.
{
"Version": "1",
"Statement":
[{
"Effect":"Allow",
"Principal":"<Principal>",
"Action":["odps:<Action1>[, <Action2>, ...]"],
"Resource":"acs:odps:*:<Resource>",
"Condition":{
"StringEquals": {
"odps:TaskType":["<Tasktype>"]
}
}
}]
}
|
Paramètre |
Description |
|||
|
Effect |
Indique si le flux sortant des données est autorisé. Définissez la valeur sur Allow. Cette valeur signifie que le flux sortant des données est autorisé. |
|||
|
Principal |
Le compte Alibaba Cloud ou l'utilisateur RAM autorisé à transférer des données hors du projet. |
|||
|
Action |
L'opération de flux sortant autorisée. Pour plus d'informations sur les actions pour différents types d'objets, consultez la section Autorisations MaxCompute. |
|||
|
Resource |
Le projet et l'objet à partir desquels le flux sortant des données est autorisé. Format : |
resources |
functions |
instances}/ |
|
Tasktype |
Le type de tâche pour lequel le flux sortant des données est autorisé. Valeurs valides : DT, SQL et MapReduce. DT indique Tunnel. |
Console MaxCompute
Connectez-vous à la console MaxCompute et sélectionnez une région dans le coin supérieur gauche.
Dans le volet de navigation de gauche, choisissez .
Sur la page Projects, cliquez sur Manage dans la colonne Actions pour le projet cible.
Sur la page Project Settings, cliquez sur l'onglet Parameter Configuration.
Dans la section Permission Properties, cliquez sur Edit.
-
Activez l'option Project Data Protection, cliquez sur Exception à droite, puis saisissez la politique d'exception dans la boîte de dialogue Set Exception.
{ "Version": "1", "Statement": [{ "Effect":"Allow", "Principal":"<Principal>", "Action":["odps:<Action1>[, <Action2>, ...]"], "Resource":"acs:odps:*:<Resource>", "Condition":{ "StringEquals": { "odps:TaskType":["<Tasktype>"] } } }] }Paramètre
Description
Effect
Indique si le flux sortant des données est autorisé. Définissez la valeur sur Allow. Cette valeur signifie que le flux sortant des données est autorisé.
Principal
Le compte Alibaba Cloud ou l'utilisateur RAM autorisé à transférer des données hors du projet.
Action
L'opération de flux sortant autorisée. Pour plus d'informations sur les actions pour différents types d'objets, consultez la section Autorisations MaxCompute.
Resource
Le projet et l'objet à partir desquels le flux sortant des données est autorisé. Format :
`projects//{tables resources
functions
instances}/
`. Pour plus d'informations sur les valeurs des objets, consultez la section Autorisations MaxCompute. Tasktype
Le type de tâche pour lequel le flux sortant des données est autorisé. Valeurs valides : DT, SQL et MapReduce. DT indique Tunnel.
Exemple
-- Enable project data protection and set an exception policy.
-- The policy_file is stored in the bin directory of the MaxCompute client installation path.
set ProjectProtection=true with exception policy_file;
-- The following code shows the content of the policy_file.
{
"Version": "1",
"Statement":
[{
"Effect":"Allow",
"Principal":"ALIYUN$Alice@aliyun.com",
"Action":["odps:Select"],
"Resource":"acs:odps:*:projects/project_test/tables/table_test",
"Condition":{
"StringEquals": {
"odps:TaskType":["DT", "SQL"]
}
}
}]
}
L'exemple ci-dessus montre qu'Alice est autorisée à effectuer l'opération Select sur la table project_test.table_test dans une tâche SQL afin de transférer des données du projet project_test vers d'autres projets.
Si Alice ne dispose pas de l'autorisation Select sur la table project_test.table_test, elle ne pourra pas transférer de données hors du projet, même si la politique d'exception est configurée.
Considérations
Cette méthode peut entraîner des fuites de données en raison d'une erreur de type « time-of-check to time-of-use » (TOCTOU), également appelée condition de concurrence :
-
Description du problème
L'exemple suivant décrit comment un utilisateur transfère des données hors d'un projet.
Étape TOC : l'utilisateur A soumet une demande au propriétaire du projet pour exporter les données de la table t1. Après avoir vérifié que la table t1 ne contient pas de données sensibles, le propriétaire du projet configure une politique d'exception pour autoriser l'utilisateur A à exporter les données de la table t1.
Avant le début de l'étape TOU, d'autres utilisateurs écrivent des données sensibles dans la table t1.
Étape TOU : l'utilisateur A exporte les données de la table t1. Toutefois, les données exportées de la table t1 contiennent les données sensibles écrites par d'autres utilisateurs.
-
Solution
Pour éviter ce problème, nous recommandons au propriétaire du projet de s'assurer qu'aucun autre utilisateur ne peut effectuer l'action Update pour mettre à jour la table, ni les actions Drop et CreateTable pour supprimer la table et en créer une nouvelle portant le même nom. Dans l'exemple précédent, nous recommandons au propriétaire du projet de créer un snapshot de la table t1 lors de l'étape TOC, puis d'utiliser ce snapshot pour configurer la politique d'exception. Assurez-vous également qu'aucun autre utilisateur ne se voit attribuer le rôle Admin.
Politique de flux sortant 2 : Configurer un projet de confiance
Si la fonctionnalité de protection des données de projet est activée pour le projet actuel mais qu'un flux sortant est nécessaire, le propriétaire du projet peut configurer le projet de destination comme un projet de confiance du projet actuel. Ainsi, les données du projet peuvent être transférées vers le projet de confiance. Si plusieurs projets sont spécifiés comme projets de confiance les uns pour les autres, ces projets forment un groupe de projets de confiance. Les données de ces projets ne peuvent être transférées qu'au sein du groupe.
Gestion
Le propriétaire du projet peut exécuter les commandes suivantes pour gérer les projets de confiance :
-
Pour ajouter un projet de confiance au projet actuel, exécutez la commande suivante :
add trustedproject <project_name>; -
Pour supprimer un projet de confiance du projet actuel, exécutez la commande suivante :
remove trustedproject <project_name>; -
Pour interroger tous les projets de confiance du projet actuel, exécutez la commande suivante :
list trustedprojects;
Bonnes pratiques
Pour empêcher strictement le flux sortant des données d'un projet, après avoir activé la protection en exécutant set projectProtection=true;, vous devez également vérifier les configurations suivantes :
Exécutez la commande
list trustedprojects;pour vous assurer qu'aucun projet de confiance n'a été ajouté. Si des projets de confiance existent, évaluez les risques potentiels et exécutez la commanderemove trustedproject <project_name>;pour supprimer ceux qui sont inutiles.Exécutez la commande
show packages;pour vous assurer qu'aucun package n'est utilisé pour partager des données. Si des packages existent, assurez-vous qu'ils ne contiennent pas de données sensibles, ou exécutez la commandedelete package <package_name>;pour supprimer ceux qui sont inutiles.-
Vous pouvez activer la fonctionnalité de protection des données de projet pour un projet afin d'empêcher l'exportation des données hors de celui-ci. L'utilisation de la fonctionnalité de protection des données de projet est similaire à celle de la fonctionnalité utilisée pour migrer des données entre projets. Les scénarios suivants sont pris en charge :
create table <table_in_another_project> as select * from <table_in_a_protected_project>insert overwrite table <table_in_another_project> select * from <table_in_a_protected_project>Écriture des données de table dans des tables d'un autre projet en exécutant des tâches Spark, MapReduce, Graph, Proxima CE et Machine Learning Platform for AI (PAI).
Exécution de la commande Tunnel download pour télécharger les données de table MaxCompute sur votre machine locale. Vous pouvez appeler SDK Tunnel ou utiliser Tunnel via un pilote JDBC (Java Database Connectivity).
Utilisation de la commande
clone tablepour copier les données de table vers une table d'un autre projet.Appel d'une fonction définie par l'utilisateur (UDF) pour écrire les données de table dans des tables d'autres projets.
Appel d'une UDF pour écrire les données de table dans des tables externes MaxCompute.
-
La fonctionnalité de protection des données de projet et le contrôle d'accès Download peuvent être utilisés conjointement pour un projet afin de télécharger des données. Si vous souhaitez télécharger des données depuis un projet, vous devez vérifier si vous disposez des autorisations associées sur ce projet.
Si vous activez la fonctionnalité de protection des données de projet et le contrôle d'accès Download pour un projet, vous pouvez télécharger des données depuis ce projet lorsque vous disposez des autorisations Download et Describe. Une authentification Describe est déclenchée avant que vous puissiez exécuter la commande Tunnel download.
Si vous activez la fonctionnalité de protection des données de projet et désactivez le contrôle d'accès Download pour un projet, vous pouvez télécharger des données depuis ce projet lorsque vous disposez de l'autorisation Select sur le projet et que vous configurez la politique d'exception pour le comportement de téléchargement.
Si vous désactivez la fonctionnalité de protection des données de projet et activez le contrôle d'accès Download pour un projet, vous pouvez télécharger des données depuis ce projet lorsque vous disposez des autorisations Download et Describe.
Si vous désactivez la fonctionnalité de protection des données de projet et le contrôle d'accès Download pour un projet, vous pouvez télécharger des données depuis ce projet lorsque vous disposez de l'autorisation Select sur le projet.