שימוש במפתח CMK בניהול הלקוח להצפנת נפחים

‫GKE ב-AWS משתמש ב-AWS Key Management Service‏ (KMS) כדי להצפין נפחי EBS. ‫GKE ב-AWS מגרסה 1.7 ואילך תומך בהצפנת נפחים באמצעות מפתחות ראשיים בניהול הלקוח (CMK). ב-GKE ב-AWS בגרסה 1.6.x ובגרסאות מוקדמות יותר יש תמיכה רק במפתחות ראשיים ללקוחות בניהול AWS.

במאמר הזה מוסבר איך מגדירים מפתח CMK בניהול הלקוח כדי להצפין נפחי אחסון. אם לא מגדירים מפתח הצפנה בניהול הלקוח, GKE ב-AWS משתמש במפתחות הצפנה בניהול AWS כברירת מחדל.

סקירה כללית

הרכיבים הבאים של GKE ב-AWS תומכים באמצעי הצפנה של CMK בניהול הלקוח:

  • נפח הבסיס של יעד מבוצר (bastion host)
  • נפחי הבסיס של שירות הניהול
  • נפחי נתונים של שירות הניהול etcd
  • נפחי הבסיס של מישור הבקרה של אשכול משתמשים
  • נפחי נתונים של etcd במישור הבקרה של אשכול משתמשים
  • נפחי הבסיס של צומתי אשכולות משתמשים

מציינים מפתחות בהגדרות של שירות הניהול, האשכול ומאגר הצמתים.

דרישות מוקדמות

כדי להשתמש במפתח CMK בניהול הלקוח עבור נפחי הבסיס של GKE ב-AWS, צריך את הדברים הבאים:

יצירת מדיניות של מפתח

למפתחות AWS KMS צריכה להיות מדיניות מפתחות שמאפשרת ל-GKE ב-AWS ליצור ולקרוא נפחים שמוצפנים באמצעות CMK בניהול הלקוח. דוגמה למדיניות מופיעה בקטע הבא. כדי ליצור את המדיניות, פועלים לפי השלבים הבאים:

  1. בספרייה anthos-aws, משתמשים בפקודה terraform כדי לקבל את המזהה של שירות הניהול.

    cd anthos-aws
    terraform output cluster_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 ב-AWS – לדוגמה, gke-12345678.
    • AWS_USER: שם המשתמש שלכם ב-AWS.
    • AWS_REGION: האזור ב-AWS שבו פועלים אשכולות GKE ב-AWS, לדוגמה us-east1.

הגדרת משאבים לשימוש במפתח CMK בניהול הלקוח

בקטע הזה מוסבר איך להגדיר מפתחות CMK בניהול הלקוח לרכיבי GKE ב-AWS. לפני שמשדרגים רכיבים קיימים, כדאי לעיין במאמר בנושא שימוש במפתח CMK עם אשכולות קיימים.

יעד מבוצר (bastion host) ושירות ניהול

אתם מגדירים CMK בניהול הלקוח עבור נפח הבסיס של יעד מבוצר (bastion host), נפח הבסיס של שירות מנוהל ונפחי הנתונים של etcd של שירות מנוהל ב-anthos-gke.yaml לפני שמגדירים את שירות הניהול. מידע נוסף זמין במאמרים שילוב של תשתית קיימת וAWSManagementService.

נפחים של מישור הבקרה של אשכול משתמשים

אתם מגדירים CMK בניהול הלקוח עבור מישור הבקרה של אשכול המשתמשים ונפחי הנתונים של etcd בהגדרת AWSCluster. מידע נוסף זמין במאמר בנושא יצירת אשכול משתמש בהתאמה אישית.

נפחי הבסיס של צומתי אשכולות משתמשים

אתם מגדירים מפתח CMK בניהול הלקוח בכרכים של שורש הצומת של אשכול המשתמש בהגדרה של AWSNodePool. מידע נוסף זמין במאמר בנושא יצירת אשכול משתמש בהתאמה אישית.

שימוש ב-CMK עם אשכולות קיימים

אפשר להוסיף הגדרת CMK בניהול הלקוח לרכיבים הקיימים הבאים:

  • נפח הבסיס של יעד מבוצר (bastion host)
  • נפחי הבסיס של שירות הניהול
  • נפחי הבסיס של מישור הבקרה של אשכול משתמשים
  • נפחי הבסיס של צומתי אשכולות משתמשים

‫GKE ב-AWS יוצר מחדש את אמצעי האחסון האלה אחרי שדרוג או שינוי בהגדרות. כדי להוסיף הגדרת CMK בניהול הלקוח לרכיבים קיימים, פועלים לפי ההוראות במאמר שדרוג GKE ב-AWS. כשמשנים את הגדרת המשאב, משנים את השדות הבאים:

משאב שדה
AWSManagementService spec.rootVolume and spec.bastionHost.rootVolume
AWSCluster spec.controlPlane.rootVolume
AWSNodePools spec.rootVolume

כשמשלימים את השדרוג, GKE on AWS יוצר משאבים חדשים עם נפחי CMK שמנוהלים על ידי הלקוח ומצורפים אליהם.

המאמרים הבאים