顧客管理の CMK を使用したボリュームの暗号化

GKE on AWS は、AWS Key Management Service(KMS)を使用して EBS ボリュームを暗号化します。GKE on AWS 1.7 以降では、顧客管理のカスタマー マスター キー(CMK)を使用したボリュームの暗号化がサポートされています。GKE on AWS バージョン 1.6.x 以下では、AWS が管理するカスタマー マスター キーのみがサポートされています。

このトピックでは、ボリュームを暗号化するための顧客管理の CMK を設定する方法について説明します。顧客管理の CMK を設定しない場合、GKE on AWS では AWS が管理する CMK がデフォルトで使用されます。

概要

次の GKE on AWS コンポーネントでは、顧客管理の CMK で暗号化されたボリュームがサポートされています。

  • 踏み台インスタンスのルート ボリューム
  • 管理サービスのルート ボリューム
  • 管理サービスの etcd データ ボリューム
  • ユーザー クラスタ コントロール プレーンのルート ボリューム
  • ユーザー クラスタ コントロール プレーンの etcd データ ボリューム
  • ユーザー クラスタノードのルート ボリューム

管理サービス、クラスタ、ノードプール構成で鍵を指定します。

前提条件

GKE on AWS ルート ボリュームに顧客管理の CMK を使用するには、以下が必要です。

鍵ポリシーを作成する

AWS KMS 鍵には、GKE on AWS が顧客管理の CMK を使用して暗号化されたボリュームを作成、読み取ることを許可する鍵ポリシーが必要です。次のセクションでポリシーの例を示します。ポリシーを作成する手順は次のとおりです。

  1. anthos-aws ディレクトリから terraform を使用して、管理サービスの ID を取得します。

    cd anthos-aws
    terraform output cluster_id
    出力に管理サービス ID が含まれています。次の例の場合、ID は gke-12345abc です。
    terraform output cluster_id
    gke-12345abc
    

  2. 次の内容の AWS KMS 鍵ポリシーを作成します。

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

    次のように置き換えます。

    • ACCOUNT_NUMBER: AWS アカウント番号(1234567890 など)。
    • CLUSTER_ID: GKE on AWS 管理クラスタ ID(gke-12345678 など)。
    • AWS_USER: AWS ユーザー名。
    • AWS_REGION: GKE on AWS クラスタが稼働している AWS リージョン(us-east1 など)。

顧客管理の CMK を使用するようにリソースを構成する

このセクションでは、GKE on AWS コンポーネントで顧客管理の CMK を構成する方法について説明します。既存のコンポーネントをアップグレードする前に、既存のクラスタで CMK を使用するをご確認ください。

踏み台インスタンスと管理サービス

管理サービスの設定を行う前に、anthos-gke.yaml で、踏み台インスタンスのルート ボリューム、管理サービスのルート ボリューム、管理サービスの etcd データ ボリュームに対して顧客管理の CMK を構成します。詳細については、既存のインフラストラクチャの統合AWSManagementService のリファレンスをご覧ください。

ユーザー クラスタ コントロール プレーンのボリューム

AWSCluster の定義で、ユーザー クラスタ コントロール プレーンと etcd データ ボリュームに対して顧客管理の CMK を構成します。詳細については、カスタム ユーザー クラスタの作成をご覧ください。

ユーザー クラスタノードのルート ボリューム

AWSNodePool の定義で、ユーザー クラスタ ノードのルート ボリュームに対して顧客管理の CMK を構成します。詳細については、カスタム ユーザー クラスタの作成をご覧ください。

既存のクラスタで CMK を使用する

顧客管理の CMK 構成は、次の既存のコンポーネントに追加できます。

  • 踏み台インスタンスのルート ボリューム
  • 管理サービスのルート ボリューム
  • ユーザー クラスタ コントロール プレーンのルート ボリューム
  • ユーザー クラスタノードのルート ボリューム

GKE on AWS は、アップグレードまたは構成の変更後に、これらのボリュームを再作成します。顧客管理の CMK 構成を既存のコンポーネントに追加するには、GKE on AWS のアップグレードの手順に沿って操作してください。リソース構成を変更する際には、次のフィールドを変更します。

リソース フィールド
AWSManagementService spec.rootVolume and spec.bastionHost.rootVolume
AWSCluster spec.controlPlane.rootVolume
AWSNodePool spec.rootVolume

アップグレードが完了すると、GKE on AWS は、顧客管理の CMK ボリュームが接続された新しいリソースを作成します。

次のステップ