Utiliser le mode strict "Agis comme"

Le mode "Agir en tant que" strict active une vérification de sécurité supplémentaire pour les actions utilisateur suivantes dans Dataform :

  • Créer ou mettre à jour un dépôt
  • Créer ou mettre à jour une configuration de workflow
  • Créer un appel de workflow
  • Mettre à jour une configuration de version

Cette vérification de sécurité supplémentaire exige que l'utilisateur effectuant ces actions dispose de l'autorisation iam.serviceAccounts.actAs sur le compte de service effectif, qui est le compte de service dont les identifiants sont utilisés pour exécuter les workflows. Pour en savoir plus, consultez Associer des comptes de service à des ressources.

Le mode "Agir en tant que" strict est appliqué à tous les dépôts.

Rôles requis

Pour obtenir les autorisations nécessaires pour effectuer les tâches décrites dans ce document, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Vérifier les autorisations "Agir en tant que" pour le compte de service effectif

Pour vous assurer que vos workflows Dataform s'exécutent de manière sécurisée et sans interruption, il est important de vérifier les autorisations "Agir en tant que" sur les comptes de service qu'ils utilisent. Cette section explique comment identifier le compte de service effectif pour vos ressources, utiliser Logging pour vérifier les problèmes d'autorisation, puis résoudre les problèmes que vous rencontrez.

Déterminer le compte de service effectif

Vous pouvez déterminer le compte de service effectif qui exécute les workflows en fonction du type de ressource et des conditions suivantes :

Type de ressource Compte de service effectif
Dépôts

Compte de service personnalisé configuré pour le dépôt. Un compte de service personnalisé est requis pour tous les dépôts. Ce compte de service est répertorié dans le champ Repository.ServiceAccount.

Configuration du workflow

Pour les nouvelles configurations de workflow, le compte de service personnalisé que vous sélectionnez lorsque vous créez une configuration de workflow est utilisé. Si aucun compte de service n'est sélectionné, le compte de service du dépôt est utilisé.

Appel de workflow

Si le résultat de la compilation est une ressource WORKFLOW_CONFIG, le compte de service effectif de la configuration de workflow est utilisé.

Si vous créez un appel de workflow à partir d'un résultat de compilation, le compte de service répertorié dans le champ WorkflowInvocation.InvocationConfig est utilisé s'il est défini.

Sinon, la valeur par défaut est le compte de service configuré au niveau du dépôt.

Vérifier les problèmes d'autorisation dans Cloud Logging

Pour améliorer la sécurité, Dataform vérifie si l'autorisation iam.serviceAccounts.actAs est manquante sur les comptes de service utilisés par les ressources Dataform.

Les résultats de ces vérifications, y compris les éventuels problèmes d'autorisation, sont enregistrés dans Cloud Logging. Vous devez consulter ces journaux régulièrement pour identifier et accorder les autorisations iam.serviceAccounts.actAs manquantes. La vérification de ces journaux garantit que vos workflows et configurations Dataform continuent de fonctionner sans interruption.

Afficher les journaux dans Cloud Logging

  1. Dans la Google Cloud console, accédez à la page Explorateur de journaux.

    Accéder à l'explorateur de journaux

  2. Sélectionnez le Google Cloud projet dans lequel vous souhaitez vérifier les journaux.

  3. Utilisez l'éditeur de requête pour filtrer les journaux actAs Dataform avec les options suivantes :

    • Pour n'afficher que les vérifications actAs qui ont échoué et qui nécessitent une action, utilisez la requête suivante :

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      jsonPayload.dryRunResult = false
      
    • Pour afficher toutes les vérifications actAs, utilisez la requête suivante :

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      

    Remplacez PROJECT_ID par l'ID de votre Google Cloud projet.

  4. Cliquez sur Exécuter la requête.

Interpréter les entrées de journal

Développez une entrée de journal dans les résultats de la requête pour afficher les champs jsonPayload suivants :

Champ Type Description
dryRunResult Booléen true : la vérification des autorisations a réussi.

false : la vérification a échoué. Le compte principal de l'appelant ne dispose pas de l'autorisation iam.serviceAccounts.actAs sur le compte de service.
caller Chaîne Adresse e-mail du compte principal (utilisateur ou compte de service) qui a lancé l'appel d'API.
serviceAccount Chaîne Compte de service que le compte principal de l'appelant a tenté d'utiliser. Ce champ est généralement présent lorsque le champ dryRunResult est false.
apiMethod Chaîne Méthode de l'API Dataform qui a déclenché la vérification, par exemple, CreateWorkflowInvocation ou UpdateRepository.
*_context Objet Objet contenant les noms de ressources pertinents pour la méthode d'API appelée. Pour en savoir plus, consultez Objets de contexte.
Objets de contexte

L'entrée de journal inclut un objet de contexte dans les champs jsonPayload. Les champs de cet objet contiennent les noms de ressources complets Google Cloud des entités Dataform impliquées. Ces noms suivent les structures standards présentées dans la liste suivante, ce qui vous permet d'identifier précisément les ressources.

  • create_workflow_invocation_context: présent lorsque la méthode d'API est CreateWorkflowInvocation.

    • workflowInvocation : nom de ressource de l'appel de workflow.
      • Le format du nom de ressource est le suivant: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID.
    • compilationResult ou workflowConfig : nom de ressource de la source utilisée pour l'appel.
      • Le format du nom de ressource pour compilationResult est le suivant : projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID.
      • Le format du nom de ressource pour workflowConfig est le suivant : projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
  • create_repository_context ou update_repository_context : présent lorsque la méthode d'API est CreateRepository ou UpdateRepository.

    • repository : nom de ressource du dépôt Dataform.
      • Le format du nom de ressource est le suivant : projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
  • update_release_config_context: présent lorsque la méthode d'API est UpdateReleaseConfig.

    • releaseConfig : nom de ressource de la configuration de version.
      • Le format du nom de ressource est le suivant : projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID.
  • create_workflow_config_context ou update_workflow_config_context : présent lorsque la méthode d'API est CreateWorkflowConfig ou UpdateWorkflowConfig.

    • workflowConfig : nom de ressource de la configuration de workflow.
      • Le format du nom de ressource est le suivant : projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.

Pour comparer les formats documentés à l'entrée de journalisation, remplacez les éléments suivants :

  • PROJECT_ID : identifiant unique de votre Google Cloud projet.
  • LOCATION_ID: région dans laquelle se trouve votre dépôt Dataform.
  • REPOSITORY_ID: ID défini par l'utilisateur du dépôt Dataform. Il s'agit du nom attribué au dépôt lors de sa création.
  • COMPILATION_RESULT_ID: identifiant unique généré par le système pour un résultat de compilation Dataform.
  • RELEASE_CONFIG_ID: ID défini par l'utilisateur de la configuration de version Dataform.
  • WORKFLOW_CONFIG_ID: ID défini par l'utilisateur de la configuration de workflow Dataform.

Résoudre les problèmes d'autorisation

Pour résoudre les problèmes d'autorisation identifiés dans Logging, déterminez la cause première de l'échec, puis suivez les étapes de résolution correspondantes.

Accorder les autorisations "Agir en tant que" manquantes

Si vous trouvez des entrées de journal où le champ dryRunResult est false, procédez comme suit :

  1. Dans les détails jsonPayload, notez l'adresse e-mail dans le champ caller pour identifier le compte principal.

  2. Notez l'adresse e-mail dans le champ serviceAccount pour identifier le compte de service.

  3. Vérifiez que le compte principal de l'appelant doit être autorisé à agir en tant que compte de service. L'octroi de cette autorisation permet à l'appelant d'utiliser les autorisations détenues par le compte de service.

  4. Si l'accès est prévu, attribuez le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) au compte principal de l'appelant sur le compte de service cible. Pour en savoir plus, consultez Attribuer les rôles IAM requis.

Une fois le rôle attribué, les futurs journaux pour cette combinaison d'appelant et de compte de service doivent afficher dryRunResult: true.

Gérer l'association de comptes de service multiprojets

Si le dépôt et le compte de service effectif se trouvent dans des projets différents, la requête visant à agir en tant que compte de service peut être bloquée par la contrainte de règle d'administration iam.disableCrossProjectServiceAccountUsage.

Pour résoudre ce problème, consultez Activer l'association des comptes de service à plusieurs projets.

Attribuer les rôles IAM requis

Le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) contient l'iam.serviceAccounts.actAs autorisation, qui est requise pour le mode "Agir en tant que" strict. Lorsque vous utilisez l' API Dataform, vous devez disposer du rôle Utilisateur du compte de service pour le compte de service effectif en fonction de la projects.locations.repositories méthode que vous appelez :

  • create ou patch
    • Si la propriété Repository.ServiceAccount est définie, vous devez disposer du rôle Utilisateur du compte de service pour cette propriété.
    • Si vous appelez la méthode patch, vous devez disposer du rôle Utilisateur du compte de service pour tous les comptes de service effectifs dans toutes les configurations de workflow du dépôt.
  • workflowConfigs.create ou workflowConfigs.patch
    • Vous devez disposer du rôle Utilisateur du compte de service pour le compte de service effectif utilisé dans la configuration de workflow.
  • releaseConfigs.patch
    • Vous devez disposer du rôle Utilisateur du compte de service pour tous les comptes de service effectifs utilisés dans les configurations de workflow à l'aide de cette configuration de version.
  • workflowInvocations.create
    • Vous devez disposer du rôle Utilisateur du compte de service pour le compte de service effectif utilisé dans l'appel de workflow.

Pour attribuer le rôle Utilisateur du compte de service à un compte de service personnalisé, procédez comme suit :

  1. Dans la Google Cloud console, accédez à IAM > Comptes de service.

    Accéder à la page "Comptes de service"

  2. Sélectionnez un projet.

  3. Sur la pagePROJECT_NAME, sélectionnez votre compte de service personnalisé.

  4. Accédez à Comptes principaux ayant accès, puis cliquez sur Accorder l'accès.

  5. Dans le champ Nouveaux comptes principaux, saisissez l'ID de votre agent de service Dataform par défaut.

    L'ID de votre agent de service Dataform par défaut est au format suivant :

    service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
    

    Remplacez PROJECT_NUMBER par le Google Cloud numéro de votre projet.

  6. Dans la liste Sélectionner un rôle, sélectionnez le rôle Utilisateur du compte de service.

  7. Cliquez sur Ajouter un autre rôle , puis sélectionnez le rôle Créateur de jetons du compte de service.

  8. Cliquez sur Enregistrer.

Pour en savoir plus, consultez les rôles requis pour créer une configuration de workflow et rôles requis pour créer une configuration de version

Effets du mode "Agir en tant que" strict sur les versions et les exécutions automatiques

Le mode "Agir en tant que" strict a l'impact suivant sur les versions automatiques des dépôts et les exécutions automatiques des workflows.

Pour les dépôts qui ne sont pas connectés à des dépôts tiers :

  • Vous ne pouvez pas définir de programmation Cron pour les versions automatiques dans les configurations de version. Cette mesure est appliquée pour empêcher le déploiement automatique des modifications de code effectuées par un utilisateur qui ne dispose pas des autorisations iam.serviceAccounts.actAs nécessaires sur les comptes de service en aval.
  • Les exécutions de workflow planifiées à l'aide d'une programmation Cron dans les configurations de workflow restent activées. Pour que ces exécutions automatisées réussissent, vous devez accorder à l'agent de service Dataform par défaut l'autorisation iam.serviceAccounts.actAs sur le compte de service effectif spécifié dans la configuration de workflow.

Pour les dépôts connectés à des dépôts tiers :

Étape suivante