Esta página mostra como restringir operações específicas em recursos do Google Kubernetes Engine (GKE) na sua organização através de restrições personalizadas no Google Cloud serviço de políticas da organização. Pode usar restrições para ajudar a sua organização a cumprir os requisitos de conformidade, segurança e políticas, garantindo que os recursos do cluster cumprem requisitos específicos. Nesta página, vai saber como criar restrições personalizadas e aplicá-las aos recursos do cluster.
Esta página destina-se a especialistas em segurança que garantem que a respetiva organização cumpre os requisitos de conformidade, segurança e políticas, limitando ou exigindo configurações específicas nos recursos do cluster. Para saber mais sobre as funções comuns e as tarefas de exemplo que referimos no conteúdo, consulte o artigo Funções e tarefas comuns do utilizador do GKE. Google Cloud
Antes de ler esta página, certifique-se de que conhece as políticas da Organization Policy.
Acerca das políticas e restrições da organização
A Google Cloud política da organização dá-lhe um controlo centralizado e programático sobre os recursos da sua organização. Enquanto administrador de políticas da organização, pode definir uma política da organização, que é um conjunto de restrições denominadas restrições que se aplicam a Google Cloud recursos e descendentes desses recursos na Google Cloud hierarquia de recursos. Pode aplicar políticas de organização ao 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 Google Cloud . No entanto, se quiser um controlo mais detalhado e personalizável sobre os campos específicos que estão restritos nas políticas da sua organização, também pode criar restrições personalizadas e usar essas restrições personalizadas numa política da organização personalizada.
Recursos suportados no GKE
Para o GKE, pode 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 para campos só de saída e os seguintes campos:
projects.locations.clusters.masterAuth.clientKey
projects.locations.clusters.masterAuth.password
Herança de políticas
Por predefinição, as políticas são herdadas pelos descendentes dos recursos nos quais aplica a política. Por exemplo, se aplicar uma política a uma pasta, esta é aplicada a todos os projetos na pasta.Google Cloud Para saber mais acerca deste comportamento e como o alterar, consulte as regras de avaliação da hierarquia.
Preços
As políticas e as restrições organizacionais são oferecidas sem custo financeiro.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
-
Para receber as autorizações de que precisa para criar restrições e aplicar políticas organizacionais, peça ao seu administrador que lhe conceda a função do IAM de administrador da política organizacional (
roles/orgpolicy.policyAdmin
) na sua Google Cloud organização. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
- Certifique-se de que sabe o seu ID da organização.
Crie uma restrição personalizada
Para criar uma nova restrição personalizada, define a restrição num ficheiro YAML e aplica a restrição personalizada na sua organização através da CLI Google Cloud.
Crie um ficheiro 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 o seguinte:
ORGANIZATION_ID
: o ID da sua organização, como123456789
.CONSTRAINT_NAME
: o nome que quer para a nova restrição personalizada. Uma restrição personalizada tem de começar porcustom.
e só pode incluir letras maiúsculas, letras minúsculas ou números. Por exemplo,custom.enableGkeAutopilot
. O comprimento máximo deste campo é de 70 carateres, sem contar com 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 quer restringir. Por exemplo,Cluster
ouNodePool
.
METHOD1,METHOD2,...
: uma lista de métodos RESTful para os quais aplicar a restrição. Pode serCREATE
ouCREATE
eUPDATE
.condition
: a condição para validar o pedido em relação a, escrita no Idioma de expressão comum (IEC). Este campo tem um comprimento máximo de 1000 carateres. A expressão tem de conter os seguintes campos e suporta operadores lógicos, como&&
e||
:OBJECT_NAME
: o nome do objeto da API GKE que quer restringir, no formato pascalCase. Por exemplo,privateClusterConfig
.FIELD_NAME
: o nome do campo da API GKE que quer restringir, no formato 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 tomar se a condiçãocondition
for cumprida. Pode serALLOW
ouDENY
.DISPLAY_NAME
: um nome simples para a restrição. Este campo tem um comprimento máximo de 200 carateres.DESCRIPTION
: uma descrição acessível da restrição a apresentar como uma mensagem de erro quando a política é violada. Este campo tem um comprimento máximo de 2000 carateres.
Aplique a restrição personalizada:
gcloud org-policies set-custom-constraint PATH_TO_FILE
Substitua
PATH_TO_FILE
pelo caminho do ficheiro 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 é semelhante ao seguinte:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.enableGkeAutopilot - SET COCsm5QGENiXi2E= ...
Aplique 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, em seguida, aplique a política da organização.
Crie um ficheiro YAML para a política da organização:
name: RESOURCE_HIERARCHY/policies/POLICY_NAME spec: rules: - enforce: true
Substitua o seguinte:
RESOURCE_HIERARCHY
: a localização da nova política, que afeta o âmbito da aplicação. Use a Google Cloud hierarquia de recursos como guia. Por exemplo, se quiser aplicar a política num projeto específico, useprojects/PROJECT_ID
. Para aplicar a política numa 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 ficheiro de definição da política.Verifique se a política existe:
gcloud org-policies list \ --RESOURCE_FLAG=RESOURCE_ID
Substitua o seguinte:
RESOURCE_FLAG
: o Google Cloud recurso onde aplicou a política. Por exemplo,project
oufolder
.RESOURCE_ID
: o ID do recurso onde aplicou a política. Por exemplo, o ID da pasta Google Cloud .
Para ver uma lista de argumentos, consulte o artigo
gcloud org-policies list
.O resultado é semelhante ao seguinte:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG iam.disableWorkloadIdentityClusterCreation - SET CO3UkJAGEOj1qsQB custom.enableGkeAutopilot - SET COCsm5QGENiXi2E= custom.enableBinAuth - SET CJfKiZUGEJju7LUD
Exemplo: crie uma restrição personalizada e aplique uma política
O exemplo seguinte cria uma restrição e uma política personalizadas que exigem que todos os novos clusters num projeto específico sejam clusters do Autopilot.
Antes de começar, deve saber o seguinte:
- O ID da sua organização
- Um ID do projeto
Crie a restrição
Guarde o seguinte ficheiro 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.
Isto define uma restrição em que, para cada novo cluster, se o modo de cluster não for o Autopilot, a operação é recusada.
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 é semelhante ao seguinte:
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
Guarde o seguinte ficheiro como
policy-enable-autopilot.yaml
:name: projects/PROJECT_ID/policies/custom.enableGkeAutopilot spec: rules: - enforce: true
Substitua
PROJECT_ID
pelo 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 é semelhante ao seguinte:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.enableGkeAutopilot - SET COCsm5QGENiXi2E=
Depois de aplicar a política, aguarde cerca de dois minutos para que Google Cloud comece a aplicar a política.
Teste a política
Tente criar um cluster padrão do GKE no projeto:
gcloud container clusters create org-policy-test \
--project=PROJECT_ID \
--location=CONTROL_PLANE_LOCATION \
--num-nodes=1
Substitua o seguinte:
PROJECT_ID
: o ID do projeto do projeto da política.CONTROL_PLANE_LOCATION
: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.
O resultado é o seguinte:
Operation denied by custom org policies: ["customConstraints/custom.enableGkeAutopilot": "All new clusters must be Autopilot clusters."]
Explore exemplos de restrições personalizadas para exemplos de utilização comuns
Os exemplos seguintes fornecem a sintaxe de algumas restrições personalizadas que pode considerar úteis, como a aplicação da Workload Identity Federation para o GKE em novos clusters. Para usar estes exemplos, modifique-os conforme necessário para se adequarem ao seu exemplo de utilização específico. Em seguida, aplique-as à sua organização seguindo as instruções nesta página.
Descrição | Sintaxe de restrição |
---|---|
Permitir a criação de clusters apenas quando a autorização binária está ativada |
name: organizations/ORGANIZATION_ID/customConstraints/custom.gkeBinaryAuthorization resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE 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 desative a atualização automática de nós para novos conjuntos 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. |
Ative a federação de identidades de cargas de trabalho para o 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 desative 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 apenas a criação ou a atualização do conjunto de nós padrão quando os pontos finais de metadados antigos estão 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 num valor de mapa. O campo |
O que se segue?
- Saiba mais sobre as restrições em detalhe.
- Leia acerca das opções adicionais que pode usar para personalizar as suas políticas.
- Saiba como reforçar a segurança do seu cluster.
- Saiba como desativar a porta só de leitura do kubelet em clusters do GKE.
- Saiba como definir políticas da organização com base em etiquetas.
- Saiba como exigir que o VM Manager esteja ativado em todos os nós do GKE.