Utiliser des clés CMK gérées par le client pour chiffrer des volumes

GKE sur AWS utilise le service de gestion des clés AWS (KMS) pour chiffrer des volumes EBS. GKE AWS 1.7 et versions ultérieures est compatible avec le chiffrement de volumes avec les clés maîtres de client gérées par le client (CMK). GKE sur AWS versions 1.6.x et antérieures ne sont compatibles qu'avec les clés maîtres de client gérées par AWS.

Cet article explique comment configurer une clé CMK gérée par le client pour chiffrer des volumes. Si vous ne configurez pas de CMK gérée par le client, GKE sur AWS utilise par défaut les CMK gérées par AWS.

Présentation

Les composants suivants de GKE sur AWS acceptent les volumes chiffrés par des CMK gérées par le client :

  • Volume racine de l'hôte bastion
  • Volumes racines du service de gestion
  • Volumes de données etcd du service de gestion
  • Volumes racines du plan de contrôle du cluster d'utilisateur
  • Volumes de données etcd du plan de contrôle du cluster d'utilisateur
  • Volumes racines des nœuds du cluster d'utilisateur

Spécifiez des clés dans votre configuration de service de gestion, cluster et pool de nœuds.

Prérequis

Pour utiliser les CMK gérées par le client pour des volumes racines GKE sur AWS, vous devez disposer des éléments suivants :

Créer une règle de clé

Vos clés KMS AWS doivent comporter une règle de clé permettant à GKE sur AWS de créer et de lire des volumes chiffrés avec une CMK gérée par le client. Un exemple de règle est fourni dans la section suivante. Pour créer la règle, procédez comme suit :

  1. À partir de votre répertoire anthos-aws, utilisez terraform pour obtenir l'ID de votre service de gestion.

    cd anthos-aws
    terraform output cluster_id
    La sortie inclut l'ID de votre service de gestion. Dans l'exemple ci-dessous, l'ID est gke-12345abc.
    terraform output cluster_id
    gke-12345abc
    

  2. Créez une règle de clé KMS AWS ayant le contenu suivant :

    {
        "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"
                    }
                }
            }
        ]
    }
    

    Remplacez les éléments suivants :

    • ACCOUNT_NUMBER : votre numéro de compte AWS, par exemple 1234567890.
    • CLUSTER_ID : ID de votre cluster de gestion GKE sur AWS, par exemple gke-12345678.
    • AWS_USER : votre nom d'utilisateur AWS.
    • AWS_REGION: région AWS dans laquelle vos clusters GKE sur AWS s'exécutent, par exemple us-east1.

Configurer les ressources pour utiliser une clé CMK gérée par le client

Cette section explique comment configurer les clés CMK gérées par le client pour les composants GKE sur AWS. Avant de mettre à jour les composants existants, consultez la section Utiliser des clés CMK avec des clusters existants.

Service de gestion et d'hôte bastion

Configurez une clé CMK gérée par le client pour le volume racine de votre hôte bastion, le volume racine du service de gestion, et les volumes de données etcd du service de gestion dans le fichier anthos-gke.yaml avant de configurer le service de gestion. Pour en savoir plus, consultez la section Intégrer l'infrastructure existante et la documentation de référence sur AWSManagementService.

Volumes du plan de contrôle du cluster d'utilisateur

Configurez une clé CMK gérée par le client pour votre plan de contrôle de cluster d'utilisateur et les volumes de données etcd associés dans votre définition AWSCluster. Pour en savoir plus, consultez la section Créer un cluster d'utilisateur personnalisé.

Volumes racines des nœuds du cluster d'utilisateur

Configurez une clé CMK gérée par le client sur les volumes racine des nœuds de cluster d'utilisateur dans votre définition AWSNodePool. Pour en savoir plus, consultez la section Créer un cluster d'utilisateur personnalisé.

Utiliser des clés CMK avec des clusters existants

Vous pouvez ajouter une configuration de CMK gérée par le client aux composants existants suivants :

  • Volume racine de l'hôte bastion
  • Volumes racines du service de gestion
  • Volumes racines du plan de contrôle du cluster d'utilisateur
  • Volumes racines des nœuds du cluster d'utilisateur

GKE sur AWS recrée ces volumes après une mise à niveau ou une modification de la configuration. Pour ajouter la configuration de CMK gérée par le client aux composants existants, suivez les instructions de la section Mettre à niveau GKE sur AWS. Lorsque vous modifiez la configuration des ressources, modifiez les champs suivants :

Ressource Champ
AWSManagementService spec.rootVolume and spec.bastionHost.rootVolume
AWSCluster spec.controlPlane.rootVolume
AWSNodePools spec.rootVolume

Une fois la mise à niveau terminée, GKE sur AWS crée de nouvelles ressources avec les volumes CMK gérés par le client associés.

Étapes suivantes