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 comparan el proyecto de origen y la carpeta de destino de Assured Workloads para determinar qué cambios podrían ser necesarios antes o después de iniciar la migración. Por ejemplo, si tienes un proyecto que quieres mover a una carpeta de Assured Workloads configurada para FedRAMP Moderate, puedes abordar de forma proactiva cualquier posible incumplimiento de cumplimiento que pueda ocurrir antes de mover el proyecto.

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

  • El proyecto de origen usa productos o servicios no admitidos.
  • El proyecto fuente 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 un traslado. De forma predeterminada, una carpeta de Assured Workloads solo puede contener tipos de recursos para los servicios que admite 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 admitidos para una carpeta de Assured Workloads si modificas su 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, estás aceptando el riesgo de que tu carga de trabajo deje de cumplir con los requisitos.

Antes de comenzar

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

Permisos de IAM obligatorios

Para realizar un análisis de migración, el emisor debe tener permisos de IAM mediante un rol predefinido que incluya un conjunto más amplio de permisos o un rol personalizado que esté restringido 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 en la carpeta de destino de Assured Workloads

Realiza un análisis de migración

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

Estos hallazgos son de dos tipos diferentes:

  • Advertencia: Un resultado de advertencia se produce cuando el proyecto de origen es potencialmente incompatible con el destino y puede generar un incumplimiento de cumplimiento. Se deben investigar las advertencias para verificar que la incompatibilidad sea aceptable o que se deba abordar antes del traslado.
  • Bloqueador: Un resultado bloqueador se produce cuando se detecta un incumplimiento entre el proyecto de origen y el de destino. Se deben abordar los bloqueadores 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 que se encuentran en una ubicación no permitida.

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

  • Productos o 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, este aparecerá como un hallazgo.

  • Restricciones de la política de la organización: Es posible que tu proyecto de origen esté configurado con valores de restricciones de la política de la organización que difieran de la política vigente de la carpeta de cargas de trabajo seguras de destino o que no satisfagan el paquete de control de destino. Este análisis se realiza solo para las restricciones que son relevantes para el paquete de control de la carpeta de destino de Assured Workloads. No se evalúan todos los valores de restricción del proyecto. Existen varios resultados posibles, como los siguientes problemas:

    • Tu proyecto y la política vigente del destino son incompatibles.
    • Tu proyecto tiene valores de restricción de la política de la organización que no están establecidos en el destino, o viceversa.
    • Tu proyecto tiene valores de restricción de la 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 se debe modificar y realiza los cambios necesarios.

Tipos de resultados no admitidos

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

  • Incompatibilidades a nivel de los recursos 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 gcp.restrictCmekCryptoKeyProjects global o la restricción compute.disableNestedVirtualization específica de Compute Engine. No se analizan ni se informan las incompatibilidades con estas restricciones entre la fuente y el destino.
  • Funciones específicas del servicio que se pueden inhabilitar 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 ITAR. Si tu proyecto de origen usa estas funciones inhabilitadas, estas 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 del movimiento del 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: 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: El ID de la carpeta de cargas de trabajo garantizadas de destino a 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 activo por parámetro de consulta que filtrará los resultados solo para los tipos especificados. Por ejemplo: cloudresourcemanager.googleapis.com/Project
  • PAGE_SIZE: Opcional Es un parámetro de consulta para la cantidad de resultados que se mostrarán por página. Por ejemplo: 5.
  • PAGE_TOKEN: Opcional Es un parámetro de consulta para el token que continúa 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 activo 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 hallazgos 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"
}

Para filtrar los resultados por más de un tipo de activo, 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 hallazgos 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 las advertencias o los bloqueadores, y, luego, vuelve a ejecutar el análisis para verificar que se hayan abordado. Luego, puedes continuar con el proceso para trasladar el proyecto.

¿Qué sigue?