Desenvolver aplicativos em um ambiente restrito do Google Cloud

Nossos documentos são frequentemente escritos para ajudar você a colocar um produto ou recurso em funcionamento. No entanto, alguns documentos poderão não funcionar corretamente se sua organização aplicar restrições de segurança. Por exemplo, sua empresa pode implementar algumas das restrições de segurança do Cloud Foundation Toolkit, dos Blueprints de segurança do Google Cloud: ou criar um criativo próprio.

Este artigo ajuda a resolver erros de implantação de aplicativos que você pode ver em uma organização que usa restrições de segurança.

Resolver problemas de restrição de segurança

Sua equipe de operações ou segurança de TI pode ativar restrições de segurança por meio da política da organização. Essas restrições restringem o uso dos recursos da organização.

Quando você faz uma solicitação de API que retorna um erro, a resposta da API informa quando isso acontece por violações da política. A resposta precisa explicar a restrição violada. As etapas de solução de problemas a seguir ajudam você a determinar e entender se ocorre uma violação:

  1. Analise a mensagem de erro de resposta da API. É possível identificar qual restrição de segurança a implantação viola?

    O exemplo a seguir informa que a restrição sql.restrictPublicIp é o problema:

    Organization Policy check failure
    The external IP of this instance violates the constraints/sql.restrictPublicIp enforced
    
  2. Se você entender a violação da política, atualize sua configuração de implantação de recursos para que funcione dentro das restrições.

    No exemplo anterior de restrição de endereços IP públicos externos, configure sua instância do Cloud SQL para usar um endereço IP particular interno.

  3. Se você não souber por que a restrição foi aplicada ou o que fazer, trabalhe com a equipe de segurança para entender onde a política é aplicada na hierarquia da organização e as soluções alternativas sugeridas.

    Verifique se algum modelo de implantação, como os modelos do Terraform, está compartilhado na organização. Esses modelos precisam detalhar como a infraestrutura do Google Cloud foi configurada e limitar a implantação do aplicativo.

Problemas comuns de restrições de segurança

Ao implantar seus aplicativos no Google Cloud, é possível encontrar um erro como o exemplo a seguir:

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

Neste exemplo, não é possível configurar uma instância do Cloud SQL para usar um endereço IP público externo. Uma restrição de segurança está sendo aplicada de uma política aplicada ao seu ambiente.

As restrições de segurança comuns a seguir podem ser ativadas e detalhadas em uma resposta de erro de API conforme você desenvolve os aplicativos.

Compute Engine

Nome da restrição Por que ele foi implementado Alternativa
constraints/compute.disableNestedVirtualization. Evita que um hipervisor compatível com KVM seja instalado dentro da VM. Esse comportamento pode gerar riscos de segurança sem a aplicação de patches e o gerenciamento adequados. Configure sua VM para desativar a virtualização aninhada acelerada por hardware.

Por padrão, ele está ativado para todas as VMs do Compute Engine em execução no Intel Haswell ou em plataformas de CPU mais recentes.
constraints/compute.requireShieldedVm Requer que novas instâncias de VM usem imagens de disco protegidas com as opções de inicialização segura, vTPM e monitoramento de integridade ativadas. Essas opções impedem que a VM seja adulterada e que os dados sejam acessados ou modificados. Não ative VMs protegidas ao criar uma VM.

Para criar um cluster do GKE, você precisa ativar os nós protegidos do GKE.

No momento, o Dataflow não é compatível com workers de VM protegida.
constraints/compute.disableSerialPortAccess Remova vetores de segurança para interagir com uma VM ou visualizar a saída de diagnóstico que poderia ser usada para formar um ataque. Não ative o acesso à porta serial quando criar uma VM.
constraints/compute.disableGuestAttributesAccess Minimize a quantidade de informações sobre o host e a plataforma subjacentes que podem ser usados indevidamente por um app malicioso. Não use a API Compute Engine para ler atributos de convidado das VMs do Compute Engine.
constraints/compute.vmExternalIpAccess Impeça que os aplicativos sejam executados com um endereço IP externo e possam ser acessados pela Internet. Desative o acesso de IP externo das VMs. Só é possível usar um endereço IP particular interno.

O GKE pode usar clusters particulares sem endereços IP públicos.

No momento, o Dataprep e o Dataflow não são compatíveis com endereços IP particulares.

Rede virtual e endereços IP

Nome da restrição Por que ele foi implementado Alternativa
constraints/compute.skipDefaultNetworkCreation Certifique-se de que somente a nuvem privada virtual (VPC) gerenciada pela empresa possa ser criada e que o tráfego de rede ou as regras de filtragem sejam aplicadas. Conecte seus aplicativos às VPCs atuais na sua organização. As VPCs criadas automaticamente não são implantadas para novos projetos.
constraints/compute.restrictXpnProjectLienRemoval. Impeça que uma VPC compartilhada seja excluída acidentalmente quando recursos em outros projetos dependerem dos serviços de rede fornecidos. Não tente excluir uma VPC compartilhada. Verifique se você está segmentando o recurso correto para exclusão.
constraints/sql.restrictPublicIp Impeça que as instâncias do Cloud SQL sejam executadas com um endereço IP externo e possam ser acessadas pela Internet. Não configure a instância do Cloud SQL para usar um endereço IP público externo.

Configure sua instância do Cloud SQL para usar um endereço IP particular interno.

Identidade e autenticação

Nome da restrição Por que ele foi implementado Alternativa
constraints/iam.disableServiceAccountKeyCreation As chaves de conta de serviço podem representar um risco de segurança se forem expostas. Portanto, evite que elas sejam exportadas. Autenticar usando uma alternativa mais segura para as chaves de conta de serviço.
constraints/storage.uniformBucketLevelAccess. Minimize o risco de permissões incorretas ou inconsistentes serem aplicadas a buckets de armazenamento usando apenas o gerenciamento de identidade e acesso (IAM, na sigla em inglês). Ative o acesso uniforme no nível do bucket para proteger seu bucket do Cloud Storage.
constraints/iam.allowedPolicyMemberDomains Restrinja o acesso a recursos do Google Cloud apenas a domínios aprovados. Use uma conta em um dos domínios aprovados. Existem problemas conhecidos adicionais para essa restrição.

Exemplo de erros de resposta da API

No exemplo anterior, de restringir endereços IP públicos externos com o Cloud SQL, uma violação de política faz com que a API retorne um erro. Os exemplos mais detalhados a seguir mostram a resposta da API que informa qual restrição faz com que a solicitação falhe. Veja suas respostas de API para entender por que as implantações de aplicativos falham.

Falha do Cloud SQL com a Google Cloud CLI:

$ gcloud alpha sql instances create mysql-node --project my-sql-project

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

Falha do Cloud SQL com o Terraform:

$ terraform apply plan.out

[...]
module.mysql-db.google_sql_database_instance.default: Creating...

Error: Error, failed to create instance backend01-db-1c81e0e3: googleapi:
Error 400: Invalid request: Organization Policy check failure: the external IP
of this instance violates the constraints/sql.restrictPublicIp enforced at the
123456789 project., invalid

Listar as políticas da organização aplicadas ao seu projeto

O projeto pode herdar políticas do nível da pasta ou da organização. Dependendo dos papéis de acesso, talvez você não tenha visibilidade de quais políticas são aplicadas em níveis mais altos na hierarquia para ver onde a restrição violada é aplicada.

Para acessar as políticas ou exceções aplicadas ao seu projeto, use o lista gcloud org-policies (em inglês) comando:

gcloud org-policies list --project=PROJECT_ID

Substitua PROJECT_ID pelo projeto em que você quer conferir as políticas aplicadas.

Para mais informações sobre uma política aplicada, use o gcloud org-policies describe (link em inglês) kubectl. Forneça o nome da política a ser descrita e o ID do projeto com o parâmetro --project:

gcloud org-policies describe POLICY_NAME \
  --project=PROJECT_ID

Substitua:

  • POLICY_NAME: o nome da política da organização

  • PROJECT_ID: o projeto para o qual você quer conferir a política aplicada.

A seguir

Se não for possível determinar onde uma política é aplicada e como contornar uma restrição de segurança, entre em contato com a equipe de operações ou segurança de TI. Cada organização aplica políticas e blueprints personalizados ao ambiente deles.

Para mais informações sobre todos os controles que podem ser aplicados na sua organização, consulte a lista de restrições da política da organização.