Desenvolva aplicações num ambiente Google Cloud restrito

A nossa documentação é frequentemente escrita para ajudar a pôr um produto ou uma funcionalidade em funcionamento, mas alguma documentação pode não funcionar corretamente se a sua organização aplicar restrições de segurança. Por exemplo, a sua empresa pode implementar algumas das restrições de segurança do Cloud Foundation Toolkit, dos Google Cloud projetos de segurança ou criar as suas próprias restrições.

Este artigo ajuda a resolver problemas de erros de implementação de aplicações que pode ver numa organização que usa restrições de segurança.

Resolva problemas de restrições de segurança

A sua equipa de segurança ou operações de TI pode ativar restrições de segurança através da política da organização. Estas restrições limitam a forma como os recursos da sua organização podem ser usados.

Quando faz um pedido API que devolve um erro, a resposta API deve indicar se o erro se deve a violações de políticas. A resposta deve explicar a restrição que é violada. Os seguintes passos de resolução de problemas ajudam a determinar e compreender se ocorre uma violação:

  1. Reveja a mensagem de erro da resposta da API. Consegue identificar que restrição de segurança a sua implementação viola?

    O exemplo seguinte indica 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 compreender a violação de política, atualize a configuração da implementação de recursos para funcionar dentro das restrições.

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

  3. Se não tiver a certeza do motivo pelo qual a restrição é aplicada ou do que fazer, trabalhe com a sua equipa de segurança para compreender onde a política é aplicada na hierarquia da sua organização e as soluções alternativas sugeridas.

    Verifique se existem modelos de implementação, como modelos do Terraform, partilhados na sua organização. Estes modelos devem detalhar como a Google Cloud infraestrutura foi configurada e limitar a implementação da sua aplicação.

Problemas comuns de restrições de segurança

Quando implementa as suas aplicações no Google Cloud, pode deparar-se com um erro como o do exemplo seguinte:

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 pode configurar uma instância do Cloud SQL para usar um endereço IP público externo. Está a ser aplicada uma restrição de segurança a partir de uma política aplicada ao seu ambiente.

As seguintes restrições de segurança comuns podem ser ativadas e detalhadas numa resposta de erro da API à medida que desenvolve as suas aplicações.

Compute Engine

Nome da restrição Por que motivo é implementada Solução alternativa sugerida
constraints/compute.disableNestedVirtualization Impedir a instalação de um hipervisor compatível com KVM na VM. Este comportamento pode introduzir riscos de segurança sem a aplicação de patches e a gestão adequadas. Configure a VM para desativar a virtualização aninhada acelerada por hardware.

Por predefinição, está ativado para todas as VMs do Compute Engine executadas em plataformas de CPU Intel Haswell ou mais recentes.
constraints/compute.requireShieldedVm Requer que as novas instâncias de VM usem imagens de disco protegidas com as opções de arranque seguro, vTPM e monitorização da integridade ativadas. Estas opções impedem a VM de ser adulterada e os dados de serem acedidos ou modificados. Não ative as VMs protegidas quando criar uma VM.

Para criar um cluster do GKE, tem de ativar nós do GKE protegidos.

Atualmente, o Dataflow não suporta trabalhadores de VMs protegidas.
constraints/compute.disableSerialPortAccess Remova vetores de segurança para interagir com uma VM ou ver a saída de diagnóstico que pode ser usada para formar um ataque. Não ative o acesso à porta de série quando criar uma VM.
constraints/compute.disableGuestAttributesAccess Minimizar a quantidade de informações sobre o anfitrião e a plataforma subjacentes que podem ser usadas indevidamente por uma app maliciosa. Não use a API Compute Engine para ler atributos de convidados das suas VMs do Compute Engine.
constraints/compute.vmExternalIpAccess Impedir que as aplicações sejam executadas com um endereço IP externo e acessível a partir da Internet. Desative o acesso por IP externo para as suas VMs. Só pode usar um endereço IP privado interno.

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

Atualmente, o Dataprep e o Dataflow não suportam endereços IP privados.

Rede virtual e endereços IP

Nome da restrição Por que motivo é implementada Solução alternativa sugerida
constraints/compute.skipDefaultNetworkCreation Certifique-se de que só é possível criar nuvens privadas virtuais (VPCs) geridas pela empresa e que as regras de filtragem ou tráfego de rede são aplicadas. Associe as suas aplicações a VPCs existentes na sua organização. As VPCs criadas automaticamente predefinidas não são implementadas para novos projetos.
constraints/compute.restrictXpnProjectLienRemoval Impedir que uma VPC partilhada seja eliminada acidentalmente quando os recursos noutros projetos dependem dos serviços de rede que fornece. Não tente eliminar uma VPC partilhada. Certifique-se de que está a segmentar o recurso correto para eliminação.
constraints/sql.restrictPublicIp Impedir que as instâncias do Cloud SQL sejam executadas com um endereço IP externo e sejam acessíveis a partir da Internet. Não configure a sua instância do Cloud SQL para usar um endereço IP público externo.

Em alternativa, configure a sua instância do Cloud SQL para usar um endereço IP privado interno.

Identidade e autenticação

Nome da restrição Por que motivo é implementada Solução alternativa sugerida
constraints/iam.disableServiceAccountKeyCreation As chaves de contas de serviço podem representar um risco de segurança se forem expostas, por isso, impeça a respetiva exportação. Autentique-se através de uma alternativa mais segura às chaves de contas de serviço.
constraints/storage.uniformBucketLevelAccess Minimize o risco de aplicação de autorizações incorretas ou inconsistentes aos contentores de armazenamento permitindo apenas a utilização da gestão de identidade e de acesso (IAM). Ative o acesso de nível de contentor uniforme para proteger o seu contentor do Cloud Storage.
constraints/iam.allowedPolicyMemberDomains Restringir Google Cloud o acesso aos recursos apenas a domínios aprovados. Use uma conta num dos domínios aprovados. Existem problemas conhecidos adicionais para esta restrição.

Exemplos de erros de resposta da API

No exemplo anterior de restrição de endereços IP públicos externos com o Cloud SQL, uma violação de política faz com que a API devolva um erro. Os exemplos mais detalhados seguintes mostram a resposta da API que indica qual a restrição que faz com que o pedido falhe. Analise as suas próprias respostas da API para compreender por que motivo as implementações de aplicações falham.

Falha do Cloud SQL com a CLI do Google Cloud:

$ 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

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

O seu projeto pode herdar políticas ao nível da pasta ou da organização. Consoante as suas funções de acesso, pode não ter visibilidade das políticas aplicadas a níveis superiores na sua hierarquia para ver onde a restrição violada é aplicada.

Para ver as políticas ou as exceções aplicadas ao seu projeto, use o comando gcloud org-policies list:

gcloud org-policies list --project=PROJECT_ID

Substitua PROJECT_ID pelo projeto para o qual quer ver as políticas aplicadas.

Para mais informações sobre uma política aplicada, use o comando gcloud org-policies describe. Indique o nome da política a descrever e o ID do projeto com o parâmetro --project:

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

Substitua o seguinte:

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

  • PROJECT_ID: o projeto para o qual quer ver a política aplicada

O que se segue?

Se não conseguir determinar onde uma política é aplicada e como contornar uma restrição de segurança, contacte as suas operações de TI ou a equipa de segurança. Cada organização aplica políticas e planos personalizados para o respetivo ambiente.

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