Utiliser le mode strict "Agis comme"

Le mode strict "Agir en tant que" permet d'effectuer un contrôle 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 une invocation de workflow
  • Mettre à jour une configuration de version

Cette vérification de sécurité supplémentaire exige que l'utilisateur qui effectue ces actions dispose de l'autorisation iam.serviceAccounts.actAs sur le compte de service effectif, c'est-à-dire 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.

Vous pouvez activer ces autorisations de différentes manières :

  • Lorsque vous créez un dépôt
  • Lorsque vous mettez à jour un dépôt existant avec l'indicateur de dépôt strict_act_as_checks

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 Cloud Logging pour vérifier s'il existe des 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

Si vous sélectionnez un compte de service personnalisé lorsque vous créez le dépôt, le compte de service Repository.ServiceAccount est utilisé.

Sinon, la valeur par défaut est Agent de service Dataform.

Configuration du workflow

Vous pouvez sélectionner un compte de service personnalisé lorsque vous créez la configuration du workflow.

Sinon, la valeur par défaut est l'agent de service Dataform du dépôt.

Appel de workflow

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

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

Sinon, la valeur par défaut est l'agent de service Dataform du dépôt.

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

Pour renforcer 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 examiner régulièrement ces journaux pour identifier et accorder les autorisations iam.serviceAccounts.actAs manquantes. Vérifier ces journaux permet de s'assurer que vos configurations et workflows Dataform continuent de fonctionner sans interruption.

Afficher les journaux dans Cloud Logging

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

    Accéder à l'explorateur de journaux

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

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

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

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      jsonPayload.dryRunResult = false
      
    • Pour lister 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 du projetGoogle Cloud .

  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) ayant initié 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 défini sur 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 Google Cloud complets des entités Dataform concernées. Ces noms suivent les structures standards indiqué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 API est CreateWorkflowInvocation.

    • workflowInvocation : nom de ressource de l'appel de workflow.
      • Le nom de la ressource est au format suivant : projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID.
    • compilationResult ou workflowConfig : nom de la ressource 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 nom de la ressource est au format suivant : projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
  • update_release_config_context : présent lorsque la méthode API est UpdateReleaseConfig.

    • releaseConfig : nom de ressource de la configuration de publication.
      • Le nom de la ressource est au format 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 API est CreateWorkflowConfig ou UpdateWorkflowConfig.

    • workflowConfig : nom de ressource de la configuration du workflow.
      • Le nom de la ressource est au format 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 projetGoogle Cloud .
  • LOCATION_ID : région où se trouve votre dépôt Dataform.
  • REPOSITORY_ID : ID défini par l'utilisateur pour le dépôt Dataform. Il s'agit du nom donné 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 pour la configuration de version Dataform.
  • WORKFLOW_CONFIG_ID : ID défini par l'utilisateur pour la configuration du workflow Dataform.

Résoudre les problèmes d'autorisation

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

  1. Dans les détails de 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 disposer de l'autorisation d'agir en tant que compte de service. 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 appelant sur le compte de service cible. Pour en savoir plus, consultez Attribuer le rôle IAM "Utilisateur du compte de service".

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

Attribuer le rôle IAM Utilisateur de compte de service

Le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) contient l'autorisation iam.serviceAccounts.actAs, qui est requise pour le mode strict "Agir en tant que". 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 méthode projects.locations.repositories 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 du 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 du workflow.

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

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

    Accéder à la page "Comptes de service"

  2. Sélectionnez un projet.

  3. Sur la page Comptes de service pour le projet "PROJECT_NAME", sélectionnez votre compte de service personnalisé.

  4. Accédez à Comptes principaux avec 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 se présente au format suivant :

    service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
    
  6. Dans la liste Sélectionner un rôle, sélectionnez le rôle Utilisateur du compte de service.

  7. Cliquez sur Enregistrer.

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

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

Lorsque le mode strict "Agir en tant que" est activé, il a un impact sur les versions automatiques du dépôt et les exécutions automatiques du workflow comme suit :

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

  • Vous ne pouvez pas définir de planification Cron pour les versions automatiques dans les configurations de version. Cette règle est appliquée pour empêcher le déploiement automatique des modifications de code apportées par un utilisateur qui ne dispose peut-être 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 du workflow.

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

  • Les versions et les exécutions de workflows planifiées sont autorisées.
  • Pour activer une publication automatique à partir d'une configuration de publication ou une exécution automatique à partir d'une configuration de workflow, vous devez accorder à l'agent de service Dataform par défaut l'autorisation iam.serviceAccounts.actAs sur le compte de service effectif concerné :
    • Pour une configuration de publication automatique, accordez l'autorisation sur les comptes de service effectifs de toutes les configurations de workflow déclenchées par cette configuration de publication.
    • Pour une configuration de workflow automatique, accordez l'autorisation sur le compte de service effectif utilisé par cette configuration de workflow.

Étapes suivantes