Como usar uma CMK gerenciada pelo cliente para criptografar volumes

O GKE na AWS usa o serviço de gerenciamento de chaves (KMS) da AWS para criptografar volumes EBS. O GKE na AWS 1.7 e versões posteriores é compatível com a criptografia de volumes com chaves mestras do cliente (CMKs) gerenciadas pelo cliente. O GKE na AWS versão 1.6.x e anteriores só oferece suporte a chaves mestras do cliente gerenciadas pela AWS.

Este tópico descreve como configurar a CMK gerenciada pelo cliente para criptografar volumes. Se você não configurar a CMK gerenciada pelo cliente, o GKE na AWS usará CMKs gerenciadas pela AWS por padrão.

Visão geral

Os seguintes componentes do GKE na AWS são compatíveis com volumes criptografados de CMK gerenciada pelo cliente:

  • Volume raiz do Bastion Host
  • Volumes raiz do serviço de gerenciamento
  • Volumes de dados do etcd do serviço de gerenciamento
  • Volumes raiz do plano de controle do cluster de usuário
  • Volumes de dados etcd do plano de controle do cluster de usuário
  • Volumes raiz do nó do cluster de usuário

As chaves são especificadas no serviço de gerenciamento, no cluster e na configuração do pool de nós.

Pré-requisitos

Para usar a CMK gerenciada pelo cliente para volumes raiz do GKE na AWS, você precisa do seguinte:

Criar uma política de chave

As chaves do KMS da AWS precisam ter uma política de chave que permita que o GKE na AWS crie e leia volumes criptografados com uma CMK gerenciada pelo cliente. Uma política de exemplo é fornecida na seção a seguir. Para criar a política, execute as seguintes etapas:

  1. No diretório anthos-aws, use terraform para obter o ID do seu serviço de gerenciamento.

    cd anthos-aws
    terraform output cluster_id
    A saída inclui o ID do seu serviço de gerenciamento. No exemplo abaixo, o ID é gke-12345abc.
    terraform output cluster_id
    gke-12345abc
    

  2. Crie uma política de chaves do KMS da AWS com o seguinte conteúdo:

    {
        "Version": "2012-10-17",
        "Id": "key-consolepolicy-3",
        "Statement": [
            {
                "Sid": "Enable IAM User Permissions",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::ACCOUNT_NUMBER:root"
                },
                "Action": "kms:*",
                "Resource": "*"
            },
            {
                "Sid": "Allow creating encrypted EBS volumes for EC2 use",
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::ACCOUNT_NUMBER:role/gke-CLUSTER_ID-management",
                        "arn:aws:iam::ACCOUNT_NUMBER:user/AWS_USER",
                        "arn:aws:iam::ACCOUNT_NUMBER:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
                    ]
                },
                "Action": [
                    "kms:GenerateDataKeyWithoutPlaintext",
                    "kms:Decrypt"
                ],
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "kms:CallerAccount": "ACCOUNT_NUMBER",
                        "kms:ViaService": "ec2.AWS_REGION.amazonaws.com"
                    }
                }
            },
            {
                "Sid": "Allow attaching encrypted EBS volumes for EC2 Use",
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::ACCOUNT_NUMBER:role/CLUSTER_ID-management",
                        "arn:aws:iam::ACCOUNT_NUMBER:role/CLUSTER_ID-controlplane",
                        "arn:aws:iam::ACCOUNT_NUMBER:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
                    ]
                },
                "Action": [
                    "kms:CreateGrant",
                    "kms:ListGrants",
                    "kms:RevokeGrant"
                ],
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "kms:CallerAccount": "ACCOUNT_NUMBER",
                        "kms:ViaService": "ec2.AWS_REGION.amazonaws.com"
                    }
                }
            }
        ]
    }
    

    Substitua:

    • ACCOUNT_NUMBER: o número da conta da AWS. Por exemplo, 1234567890.
    • CLUSTER_ID: o ID do cluster de gerenciamento do GKE na AWS. Por exemplo, gke-12345678.
    • AWS_USER: seu nome de usuário da AWS.
    • AWS_REGION: a região da AWS em que os clusters do GKE na AWS são executados, por exemplo, us-east1.

Como configurar recursos para usar uma CMK gerenciada pelo cliente

Nesta seção, explicamos como configurar a CMK gerenciada pelo cliente para componentes do GKE na AWS. Antes de fazer upgrade dos componentes existentes, consulte Como usar a CMK com clusters existentes.

Bastion Host e serviço de gerenciamento

Configure uma CMK gerenciada pelo cliente para o volume raiz do Bastion Host, o volume raiz do serviço de gerenciamento e os volumes de dados etcd de serviço de gerenciamento no anthos-gke.yaml antes de configurar o serviço de gerenciamento. Para mais informações, consulte as referências Como integrar a infraestrutura atual e AWSManagementService.

Volumes do plano de controle do cluster de usuário

Você configura uma CMK gerenciada pelo cliente para o plano de controle do cluster de usuário e os volumes de dados etcd na definição do AWSCluster. Para mais informações, consulte Como criar um cluster de usuário personalizado.

Volumes raiz do nó do cluster de usuário

Você configura uma CMK gerenciada pelo cliente em volumes raiz do nó do cluster de usuário na definição do AWSNodePool. Para mais informações, consulte Como criar um cluster de usuário personalizado.

Como usar a CMK com clusters existentes

É possível adicionar a configuração da CMK gerenciada pelo cliente aos seguintes componentes existentes:

  • Volume raiz do Bastion Host
  • Volumes raiz do serviço de gerenciamento
  • Volumes raiz do plano de controle do cluster de usuário
  • Volumes raiz do nó do cluster de usuário

O GKE na AWS recria esses volumes após um upgrade ou uma mudança de configuração. Para adicionar a configuração da CMK gerenciada pelo cliente aos componentes atuais, siga as instruções em Fazer upgrade do GKE na AWS. Ao modificar a configuração de recursos, modifique os seguintes campos:

Recurso Campo
AWSManagementService spec.rootVolume and spec.bastionHost.rootVolume
AWSCluster spec.controlPlane.rootVolume
AWSNodePools spec.rootVolume

Quando você concluir o upgrade, o GKE na AWS criará recursos com os volumes da CMK gerenciada pelo cliente anexados.

A seguir