Migrer une charge de travail

Cette page explique comment effectuer une analyse de conformité avant de migrer un projet existant vers un dossier Assured Workloads. Cette analyse compare le projet source et le dossier Assured Workloads de destination pour déterminer les modifications pouvant être nécessaires avant ou après le lancement de la migration. Par exemple, si vous souhaitez déplacer un projet vers un dossier Assured Workloads configuré pour le programme FedRAMP au niveau d'impact modéré, vous pouvez corriger de manière proactive tout cas de non-conformité potentiel qui pourrait survenir avant de déplacer le projet.

Les types de résultats suivants sont renvoyés par l'analyse des déplacements:

  • Le projet source utilise des produits ou des services non compatibles.
  • Le projet source contient des ressources situées dans un emplacement non autorisé.
  • Le projet source est configuré avec des valeurs de contrainte de règle d'administration incompatibles avec le dossier Assured Workloads de destination.

Il est important de connaître ces résultats avant d'essayer de migrer. Par défaut, un dossier Assured Workloads ne peut contenir que des types de ressources correspondant aux services compatibles avec le package de contrôle du dossier. Si votre projet contient des ressources pour un service non compatible avec le package de contrôle du dossier, vous devrez peut-être redéployer ou supprimer ces ressources.

Bien que vous puissiez modifier la liste par défaut des services compatibles d'un dossier Assured Workloads en modifiant sa règle d'administration concernant les restrictions d'utilisation des ressources, autorisant ainsi le déploiement de services non conformes dans votre dossier, le service non conforme et ses ressources seront ignorés par les vérifications de conformité en arrière-plan. Par conséquent, en activant un service non compatible, vous choisissez d'accepter le risque que votre charge de travail ne soit plus conforme.

Avant de commencer

  • Vous pouvez collecter les ID de ressource du projet source et du dossier Assured Workloads de destination.
  • Attribuez ou vérifiez les autorisations IAM sur le projet source et le dossier Assured Workloads de destination pour vous assurer que l'appelant est autorisé à effectuer la migration.

Autorisations IAM requises

Pour effectuer une analyse de la migration, l'appelant doit disposer d'autorisations IAM en utilisant soit un rôle prédéfini qui inclut un plus large ensemble d'autorisations, ou un rôle personnalisé limité aux autorisations minimales nécessaires.

Les autorisations suivantes sont requises :

  • assuredworkloads.workload.get sur la charge de travail de destination
  • cloudasset.assets.searchAllResources sur le projet source
  • orgpolicy.policy.get sur le projet source et le dossier Assured Workloads de destination.

Effectuer une analyse de la migration

Lorsque vous effectuez une analyse sur le projet source et le dossier Assured Workloads de destination, vous devez traiter tous les résultats avant de déplacer le projet vers la destination. Bien que les résultats ne vous empêchent pas de déplacer le projet, ils peuvent entraîner des cas de non-conformité dans le dossier Assured Workloads de destination.

Ces résultats sont de deux types différents:

  • Avertissement: Un résultat d'avertissement s'affiche lorsque le projet source est potentiellement incompatible avec la destination et peut entraîner un non-respect de la conformité. Vous devez examiner les avertissements pour vérifier que l'incompatibilité est acceptable ou doit être corrigée avant le déplacement.
  • Bloqueur: un résultat de blocage se produit lorsqu'une violation de conformité est détectée entre le projet source et la destination. Les éléments bloquants doivent être traités avant de procéder au déplacement.

Les types de résultats suivants sont signalés:

  • Emplacements des ressources: de nombreux packages de contrôle appliquent des restrictions d'emplacement pour que les ressources respectent des exigences de conformité, par exemple si votre projet source contient des ressources situées dans un emplacement non autorisé.

    Pour résoudre ce problème, déplacez les ressources concernées vers des emplacements autorisés, supprimez-les ou modifiez le paramètre de contrainte de règle d'administration gcp.resourceLocations de la cible.

  • Produits/services non compatibles: chaque package de contrôle est compatible avec une liste spécifique de produits et services Google Cloud. Si votre projet utilise un service non compatible avec le package de contrôle du dossier Assured Workloads de destination, il sera répertorié comme résultat.

  • Contraintes liées aux règles d'administration: votre projet source peut être configuré avec des valeurs de contrainte de règle d'administration différentes de la règle en vigueur du dossier Assured Workloads de destination ou non conformes au package de contrôle cible. Cette analyse n'est effectuée que pour les contraintes pertinentes pour le package de contrôle du dossier Assured Workloads de destination. Toutes les valeurs de contrainte du projet ne sont pas évaluées. Plusieurs résultats sont possibles, par exemple les problèmes suivants:

    • Votre projet et la règle en vigueur de la destination ne sont pas compatibles.
    • Votre projet comporte des valeurs de contrainte de règle d'administration qui ne sont pas définies sur la destination, ou inversement.
    • Votre projet comporte des valeurs de contrainte de règle d'administration non conformes au package de contrôle cible.

    Si un bloqueur est détecté pour une contrainte de règle d'administration, la réponse inclut les valeurs attendues conformes au package de contrôle cible. Vous pouvez utiliser ces valeurs attendues pour modifier votre projet avant d'effectuer une migration.

Pour résoudre ce problème, déterminez quelle contrainte de règle d'administration doit être modifiée, puis apportez les modifications requises.

Types de résultats non compatibles

L'analyse de la migration n'est pas compatible avec les types de résultats suivants:

  • Incompatibilités au niveau des ressources pour les contraintes de règle d'administration autres que gcp.resourceLocations. Par exemple, certains packages de contrôle sont configurés avec la contrainte globale gcp.restrictCmekCryptoKeyProjects ou la contrainte compute.disableNestedVirtualization spécifique à Compute Engine. Les incompatibilités avec ces contraintes entre la source et la destination ne sont ni analysées, ni signalées.
  • Fonctionnalités spécifiques au service qui peuvent être désactivées pour un package de contrôle donné. Par exemple, les tests de disponibilité de Cloud Monitoring sont désactivés pour les dossiers IL4 et les fonctions distantes de BigQuery sont désactivées pour les dossiers ITAR. Si votre projet source utilise ces fonctionnalités désactivées, ces incompatibilités ne sont ni analysées, ni signalées.

Analyser le déplacement d'un projet vers un dossier Assured Workloads

La méthode analyzeWorkloadMove effectue une analyse du déplacement du projet source vers le dossier de destination Assured Workloads.

Dans l'exemple de requête ci-dessous, remplacez les paramètres suivants par les vôtres :

  • ENDPOINT_URI: URI du point de terminaison du service Assured Workloads. Cet URI doit être le point de terminaison correspondant à l'emplacement de la charge de travail de destination, par exemple https://us-west1-assuredworkloads.googleapis.com pour une charge de travail régionalisée dans la région us-west1 et https://us-assuredworkloads.googleapis.com pour une charge de travail multirégionale aux États-Unis.
  • DESTINATION_ORGANIZATION_ID: ID d'organisation de la charge de travail de destination vers laquelle le projet source sera migré. Exemple : 919698201234
  • DESTINATION_LOCATION_ID: emplacement de la charge de travail de destination. Par exemple, us-west1 ou us. Elle correspond à la valeur data region de la charge de travail.
  • DESTINATION_WORKLOAD_ID: ID du dossier de destination Assured Workloads où le projet source sera migré. Exemple : 00-701ea036-7152-4780-a867-9f5.
  • SOURCE_PROJECT_ID: paramètre de requête pour l'ID du projet source à migrer. Par exemple : my-project-123
  • ASSET_TYPES : facultatif. Un type d'élément par paramètre de requête, qui filtrera les résultats pour n'afficher que les types spécifiés. Par exemple, cloudresourcemanager.googleapis.com/Project.
  • PAGE_SIZE : facultatif. Paramètre de requête pour le nombre de résultats à renvoyer par page. Par exemple : 5
  • PAGE_TOKEN : facultatif. Paramètre de requête permettant au jeton de poursuivre la pagination des résultats. Par exemple : CiAKGjBpNDd2Nmp2Zml2cXRwYjBpOXA

Méthode HTTP, URL et paramètres de requête:

GET https://[ENDPOINT_URI]/v1/organizations/[DESTINATION_ORGANIZATION_ID]/locations/[DESTINATION_LOCATION_ID]/workloads/[DESTINATION_WORKLOAD_ID]:analyzeWorkloadMove?project=projects/SOURCE_PROJECT_ID&page_size=PAGE_SIZE&page_token=PAGE_TOKEN

Exemple :

GET https://us-west1-assuredworkloads.googleapis.com/v1/organizations/919698298765/locations/us-west1/workloads/00-701ea036-7152-4781-a867-9f5:analyzeWorkloadMove?project=projects/my-project-123&page_size=5&page_token=CiAKGjBpNDd2Nmp2Zml2cXRwYjBpOXA

Vous devriez recevoir une réponse JSON de ce type :

{
  "assetMoveAnalyses": [
    {
      "asset": "//orgpolicy.googleapis.com/projects/130536381852/policies/container.restrictNoncompliantDiagnosticDataAccess",
      "assetType": "orgpolicy.googleapis.com/Policy"
    },
    {
      "asset": "//compute.googleapis.com/projects/my-project-123/global/routes/default-route-9ca6e6b0ab7326f0",
      "assetType": "compute.googleapis.com/Route",
      "analysisGroups": [
        {
          "displayName": "RESOURCE_LOCATIONS",
          "analysisResult": {
            "warnings": [
              {
                "detail": "The asset's location 'global' is incompatible with the gcp.resourceLocations org policy effective at the target. In case of 'global only' assets, this may be ignored."
              }
            ]
          }
        }
      ]
    },
    {
      "asset": "//compute.googleapis.com/projects/my-project-123/regions/europe-west10/subnetworks/default",
      "assetType": "compute.googleapis.com/Subnetwork",
      "analysisGroups": [
        {
          "displayName": "RESOURCE_LOCATIONS",
          "analysisResult": {
            "blockers": [
              {
                "detail": "The asset's location 'europe-west10' is incompatible with the gcp.resourceLocations org policy effective at the target."
              }
            ]
          }
        }
      ]
    },
    {
      "asset": "//serviceusage.googleapis.com/projects/130536381852/services/servicemanagement.googleapis.com",
      "assetType": "serviceusage.googleapis.com/Service"
    },
    {
      "asset": "//serviceusage.googleapis.com/projects/130536381852/services/monitoring.googleapis.com",
      "assetType": "serviceusage.googleapis.com/Service"
    },
    {
      "asset": "//serviceusage.googleapis.com/projects/130536381852/services/bigquerymigration.googleapis.com",
      "assetType": "serviceusage.googleapis.com/Service",
      "analysisGroups": [
        {
          "displayName": "DISALLOWED_SERVICES",
          "analysisResult": {
            "warnings": [
              {
                "detail": "This service is not allowed by the gcp.restrictServiceUsage org policy effective at the target"
              }
            ]
          }
        }
      ]
    },
    {
      "asset": "//cloudresourcemanager.googleapis.com/projects/my-project-123",
      "assetType": "cloudresourcemanager.googleapis.com/Project",
      "analysisGroups": [
        {
          "displayName": "ORG_POLICIES",
          "analysisResult": {
            "warnings": [
              {
                "detail": "constraints/gcp.resourceLocations: Target applies/inherits this custom policy and it is not applied by the source. Upon moving, this policy will get inherited from the target."
              },
              {
                "detail": "constraints/compute.disableInstanceDataAccessApis: Source applies this custom policy and it is not applied by the target."
              },
              {
                "detail": "constraints/cloudkms.allowedProtectionLevels: Source and target set different values for this policy."
              },
              {
                "detail": "constraints/container.restrictNoncompliantDiagnosticDataAccess: Source and target set different values for this policy."
              },
              {
                "detail": "constraints/gcp.restrictServiceUsage: Target applies/inherits this custom policy and it is not applied by the source. Upon moving, this policy will get inherited from the target."
              }
            ],
            "blockers": [
              {
                "detail": "constraints/gcp.resourceLocations: The value applied at the source is not compliant with the target compliance program. The expected allowed values are [us-west4, us-west1, us-west2, us-west3, us-central1, us-east1, us-east4, us-south1, us-central2, us-east5]."
              },
              {
                "detail": "constraints/container.restrictNoncompliantDiagnosticDataAccess: The value applied at the source is not compliant with the target compliance program. The expected value is [true]."
              },
              {
                "detail": "constraints/container.restrictTLSVersion: The value applied at the source is not compliant with the target compliance program. The expected denied values are [TLS_VERSION_1, TLS_VERSION_1_1]."
              }
            ]
          }
        }
      ]
    }
  ],
  "nextPageToken": "Ch8wLDc0MzY3NTExNCwzMzg4ODM1NTM2NDQ0NTg4MDMy"
}

Pour filtrer les résultats par type d'élément spécifique, utilisez le paramètre de requête asset_types:

GET https://assuredworkloads.googleapis.com/v1/organizations/919698298765/locations/us-west1/workloads/00-701ea036-7152-4781-a867-9f5:analyzeWorkloadMove?project=projects/my-project-123&asset_types=cloudresourcemanager.googleapis.com/Project&page_size=5&page_token=CiAKGjBpNDd2Nmp2Zml2cXRwYjBpOXA

Les résultats ne contiendront que des résultats du type spécifié (cloudresourcemanager.googleapis.com/Project):

{
  "assetMoveAnalyses": [
    {
      "asset": "//cloudresourcemanager.googleapis.com/projects/my-project-123",
      "assetType": "cloudresourcemanager.googleapis.com/Project",
      "analysisGroups": [
        {
          "displayName": "ORG_POLICIES",
          "analysisResult": {
            "warnings": [
              {
                "detail": "constraints/gcp.resourceLocations: Target applies/inherits this custom policy and it is not applied by the source. Upon moving, this policy will get inherited from the target."
              },
              {
                "detail": "constraints/compute.disableInstanceDataAccessApis: Source applies this custom policy and it is not applied by the target."
              }
            ],
            "blockers": [
              {
                "detail": "constraints/gcp.resourceLocations: The value applied at the source is not compliant with the target compliance program. The expected allowed values are [us-west4, us-west1, us-west2, us-west3, us-central1, us-east1, us-east4, us-south1, us-central2, us-east5]."
              }
            ]
          }
        }
      ]
    }
  ],
  "nextPageToken": "Ch8wLDc0MzY3NTExNCwzMzg4ODM1NTM2NDQ0NTg4MDMy"
}

Pour filtrer les résultats selon plusieurs types d'éléments, ajoutez chacun d'eux en tant que paramètre de requête supplémentaire:

GET https://assuredworkloads.googleapis.com/v1/organizations/919698298765/locations/us-west1/workloads/00-701ea036-7152-4781-a867-9f5:analyzeWorkloadMove?project=projects/my-project-123&asset_types=cloudresourcemanager.googleapis.com/Project&asset_types=serviceusage.googleapis.com/Service&page_size=5&page_token=CiAKGjBpNDd2Nmp2Zml2cXRwYjBpOXA

Les résultats ne contiendront que les résultats des types spécifiés (cloudresourcemanager.googleapis.com/Project et serviceusage.googleapis.com/Service):

{
  "assetMoveAnalyses": [
    {
      "asset": "//serviceusage.googleapis.com/projects/130536381852/services/bigquerymigration.googleapis.com",
      "assetType": "serviceusage.googleapis.com/Service",
      "analysisGroups": [
        {
          "displayName": "DISALLOWED_SERVICES",
          "analysisResult": {
            "warnings": [
              {
                "detail": "This service is not allowed by the gcp.restrictServiceUsage org policy effective at the target"
              }
            ]
          }
        }
      ]
    },
    {
      "asset": "//cloudresourcemanager.googleapis.com/projects/my-project-123",
      "assetType": "cloudresourcemanager.googleapis.com/Project",
      "analysisGroups": [
        {
          "displayName": "ORG_POLICIES",
          "analysisResult": {
            "warnings": [
              {
                "detail": "constraints/gcp.resourceLocations: Target applies/inherits this custom policy and it is not applied by the source. Upon moving, this policy will get inherited from the target."
              },
              {
                "detail": "constraints/compute.disableInstanceDataAccessApis: Source applies this custom policy and it is not applied by the target."
              }
            ],
            "blockers": [
              {
                "detail": "constraints/gcp.resourceLocations: The value applied at the source is not compliant with the target compliance program. The expected allowed values are [us-west4, us-west1, us-west2, us-west3, us-central1, us-east1, us-east4, us-south1, us-central2, us-east5]."
              }
            ]
          }
        }
      ]
    }
  ],
  "nextPageToken": "Ch8wLDc0MzY3NTExNCwzMzg4ODM1NTM2NDQ0NTg4MDMy"
}

Une fois l'analyse de la migration effectuée, examinez et corrigez les avertissements ou les blocages, puis exécutez à nouveau l'analyse pour vérifier qu'ils ont été résolus. Vous pouvez ensuite déplacer le projet.

Étapes suivantes