Crie e gerencie restrições personalizadas

Esta página mostra como habilitar e usar restrições personalizadas no seu ambiente GKE na AWS. Google CloudO Serviço de Política de Organização da ajuda você a gerenciar configurações de recursos e criar proteções em seu ambiente de nuvem.

Visão geral

Com políticas de organização personalizadas, você pode criar políticas de recursos granulares em ambientes do GKE Multi-Cloud para atender aos requisitos específicos de segurança e conformidade da sua organização. Você também pode criar políticas de organização em modo de teste para testar novas políticas sem afetar suas cargas de trabalho de produção.

Para saber mais sobre políticas da organização, consulte Introdução ao Serviço de Política da Organização .

Antes de começar

Antes de começar, certifique-se de entender os seguintes tópicos.

Herança de política

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

Limitações

Antes de criar restrições personalizadas, tenha em mente as seguintes limitações:

  • Restrições personalizadas só podem ser aplicadas nos métodos CREATE ou UPDATE para recursos do GKE na AWS.
  • Restrições personalizadas recém-impostas não se aplicam automaticamente aos recursos existentes. Você precisa atualizar os recursos existentes para aplicar a restrição. Para encontrar recursos existentes que precisam ser atualizados, você pode aplicar uma política de organização de teste .
  • Para criar restrições e aplicar políticas de organização, você precisa da função IAM de Administrador de Políticas de Organização ( roles/orgpolicy.policyAdmin ) em seu Google Cloud organização. Para obter mais informações sobre as permissões necessárias para gerenciar políticas da organização com restrições personalizadas, consulte Funções necessárias .

Preços

Políticas organizacionais e restrições personalizadas são oferecidas gratuitamente.

Criar restrições personalizadas

Restrições personalizadas devem ser especificadas usando os campos nas especificações de recursos da API AwsCluster e AwsNodepool , excluindo 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 à sua organização usando a Google Cloud CLI. Essa restrição deve encapsular a política específica que você deseja aplicar aos seus recursos do GKE na AWS.

Crie um arquivo YAML para definir uma restrição personalizada no seu 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 seu 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 o seguinte:

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

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

  • CONDITION : uma condição que é escrita em relação a uma representação de um Google Cloud Recurso. As condições são escritas em Linguagem de Expressão Comum (CEL) . Este campo tem um comprimento máximo de 1.000 caracteres. Por exemplo, condition: "key" in resource.annotations && resource.annotations.key == "created-by" .

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

  • DISPLAY_NAME : um nome de exibição para a restrição. Este 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." Este campo tem um comprimento máximo de 2.000 caracteres.

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

Associe a restrição aos seus recursos

Depois de criar o arquivo YAML para uma nova restrição personalizada, você deve configurá-lo para tornar a restrição disponível para 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 sua definição YAML de 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 impor a nova restrição personalizada, crie uma política de organização que faça referência à restrição e, em seguida, aplique a política de organização.

  1. Crie um arquivo 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 escopo da aplicação. Use o Google Cloud Hierarquia de recursos 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. Aplicar a política:

    gcloud org-policies set-policy PATH_TO_POLICY
    

    Substitua PATH_TO_POLICY pelo caminho para seu arquivo de definição de política.

  3. Verifique se a política existe:

    gcloud org-policies list --RESOURCE_FLAG=RESOURCE_ID
    

    Substitua o seguinte:

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

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

    A saída é semelhante à seguinte:

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

Teste a política

Teste a política da organização criando 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. A saída é semelhante à seguinte:

    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