Migrar uma carga de trabalho

Nesta página, descrevemos como realizar uma análise de conformidade antes de migrar um projeto para uma pasta do Assured Workloads. Essa análise compara o projeto de origem e a pasta de destino do Assured Workloads para determinar quais mudanças podem ser necessárias antes ou depois de iniciar a migração. Por exemplo, se você tiver um projeto que quer mover para uma pasta do Assured Workloads configurada para FedRAMP de nível médio, poderá resolver proativamente possíveis violações de compliance antes de mover o projeto.

Os seguintes tipos de descobertas são retornados pela análise de movimento:

  • O projeto de origem usa produtos ou serviços sem suporte.
  • O projeto de origem contém recursos localizados em um local não permitido.
  • O projeto de origem é configurado com valores de restrição de política da organização incompatíveis com a pasta de destino do Assured Workloads.

É importante descobrir essas descobertas antes de tentar fazer uma mudança. Por padrão, uma pasta do Assured Workloads só pode conter tipos de recursos para os serviços com suporte do pacote de controle da pasta. Se o projeto tiver recursos de um serviço que não tem suporte no pacote de controle da pasta, talvez seja necessário reimplantá-los ou removê-los.

É possível alterar a lista padrão de serviços compatíveis para uma pasta do Assured Workloads alterando a política da organização de restrição de uso de recursos, permitindo que serviços não compatíveis sejam implantados na pasta, mas o serviço e os recursos dele serão ignorados pelas verificações de compliance em segundo plano. Portanto, ao ativar um serviço sem suporte, você decide aceitar o risco de que ele possa fazer com que sua carga de trabalho não esteja em conformidade.

Antes de começar

  • Reúna os IDs de recursos do projeto de origem e da pasta Assured Workloads de destino.
  • Atribua ou verifique as permissões do IAM no projeto de origem e na pasta de destino do Assured Workloads para garantir que o autor da chamada esteja autorizado a executar a migração.

Permissões do IAM obrigatórias

Para realizar uma análise de migração, o autor da chamada precisa receber permissões de IAM usando um papel predefinido que inclui um conjunto mais amplo de permissões ou um papel personalizado restrito às permissões mínimas necessárias.

As seguintes permissões são necessárias:

  • assuredworkloads.workload.get na carga de trabalho de destino
  • cloudasset.assets.searchAllResources no projeto de origem
  • orgpolicy.policy.get no projeto de origem e na pasta de destino do Assured Workloads

Como realizar uma análise de migração

Ao realizar uma análise no projeto de origem e na pasta de destino do Assured Workloads, é necessário abordar todas as descobertas antes de mover o projeto para o destino. Embora as descobertas não impeçam você de mover o projeto, elas podem resultar em violações de conformidade na pasta de destino do Assured Workloads.

Essas descobertas são de dois tipos diferentes:

  • Aviso: um aviso ocorre quando o projeto de origem é potencialmente incompatível com o destino e pode resultar em uma violação de conformidade. Os avisos precisam ser investigados para verificar se a incompatibilidade é aceitável ou precisa ser resolvida antes da mudança.
  • Bloqueador: um resultado de bloqueador ocorre quando uma violação de conformidade é detectada entre o projeto de origem e o destino. Os bloqueadores precisam ser resolvidos antes de prosseguir com uma migração.

Os seguintes tipos de descobertas são relatados:

  • Locais de recursos: muitos pacotes de controle aplicam restrições de local para que os recursos atendam aos requisitos de conformidade, por exemplo, se o projeto de origem contiver recursos localizados em um local não permitido.

    Para resolver esse problema, mova os recursos afetados para locais permitidos, exclua-os ou modifique a configuração de restrição da política da organização gcp.resourceLocations do destino.

  • Produtos e serviços sem suporte: cada pacote de controle oferece suporte a uma lista específica de produtos e serviços do Google Cloud. Se o projeto usar um serviço não compatível com o pacote de controle da pasta de destino do Assured Workloads, isso vai ser listado como uma descoberta.

  • Restrições da política da organização: seu projeto de origem pode ser configurado com valores de restrição da política da organização que diferem da política efetiva da pasta de destino do Assured Workloads ou não está em conformidade com o pacote de controle de destino. Essa análise é realizada apenas para restrições relevantes para o pacote de controle da pasta de destino do Assured Workloads. Todos os valores de restrição do projeto não são avaliados. Vários resultados são possíveis, como os seguintes problemas:

    • Seu projeto e a política efetiva do destino são incompatíveis.
    • Seu projeto tem valores de restrição de política da organização que não são definidos no destino ou vice-versa.
    • Seu projeto tem valores de restrição de política da organização que não são compatíveis com o pacote de controle de destino.

    Se um bloqueador for encontrado para uma restrição de política da organização, a resposta vai incluir os valores esperados que estão em conformidade com o pacote de controle de destino. Você pode usar esses valores esperados para fazer alterações no projeto antes de executar uma migração.

Para resolver esse problema, determine qual restrição de política da organização precisa ser modificada e faça as alterações necessárias.

Tipos de descoberta não compatíveis

A análise de migração não oferece suporte aos seguintes tipos de descobertas:

  • Incompatibilidades no nível do recurso para restrições da política da organização diferentes de gcp.resourceLocations. Por exemplo, alguns pacotes de controle são configurados com a restrição global gcp.restrictCmekCryptoKeyProjects ou a restrição compute.disableNestedVirtualization específica do Compute Engine. As incompatibilidades com essas restrições entre a origem e o destino não são analisadas nem relatadas.
  • Recursos específicos do serviço que podem ser desativados para um determinado pacote de controle. Por exemplo, as verificações de tempo de atividade do Cloud Monitoring são desativadas para pastas IL4, e as funções remotas do BigQuery são desativadas para pastas ITAR. Se o projeto de origem usar esses recursos desativados, essas incompatibilidades não serão analisadas nem relatadas.

Como analisar a movimentação de um projeto para uma pasta do Assured Workloads

O método analyzeWorkloadMove realiza uma análise ao mover o projeto de origem para a pasta Assured Workloads de destino.

No exemplo de solicitação abaixo, substitua os seguintes parâmetros pelos seus:

  • ENDPOINT_URI: o URI do endpoint de serviço do Assured Workloads. Esse URI precisa ser o endpoint correspondente ao local da carga de trabalho de destino, como https://us-west1-assuredworkloads.googleapis.com para uma carga de trabalho regionalizada na região us-west1 e https://us-assuredworkloads.googleapis.com para uma carga de trabalho multirregional nos EUA.
  • DESTINATION_ORGANIZATION_ID: o ID da organização da carga de trabalho de destino para que o projeto de origem será migrado. Exemplo: 919698201234
  • DESTINATION_LOCATION_ID: o local da carga de trabalho de destino. Por exemplo, us-west1 ou us. Ele corresponde ao valor data region da carga de trabalho.
  • DESTINATION_WORKLOAD_ID: o ID da pasta de destino do Assured Workloads para onde o projeto de origem será migrado. Por exemplo: 00-701ea036-7152-4780-a867-9f5
  • SOURCE_PROJECT_ID: parâmetro de consulta para o ID do projeto de origem a ser migrado. Por exemplo: my-project-123
  • ASSET_TYPES: opcional. Um tipo de recurso por parâmetro de consulta que vai filtrar as descobertas apenas para os tipos especificados. Exemplo: cloudresourcemanager.googleapis.com/Project
  • PAGE_SIZE: opcional. Parâmetro de consulta para o número de resultados a serem retornados por página. Por exemplo: 5
  • PAGE_TOKEN: opcional. Parâmetro de consulta do token para continuar os resultados paginados. Por exemplo: CiAKGjBpNDd2Nmp2Zml2cXRwYjBpOXA

Método HTTP, URL e 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

Exemplo:

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

Você receberá uma resposta JSON semelhante a esta:

{
  "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 as descobertas por um tipo de recurso específico, use o 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

Os resultados conterão apenas as descobertas do 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 as descobertas por mais de um tipo de recurso, adicione cada um deles como um parâmetro de consulta extra:

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

Os resultados conterão apenas qualquer descoberta dos tipos especificados (cloudresourcemanager.googleapis.com/Project e 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"
}

Depois de realizar a análise de migração, revise e resolva todos os avisos ou bloqueadores e execute a análise novamente para verificar se eles foram resolvidos. Em seguida, é possível prosseguir com a migração do projeto.

A seguir