Migra una carga de trabajo

En esta página, se describe cómo realizar un análisis de cumplimiento antes de migrar un proyecto existente a una carpeta de Assured Workloads. En este análisis, se compara el proyecto de origen y la carpeta de destino de Assured Workloads para determinar qué cambios podrían requerirse antes o después de iniciar la migración. Por ejemplo, si tienes un proyecto que deseas trasladar a una carpeta de Assured Workloads configurada para FedRAMP Moderado, puedes abordar de forma proactiva cualquier incumplimiento potencial de cumplimiento que pueda ocurrir antes de mover el proyecto.

El análisis de movimiento muestra los siguientes tipos de resultados:

  • El proyecto de origen usa productos o servicios no compatibles.
  • El proyecto de origen contiene recursos que se encuentran en una ubicación no permitida.
  • El proyecto de origen está configurado con valores de restricción de la política de la organización que son incompatibles con la carpeta de destino de Assured Workloads.

Es importante descubrir estos hallazgos antes de intentar migrar. De forma predeterminada, una carpeta de Assured Workloads solo puede contener tipos de recursos para los servicios compatibles con el paquete de control de la carpeta. Si tu proyecto contiene recursos para un servicio que no es compatible con el paquete de control de la carpeta, es posible que debas volver a implementar o quitar esos recursos.

Si bien puedes cambiar la lista predeterminada de servicios compatibles de una carpeta de Assured Workloads si cambias la política de la organización de restricción del uso de recursos (lo que permite que se implementen servicios que no cumplen con las políticas en tu carpeta), las verificaciones de cumplimiento en segundo plano ignorarán el servicio que no cumpla con las políticas y sus recursos. Por lo tanto, si habilitas un servicio no compatible, eliges aceptar el riesgo de que la carga de trabajo no cumpla con las políticas.

Antes de comenzar

  • Recopila los IDs de recursos del proyecto de origen y de la carpeta de destino de Assured Workloads.
  • Asigna o verifica los permisos de IAM en el proyecto de origen y en la carpeta de destino de Assured Workloads a fin de garantizar que el emisor esté autorizado para realizar la migración.

Permisos de IAM obligatorios

Para realizar un análisis de migración, el llamador debe tener permisos de IAM mediante una función predefinida que incluya un conjunto más amplio de permisos o una función personalizada que esté restringida a los permisos mínimos necesarios.

Los siguientes permisos son obligatorios:

  • assuredworkloads.workload.get en la carga de trabajo de destino
  • cloudasset.assets.searchAllResources en el proyecto de origen
  • orgpolicy.policy.get en el proyecto de origen y la carpeta de destino de Assured Workloads

Realiza un análisis de migración

Cuando realizas un análisis en el proyecto de origen y la carpeta de destino de Assured Workloads, debes abordar cualquier resultado antes de mover el proyecto al destino. Aunque los hallazgos no te impiden mover el proyecto, pueden generar incumplimientos de cumplimiento en la carpeta de destino de Assured Workloads.

Estos hallazgos son de dos tipos diferentes:

  • Advertencia: Se muestra un resultado de advertencia cuando el proyecto de origen es potencialmente incompatible con el destino y puede generar un incumplimiento. Se deben investigar las advertencias para verificar que la incompatibilidad sea aceptable o se deba solucionar antes del traslado.
  • Bloqueador: Se produce un resultado de bloqueador cuando se detecta un incumplimiento entre el proyecto de origen y el destino. Los obstáculos deben abordarse antes de continuar con el traslado.

Se informan los siguientes tipos de hallazgos:

  • Ubicaciones de recursos: Muchos paquetes de control aplican restricciones de ubicación para que los recursos cumplan con los requisitos de cumplimiento, por ejemplo, si tu proyecto de origen contiene recursos ubicados en una ubicación no permitida.

    Para resolver este problema, mueve los recursos afectados a las ubicaciones permitidas, bórralos o modifica la configuración de restricción de la política de la organización gcp.resourceLocations del destino.

  • Productos y servicios no compatibles: Cada paquete de control admite una lista específica de productos y servicios de Google Cloud. Si tu proyecto usa un servicio que no es compatible con el paquete de control de la carpeta de destino de Assured Workloads, esto se mostrará como un resultado.

  • Restricciones de las políticas de la organización: Tu proyecto de origen puede estar configurado con valores de restricción de la política de la organización que difieren de la política vigente de la carpeta de Assured Workloads de destino o que no cumplen con el paquete de control de destino. Este análisis solo se realiza para las restricciones que son relevantes para el paquete de control de la carpeta de Assured Workloads de destino. No se evalúan todos los valores de restricciones del proyecto. Existen varios resultados posibles, como los siguientes problemas:

    • Tu proyecto y la política vigente de destino no son compatibles.
    • Tu proyecto tiene valores de restricción de política de la organización que no están configurados en el destino ni viceversa.
    • Tu proyecto tiene valores de restricción de política de la organización que no cumplen con el paquete de control de destino.

    Si se encuentra un bloqueador para una restricción de la política de la organización, la respuesta incluye los valores esperados que cumplen con el paquete de control de destino. Puedes usar estos valores esperados para realizar cambios en tu proyecto antes de realizar una migración.

Para resolver este problema, determina qué restricción de la política de la organización debe modificarse y realiza los cambios necesarios.

Tipos de resultados no admitidos

El análisis de migración no admite los siguientes tipos de hallazgos:

  • Incompatibilidades a nivel de recurso para restricciones de políticas de la organización que no sean gcp.resourceLocations Por ejemplo, algunos paquetes de control se configuran con la restricción global gcp.restrictCmekCryptoKeyProjects o la restricción compute.disableNestedVirtualization específica de Compute Engine. Las incompatibilidades con estas restricciones entre el origen y el destino no se analizan ni se informan.
  • Funciones específicas del servicio que pueden estar inhabilitadas para un paquete de control determinado. Por ejemplo, las verificaciones de tiempo de actividad de Cloud Monitoring están inhabilitadas para las carpetas IL4 y las funciones remotas de BigQuery están inhabilitadas para las carpetas de ITAR. Si tu proyecto de origen usa esas funciones inhabilitadas, esas incompatibilidades no se analizan ni se informan.

Analiza cómo mover un proyecto a una carpeta de Assured Workloads

El método analyzeWorkloadMove realiza un análisis para trasladar el proyecto de origen a la carpeta de destino de Assured Workloads.

En el siguiente ejemplo de solicitud, reemplaza los siguientes parámetros por los tuyos:

  • ENDPOINT_URI: el URI del extremo de servicio de Assured Workloads. Este URI debe ser el extremo que coincida con la ubicación de la carga de trabajo de destino, como https://us-west1-assuredworkloads.googleapis.com para una carga de trabajo regionalizada en la región us-west1 y https://us-assuredworkloads.googleapis.com para una carga de trabajo multirregional en EE.UU.
  • DESTINATION_ORGANIZATION_ID: Es el ID de la organización de la carga de trabajo de destino a la que se migrará el proyecto de origen. Por ejemplo: 919698201234
  • DESTINATION_LOCATION_ID: Es la ubicación de la carga de trabajo de destino. Por ejemplo: us-west1 o us. Corresponde al valor data region de la carga de trabajo.
  • DESTINATION_WORKLOAD_ID: Es el ID de la carpeta de destino de Assured Workloads en la que se migrará el proyecto de origen. Por ejemplo: 00-701ea036-7152-4780-a867-9f5
  • SOURCE_PROJECT_ID: Es el parámetro de consulta para el ID del proyecto de origen que se migrará. Por ejemplo: my-project-123.
  • ASSET_TYPES: Opcional Un tipo de recurso por parámetro de consulta que filtrará los resultados para mostrar solo los tipos especificados. Por ejemplo: cloudresourcemanager.googleapis.com/Project
  • PAGE_SIZE: Opcional Parámetro de consulta para la cantidad de resultados que se muestran por página. Por ejemplo: 5.
  • PAGE_TOKEN: Opcional Es el parámetro de consulta del token para continuar con los resultados paginados. Por ejemplo: CiAKGjBpNDd2Nmp2Zml2cXRwYjBpOXA.

Método HTTP, URL y parámetros de consulta:

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

Por ejemplo:

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

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Para filtrar los resultados por un tipo de recurso específico, usa el parámetro de consulta 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

Los resultados solo contendrán los resultados del tipo especificado (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"
}

Si deseas filtrar los resultados por más de un tipo de recurso, agrega cada uno como un parámetro de consulta adicional:

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

Los resultados solo contendrán los resultados de los tipos especificados (cloudresourcemanager.googleapis.com/Project y 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"
}

Después de realizar el análisis de migración, revisa y resuelve cualquier advertencia o bloqueador y, luego, vuelve a ejecutar el análisis para verificar que se hayan solucionado. Luego, puedes continuar con la mudanza del proyecto.

¿Qué sigue?