Usar uma CMK gerida pelo cliente para encriptar volumes

O GKE na AWS usa o AWS Key Management Service (KMS) para encriptar volumes EBS. O GKE na AWS 1.7 e superior suporta a encriptação de volumes com chaves mestras do cliente (CMKs) geridas pelo cliente. As versões 1.6.x e inferiores do GKE on AWS suportam apenas chaves mestras do cliente geridas pela AWS.

Este tópico descreve como configurar a CMK gerida pelo cliente para encriptar volumes. Se não configurar a CMK gerida pelo cliente, o GKE no AWS usa CMKs geridas pela AWS por predefinição.

Vista geral

Os seguintes componentes do GKE na AWS suportam volumes encriptados com CMK gerida pelo cliente:

  • Volume raiz do bastion host
  • Volumes raiz do serviço de gestão
  • Volumes de dados do serviço de gestão etcd
  • Volumes raiz do plano de controlo do cluster de utilizadores
  • Volumes de dados etcd do plano de controlo do cluster de utilizadores
  • Volumes raiz do nó do cluster de utilizadores

Especifica chaves na configuração do serviço de gestão, do cluster e do node pool.

Pré-requisitos

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

Crie uma política de chaves

As suas chaves do AWS KMS têm de ter uma política de chaves que permita ao GKE no AWS criar e ler volumes encriptados com uma CMK gerida pelo cliente. É fornecida uma política de exemplo na secção seguinte. Para criar a política, siga os passos seguintes:

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

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

  2. Crie uma política de chaves do AWS KMS 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 o seguinte:

    • ACCOUNT_NUMBER: o número da sua conta da AWS, por exemplo, 1234567890.
    • CLUSTER_ID: o ID do cluster de gestão do GKE on AWS, por exemplo, gke-12345678.
    • AWS_USER: o seu nome de utilizador da AWS.
    • AWS_REGION: A região da AWS onde os seus clusters do GKE on AWS são executados, por exemplo, us-east1.

Configurar recursos para usar uma CMK gerida pelo cliente

Esta secção explica como configurar a CMK gerida pelo cliente para componentes do GKE no AWS. Antes de atualizar os componentes existentes, consulte o artigo Usar CMK com clusters existentes.

Bastion host e serviço de gestão

Configura uma CMK gerida pelo cliente para o volume raiz do anfitrião bastion, o volume raiz do serviço de gestão e os volumes de dados etcd do serviço de gestão no seu anthos-gke.yaml antes de configurar o serviço de gestão. Para mais informações, consulte, Integrar a infraestrutura existente e a referência do AWSManagementService.

Volumes do plano de controlo do cluster de utilizadores

Configura uma CMK gerida pelo cliente para o plano de controlo do cluster de utilizadores e os volumes de dados do etcd na definição do AWSCluster. Para mais informações, consulte o artigo Crie um cluster de utilizadores personalizado.

Volumes raiz do nó do cluster de utilizadores

Configura uma CMK gerida pelo cliente em volumes raiz de nós do cluster de utilizadores na definição de AWSNodePool. Para mais informações, consulte o artigo Crie um cluster de utilizadores personalizado.

Usar CMK com clusters existentes

Pode adicionar a configuração de CMK gerida pelo cliente aos seguintes componentes existentes:

  • Volume raiz do bastion host
  • Volumes raiz do serviço de gestão
  • Volumes raiz do plano de controlo do cluster de utilizadores
  • Volumes raiz do nó do cluster de utilizadores

O GKE on AWS recria estes volumes após uma atualização ou uma alteração de configuração. Para adicionar a configuração da CMK gerida pelo cliente a componentes existentes, siga as instruções em Atualizar o GKE na AWS. Quando modifica a configuração do recurso, modifique os seguintes campos:

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

Quando conclui a atualização, o GKE on AWS cria novos recursos com os volumes de CMK geridos pelo cliente anexados.

O que se segue?