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 susceptibles d'être requises 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 niveau d'impact modéré du programme FedRAMP, vous pouvez résoudre de manière proactive les cas de non-conformité potentiels qui pourraient se produire avant de déplacer le projet.

L'analyse du déplacement renvoie les types de résultats suivants:

  • Le projet source utilise des produits ou 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 les découvrir avant de tenter de déplacer un élément. Par défaut, un dossier Assured Workloads ne peut contenir que des types de ressources pour les 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 pris en charge pour une le dossier Assured Workloads en modifiant Règle d'administration relative à la restriction d'utilisation des ressources ce qui permet de déployer des services non conformes dans votre dossier. le service non conforme et ses ressources seront ignorés par l'arrière-plan de conformité. Par conséquent, en activant un service non pris en charge, choisir d'accepter le risque que cela peut faire tomber votre charge de travail de conformité.

Avant de commencer

  • Rassembler les ID de ressource des projets source et de destination Dossier Assured Workloads.
  • Attribuez ou vérifiez les autorisations IAM sur les projet source et le dossier Assured Workloads de destination vers pour s'assurer que l'appelant est autorisé à effectuer la migration.

Autorisations IAM requises

Pour effectuer une analyse de migration, l'appelant doit disposer d'autorisations IAM à l'aide d'un rôle prédéfini qui comprend un ensemble d'autorisations plus étendu, ou d'un rôle personnalisé limité aux autorisations minimales nécessaires.

Les autorisations suivantes sont requises :

  • assuredworkloads.workload.get sur la destination charge de travail
  • 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 migration

Lorsque vous effectuez une analyse sur le projet source et la destination Assured Workloads, vous devez examiner les résultats avant de déplacer le projet vers la destination. Bien que les résultats ne vous empêchent pas au déplacement du projet, cela peut entraîner des cas de non-conformité Dossier Assured Workloads.

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

  • Avertissement : Un résultat d'avertissement se produit lorsque le projet source est potentiellement incompatible avec la destination et peut entraîner un non-respect des règles. Les avertissements doivent être examinés afin de vérifier que l'incompatibilité est ou doit être traité avant la migration.
  • Bloqueur: résultat de blocage se produit lorsqu'un cas de non-conformité est détecté. entre le projet source et la destination. Les obstacles doivent être résolus avant de procéder à un transfert.

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

  • Emplacements des ressources : de nombreux packages de contrôle appliquent des restrictions d'emplacement pour que les ressources respectent les 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 accepte 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, cela sera indiqué comme une anomalie.

  • 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 celles du dossier de destination des charges de travail assurées, ou non conformes au package de contrôle cible. Cette analyse n'est effectuée que contraintes pertinentes pour la destination Assured Workloads le package de contrôle du dossier ; toutes les valeurs de contrainte du projet ne sont pas évalué. Plusieurs résultats sont possibles, y compris 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 l'inverse.
    • Votre projet contient des valeurs de contrainte de règle d'administration qui ne sont pas 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 aux spécifications d'un package. Vous pouvez utiliser ces valeurs attendues pour apporter des modifications à 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ées, et apportez les modifications requises.

Types de résultats non compatibles

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

  • Incompatibilités au niveau des ressources pour les contraintes de règles d'administration (autres) que gcp.resourceLocations. Par exemple, certains packages de contrôle sont configuré avec la contrainte globale gcp.restrictCmekCryptoKeyProjects, ou le compute.disableNestedVirtualization spécifique à Compute Engine constraint; des incompatibilités avec ces contraintes entre la source destination ne sont pas analysées ni signalées.
  • Fonctionnalités spécifiques à un service pouvant être désactivées pour un package de contrôles donné. Par exemple, les vérifications de l'état de fonctionnement de Cloud Monitoring sont désactivées pour les dossiers IL4 et les fonctions à distance 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 pas analysées ni signalées.

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

La méthode analyzeWorkloadMove analyse le 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: Assured Workloads URI du point de terminaison du service. 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 de l'organisation de la charge de travail de destination vers laquelle le projet source sera migré. Exemple : 919698201234
  • DESTINATION_LOCATION_ID: emplacement de la destination charge de travail spécifique. Par exemple, us-west1 ou us. Il correspond à la valeur data region de la charge de travail.
  • DESTINATION_WORKLOAD_ID : ID du dossier de charges de travail Assured de destination vers lequel le projet source sera migré. Exemple : 00-701ea036-7152-4780-a867-9f5.
  • SOURCE_PROJECT_ID: paramètre de requête pour l'ID de la source. projet à migrer. Par exemple : my-project-123
  • ASSET_TYPES : facultatif. Un type d'élément par paramètre de requête, qui filtre les résultats uniquement sur le ou 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 par page. Par exemple : 5
  • PAGE_TOKEN : facultatif. Paramètre de requête du jeton pour continuer dans les résultats paginés. 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 selon un type d'élément spécifique, utilisez la 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 contiennent que les 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 de composants, ajoutez chacun d'eux en tant que paramètre de requête:

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"
}

Après avoir effectué l'analyse de la migration, examinez et corrigez tous les avertissements ou blocages, puis exécutez à nouveau l'analyse pour vérifier qu'ils ont été résolus. Ensuite, vous pouvez passer à le déplacement du projet.

Étape suivante