Nesta página, mostramos como restringir operações específicas nos recursos do Google Kubernetes Engine (GKE) em sua organização usando restrições personalizadas no Serviço de políticas da organização do Google Cloud. Para saber mais sobre a política da organização, consulte Políticas da organização personalizadas.
Sobre políticas e restrições da organização
A política da organização do Google Cloud oferece controle centralizado e programático sobre os recursos da sua organização. À medida que administrador de políticas da organização, você pode definir umapolítica da organização, que é um conjunto de restrições chamado restrições que se aplicam aos recursos do Google Cloud e aos descendentes desses recursos na Hierarquia de recursos do Google Cloud. É possível aplicar políticas da organização no nível da organização, da pasta ou do projeto.
A política da organização fornece restrições predefinidas para vários serviços do Google Cloud. No entanto, se você quiser um controle mais granular e personalizável sobre os campos específicos restritos nas suas políticas da organização, crie também restrições personalizadas e use-as em uma política da organização personalizada.
Recursos compatíveis no GKE
Para o GKE, é possível criar restrições personalizadas para os métodos CREATE
ou
UPDATE
em qualquer campo no recurso
Cluster
ou
NodePool
da API Google Kubernetes Engine v1, exceto nos campos somente para saída e nos seguintes campos:
projects.locations.clusters.masterAuth.clientKey
projects.locations.clusters.masterAuth.password
Herança de políticas
Por padrão, as políticas são herdadas pelos descendentes dos recursos em que a política é aplicada. Por exemplo, se você aplicar uma política em uma pasta, o Google Cloud aplicará a política a todos os projetos da pasta. Para saber mais sobre esse comportamento e como alterá-lo, consulte Regras de avaliação de hierarquia.
Preços
As políticas e restrições da organização são oferecidas sem custos financeiros.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando
gcloud components update
.
-
Para receber as permissões necessárias para criar restrições e aplicar políticas da organização, peça ao administrador para conceder a você o papel do IAM de administrador da política da organização (
roles/orgpolicy.policyAdmin
) na sua organização do Google Cloud. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
- Certifique-se de conhecer o ID da organização.
Criar uma restrição personalizada
Para criar uma nova restrição personalizada, defina-a em um arquivo YAML e a aplique na sua organização usando a Google Cloud CLI.
Crie um arquivo YAML para a restrição personalizada:
name: organizations/ORGANIZATION_ID/customConstraints/custom.CONSTRAINT_NAME resourceTypes: - container.googleapis.com/RESOURCE_NAME methodTypes: - METHOD1 - METHOD2 condition: "resource.OBJECT_NAME.FIELD_NAME == VALUE" actionType: ACTION displayName: DISPLAY_NAME description: DESCRIPTION
Substitua:
ORGANIZATION_ID
: o ID da organização, como123456789
.CONSTRAINT_NAME
: o nome da sua nova restrição personalizada. Uma restrição personalizada precisa começar comcustom.
e só pode incluir letras maiúsculas, minúsculas ou números, por exemplo,custom.enableGkeAutopilot
. O tamanho máximo desse campo é de 70 caracteres, sem contar o prefixo (por exemplo,organizations/123456789/customConstraints/custom.
).RESOURCE_NAME
: o nome (não o URI) do recurso REST da API GKE que contém o objeto e o campo que você quer restringir. Por exemplo,Cluster
ouNodePool
.METHOD1,METHOD2,...
: uma lista de métodos "RESTful" para aplicar a restrição. Pode serCREATE
ouCREATE
eUPDATE
.condition
: a condição para validar a solicitação contra, escrita em Common Expression Language (CEL). Esse campo tem um comprimento máximo de 1000 caracteres. A expressão precisa conter os seguintes campos e oferecer suporte a operadores lógicos, como&&
e||
:OBJECT_NAME
: o nome do objeto da API GKE que você quer restringir, na formatação pascalCase. Por exemplo,privateClusterConfig
.FIELD_NAME
: o nome do campo da API GKE que você quer restringir, na formatação pascalCase. Por exemplo,enablePrivateNodes
.VALUE
: o valor do campo. Para campos booleanos, usetrue
oufalse
. Para campos de string, use"STRING"
.
ACTION
: a ação a ser realizada se ocondition
for atendido. Pode serALLOW
ouDENY
.DISPLAY_NAME
: um nome legível para a restrição. Esse campo tem um comprimento máximo de 200 caracteres.DESCRIPTION
: uma descrição legível da restrição a ser exibida como uma mensagem de erro quando a política for violada. Esse campo tem um comprimento máximo de 2000 caracteres.
Aplique a restrição personalizada:
gcloud org-policies set-custom-constraint PATH_TO_FILE
Substitua
PATH_TO_FILE
pelo caminho do arquivo da sua definição de restrição personalizada.Verifique se a restrição personalizada existe:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
O resultado será assim:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.enableGkeAutopilot - SET COCsm5QGENiXi2E= ...
Aplicar a restrição personalizada
Para aplicar a nova restrição personalizada, crie uma política da organização que faça referência à restrição e aplique-a.
Crie um arquivo YAML para a política da organização:
name: RESOURCE_HIERARCHY/policies/POLICY_NAME spec: rules: - enforce: true
Substitua:
RESOURCE_HIERARCHY
: o local da nova política, que afeta o escopo da aplicação. Use a hierarquia de recursos do Google Cloud como guia. Por exemplo, se você quiser aplicar a política em um projeto específico, useprojects/PROJECT_ID
. Para aplicar a política em uma organização específica, useorganizations/ORGANIZATION_ID
.POLICY_NAME
: o nome da nova política.
Aplique a política:
gcloud org-policies set-policy PATH_TO_POLICY
Substitua
PATH_TO_POLICY
pelo caminho para o arquivo de definição da política.Verifique se a política existe:
gcloud org-policies list \ --RESOURCE_FLAG=RESOURCE_ID
Substitua:
RESOURCE_FLAG
: o recurso do Google Cloud em que você aplicou a política. Por exemplo,project
oufolder
.RESOURCE_ID
: o ID do recurso em que a política foi aplicada. Por exemplo, o ID da pasta do Google Cloud.
Para ver uma lista de argumentos, consulte
gcloud org-policies list
.O resultado será assim:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG iam.disableWorkloadIdentityClusterCreation - SET CO3UkJAGEOj1qsQB custom.enableGkeAutopilot - SET COCsm5QGENiXi2E= custom.enableBinAuth - SET CJfKiZUGEJju7LUD
Exemplo: criar uma restrição personalizada e aplicar uma política
O exemplo a seguir cria uma restrição e política personalizada que exige que todos os novos clusters em um projeto específico sejam clusters do piloto automático.
Antes de começar, você precisa saber o seguinte:
- O código da sua organização.
- Um ID do projeto
Crie a restrição.
Salve o seguinte arquivo como
constraint-enable-autopilot.yaml
:name: organizations/ORGANIZATION_ID/customConstraints/custom.enableGkeAutopilot resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.autopilot.enabled == false" actionType: DENY displayName: Enable GKE Autopilot description: All new clusters must be Autopilot clusters.
Isso define uma restrição em que para cada novo cluster, se o modo de cluster não for Autopilot, a operação será negada.
Aplique a restrição:
gcloud org-policies set-custom-constraint ~/constraint-enable-autopilot.yaml
Verifique se a restrição existe:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
O resultado será assim:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.enableGkeAutopilot DENY CREATE container.googleapis.com/Cluster Enable GKE Autopilot ...
Crie a política
Salve o seguinte arquivo como
policy-enable-autopilot.yaml
:name: projects/PROJECT_ID/policies/custom.enableGkeAutopilot spec: rules: - enforce: true
Substitua
PROJECT_ID
pela ID do seu projeto.Aplique a política:
gcloud org-policies set-policy ~/policy-enable-autopilot.yaml
Verifique se a política existe:
gcloud org-policies list --project=PROJECT_ID
O resultado será assim:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.enableGkeAutopilot - SET COCsm5QGENiXi2E=
Depois de aplicar a política, aguarde cerca de dois minutos para que o Google Cloud comece a aplicar a política.
Testar a política
Tente criar um cluster do GKE Standard no projeto:
gcloud container clusters create org-policy-test \
--project=PROJECT_ID \
--zone=COMPUTE_ZONE \
--num-nodes=1
A saída é esta:
Operation denied by custom org policies: ["customConstraints/custom.enableGkeAutopilot": "All new clusters must be Autopilot clusters."]
Exemplos de restrições personalizadas para casos de uso comuns
As seções a seguir fornecem a sintaxe de algumas restrições personalizadas que podem ser úteis para você:
Descrição | Sintaxe de restrição |
---|---|
Permitir a criação de clusters somente quando a autorização binária estiver ativada |
name: organizations/ORGANIZATION_ID/customConstraints/custom.gkeBinaryAuthorization resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "condition:resource.binaryAuthorization.enabled == true || resource.binaryAuthorization.evaluationMode=='PROJECT_SINGLETON_POLICY_ENFORCE'" action: ALLOW displayName: Enable GKE Binary Authorization description: All new clusters must enable Binary Authorization. |
Não desativar o upgrade automático de nós para novos pools de nós |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableAutoUpgrade resourceTypes: - container.googleapis.com/NodePool methodTypes: - CREATE condition: "resource.management.autoUpgrade == true" actionType: ALLOW displayName: Enable node auto-upgrade description: All node pools must have node auto-upgrade enabled. |
Ativar a federação de identidade da carga de trabalho do GKE para novos clusters |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableWorkloadIdentity resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "has(resource.workloadIdentityConfig.workloadPool) || resource.workloadIdentityConfig.workloadPool.size() > 0" actionType: ALLOW displayName: Enable Workload Identity on new clusters description: All new clusters must use Workload Identity. |
Não desativar o Cloud Logging em clusters existentes |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableLogging resourceTypes: - container.googleapis.com/Cluster methodTypes: - UPDATE condition: "resource.loggingService == 'none'" actionType: DENY displayName: Do not disable Cloud Logging description: You cannot disable Cloud Logging on existing GKE cluster. |
Permitir a criação ou atualização do pool de nós do Standard somente quando os endpoints de metadados legados estiverem desativados |
name: organizations/ORGANIZATION_ID/customConstraints/custom.nodeConfigMetadata resourceTypes: - container.googleapis.com/NodePool methodTypes: - CREATE - UPDATE condition: "'disable-legacy-endpoints' in resource.config.metadata && resource.config.metadata['disable-legacy-endpoints'] == 'true'" actionType: ALLOW displayName: Disable legacy metadata endpoints description: You can only create or update node pools if you disable legacy metadata endpoints. Este exemplo de restrição mostra como definir uma restrição personalizada em um valor de mapa. O campo |
A seguir
- Saiba mais sobre as restrições.
- Leia sobre as outras opções que você pode usar para personalizar suas políticas.
- Saiba como definir políticas da organização com base em tags.