使用客戶管理的 CMK 加密磁碟區

GKE on AWS 會使用 AWS Key Management Service (KMS) 加密 EBS 磁碟區。AWS 上的 GKE 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
AWSNodePools spec.rootVolume

升級完成後,GKE on AWS 會建立新資源,並附加客戶管理的 CMK 磁碟區。

後續步驟