Criar e gerenciar restrições personalizadas

Esta página mostra como ativar e usar restrições personalizadas no ambiente do GKE na AWS.O Serviço de políticas da organização do Google Cloudajuda a gerenciar configurações de recursos e criar limites no seu ambiente de nuvem.

Visão geral

Com as políticas da organização personalizadas, é possível criar políticas de recursos granulares em ambientes de várias nuvens do GKE para atender aos requisitos específicos de segurança e compliance da sua organização. Também é possível criar políticas da organização no modo de simulação para testar novas políticas sem afetar as cargas de trabalho de produção.

Para saber mais sobre as políticas da organização, consulte Introdução ao serviço de políticas da organização.

Antes de começar

Antes de começar, entenda os seguintes tópicos.

Herança de políticas

Por padrão, as políticas da organização são herdadas pelos descendentes dos recursos em que a política é aplicada. Por exemplo, se você aplicar uma política em uma organização, Google Cloud a política será aplicada a todos os projetos dessa organização. Para saber mais sobre a herança de políticas e como mudar as regras de avaliação, consulte Regras de avaliação de hierarquia.

Limitações

Antes de criar restrições personalizadas, considere as seguintes limitações:

  • As restrições personalizadas só podem ser aplicadas nos métodos CREATE ou UPDATE do GKE nos recursos da AWS.
  • As restrições personalizadas recém-aplicadas não se aplicam automaticamente aos recursos atuais. É necessário atualizar os recursos atuais para aplicar a restrição. Para encontrar recursos que precisam ser atualizados, aplique uma política da organização de simulação.
  • Para criar restrições e aplicar políticas da organização, você precisa do papel do IAM de Administrador da política da organização (roles/orgpolicy.policyAdmin) na sua Google Cloud organização. Para mais informações sobre as permissões necessárias para gerenciar políticas da organização com restrições personalizadas, consulte Papéis obrigatórios.

Preços

As políticas da organização e restrições personalizadas são oferecidas sem custos financeiros.

Criar restrições personalizadas

As restrições personalizadas precisam ser especificadas usando os campos nas especificações de recursos da API AwsCluster e AwsNodepool, excluindo os campos descritos como "Somente saída".

Criar uma restrição personalizada

Para criar uma nova restrição personalizada, defina-a em um arquivo YAML e aplique-a na sua organização usando a Google Cloud CLI. Essa restrição precisa encapsular a política específica que você quer aplicar nos recursos do GKE na AWS.

Crie um arquivo YAML para definir uma restrição personalizada no cluster:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AwsCluster
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

Para definir uma restrição personalizada no pool de nós, use a seguinte configuração YAML:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AwsNodePool
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

Substitua:

  • ORGANIZATION_ID : o ID da organização, como 123456789.

  • CONSTRAINT_NAME : o nome da nova restrição personalizada. Uma restrição personalizada precisa começar com custom. e só pode incluir letras maiúsculas, minúsculas ou números. Por exemplo, custom.allowClusterCreateIfAnnotationPresent. O tamanho máximo desse campo é de 70 caracteres, sem contar o prefixo (por exemplo, organizations/123456789/customConstraints/custom).

  • CONDITION : uma condição gravada em uma representação de um recurso Google Cloud . As condições são escritas na Common Expression Language (CEL). Esse campo tem um comprimento máximo de 1.000 caracteres. Por exemplo, condição: "key" in resource.annotations && resource.annotations.key == "created-by".

  • ACTION : a ação a ser realizada se a condição for atendida. Pode ser ALLOW ou DENY.

  • DISPLAY_NAME : um nome de exibição para a restrição. Esse campo tem um comprimento máximo de 200 caracteres.

  • DESCRIPTION : uma descrição da restrição a ser exibida como uma mensagem de erro quando a política for violada. Por exemplo, "Allow new clusters only when certain annotations are set.". Esse campo tem um tamanho máximo de 2.000 caracteres.

Para mais informações sobre como criar uma restrição personalizada, consulte Como definir restrições personalizadas.

Associar a restrição aos seus recursos

Depois de criar o arquivo YAML para uma nova restrição personalizada, configure-a para disponibilizar a restrição para as políticas da organização.

  1. Para configurar uma restrição personalizada, use o comando gcloud org-policies set-custom-constraint:

    gcloud org-policies set-custom-constraint PATH_TO_FILE
    

    Substitua PATH_TO_FILE pelo caminho da definição YAML da restrição personalizada.

  2. Para verificar se a restrição personalizada foi criada, use o comando gcloud org-policies list-custom-constraints:

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

    A saída lista as políticas criadas:

    CUSTOM_CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    ACTION_TYPE: ALLOW
    METHOD_TYPES: CREATE
    RESOURCE_TYPES: gkemulticloud.googleapis.com/AwsCluster
    DISPLAY_NAME: Allow new clusters only when certain annotations are set.
    

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.

  1. 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 Google Cloud como guia. Por exemplo, se você quiser aplicar a política em um projeto específico, use projects/PROJECT_ID. Para aplicar a política em uma organização específica, use organizations/ORGANIZATION_ID.

    • POLICY_NAME: o nome da nova política.

  2. 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.

  3. Verifique se a política existe:

    gcloud org-policies list --RESOURCE_FLAG=RESOURCE_ID
    

    Substitua:

    • RESOURCE_FLAG: o recurso Google Cloud em que você aplicou a política. Por exemplo, um projeto ou uma organização.

    • RESOURCE_ID: o ID do recurso em que você aplicou a política. Por exemplo, o ID do projeto ou da organização.

    O resultado será assim:

    CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CPjb27wGEOijhL4B-
    

Testar a política

Para testar a política da organização, crie um novo cluster da AWS em um projeto restrito.

  1. Crie um cluster da AWS em um projeto restrito.

    gcloud container aws clusters create CLUSTER_NAME \
      --aws-region AWS_REGION \
      --location GOOGLE_CLOUD_LOCATION \
      --cluster-version CLUSTER_VERSION \
      --fleet-project FLEET_PROJECT \
      --vpc-id VPC_ID \
      --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
      --pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS \
      --service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS \
      --role-arn API_ROLE_ARN \
      --database-encryption-kms-key-arn DB_KMS_KEY_ARN \
      --admin-users ADMIN_USERS_LIST \
      --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
      --iam-instance-profile CONTROL_PLANE_PROFILE \
      --tags "Name=CLUSTER_NAME-cp"
    
  2. O resultado será assim:

    FAILED_PRECONDITION: Operation denied by org policy on resource 'projects/PROJECT_NUMBER/locations/GOOGLE_CLOUD_REGION': ["customConstraints/custom.allowClusterCreateIfAnnotationPresent": "Allow new clusters only when certain annotations are set."]
    
    '@type': type.googleapis.com/google.rpc.ErrorInfo
    domain: googleapis.com
    metadata:
      customConstraints: customConstraints/custom.allowClusterCreateIfAnnotationPresent
    service: gkemulticloud.googleapis.com
    reason: CUSTOM_ORG_POLICY_VIOLATION