יצירה וניהול של אילוצים מותאמים אישית

בדף הזה מוסבר איך להפעיל אילוצים בהתאמה אישית ולהשתמש בהם בסביבת GKE on AWS. Google Cloudשירות מדיניות הארגון עוזר לכם לנהל את הגדרות המשאבים וליצור אמצעי הגנה בסביבת הענן.

סקירה כללית

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

מידע נוסף על מדיניות הארגון זמין במאמר מבוא לשירות מדיניות הארגון.

לפני שמתחילים

לפני שמתחילים, חשוב להבין את הנושאים הבאים.

ירושה של מדיניות

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

מגבלות

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

  • אפשר לאכוף אילוצים בהתאמה אישית רק בשיטות CREATE או UPDATE למשאבי GKE ב-AWS.
  • אילוצים מותאמים אישית שנאכפים לא חלים באופן אוטומטי על משאבים קיימים. כדי להחיל את המגבלה, צריך לעדכן את המשאבים הקיימים. כדי למצוא משאבים קיימים שצריך לעדכן, אתם יכולים לאכוף מדיניות ארגונית של הרצה לניסיון.
  • כדי ליצור אילוצים ולאכוף את מדיניות הארגון, צריך את התפקיד אדמין של מדיניות הארגון (roles/orgpolicy.policyAdmin) ב-IAM בארגון ב- Google Cloud . למידע נוסף על ההרשאות שנדרשות כדי לנהל את מדיניות הארגון באמצעות אילוצים בהתאמה אישית, ראו תפקידים נדרשים.

תמחור

מדיניות הארגון ואילוצים בהתאמה אישית מוצעים ללא תשלום.

יצירת אילוצים בהתאמה אישית

צריך לציין אילוצים בהתאמה אישית באמצעות השדות במפרטים של משאבי ה-API‏ AwsCluster ו-AwsNodepool, לא כולל שדות שמתוארים כ-"Output only".

יצירת אילוץ בהתאמה אישית

כדי ליצור אילוץ חדש בהתאמה אישית, מגדירים את האילוץ בקובץ YAML ומחילים את האילוץ בהתאמה אישית בארגון באמצעות Google Cloud CLI. האילוץ הזה צריך לכלול את המדיניות הספציפית שרוצים לאכוף במשאבי GKE ב-AWS.

יוצרים קובץ YAML כדי להגדיר אילוץ בהתאמה אישית באשכול:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AwsCluster
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

כדי להגדיר אילוץ בהתאמה אישית במאגר הצמתים, משתמשים בהגדרת ה-YAML הבאה:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AwsNodePool
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

מחליפים את מה שכתוב בשדות הבאים:

  • ‫ORGANIZATION_ID : מזהה הארגון, למשל 123456789.

  • ‫CONSTRAINT_NAME : השם של האילוץ החדש בהתאמה אישית. אילוץ בהתאמה אישית חייב להתחיל ב-custom., ויכול לכלול רק אותיות רישיות, אותיות קטנות או מספרים. לדוגמה, custom.allowClusterCreateIfAnnotationPresent. האורך המקסימלי של השדה הזה הוא 70 תווים, לא כולל הקידומת, למשל organizations/123456789/customConstraints/custom.

  • ‫CONDITION : תנאי שנכתב כנגד ייצוג של משאב Google Cloud . התנאים נכתבים ב-Common Expression Language (CEL). האורך המקסימלי של השדה הזה הוא 1,500 תווים. לדוגמה, התנאי: "key" in resource.annotations && resource.annotations.key == "created-by".

  • ‫ACTION : הפעולה שתתבצע אם התנאי יתקיים. הערך יכול להיות ALLOW או DENY.

  • ‫DISPLAY_NAME : השם המוצג של האילוץ. האורך המקסימלי של השדה הזה הוא 200 תווים.

  • ‫DESCRIPTION : תיאור של האילוץ שיוצג כהודעת שגיאה כשהמדיניות מופרת, לדוגמה, "Allow new clusters only when certain annotations are set." האורך המקסימלי של השדה הזה הוא 2,000 תווים.

מידע נוסף על יצירת אילוץ בהתאמה אישית זמין במאמר הגדרת אילוצים בהתאמה אישית.

שיוך האילוץ למשאבים

אחרי שיוצרים את קובץ ה-YAML לאילוץ מותאם אישית חדש, צריך להגדיר אותו כדי שהאילוץ יהיה זמין למדיניות הארגון.

  1. כדי להגדיר אילוץ בהתאמה אישית, משתמשים בפקודה gcloud org-policies set-custom-constraint:

    gcloud org-policies set-custom-constraint PATH_TO_FILE
    

    מחליפים את PATH_TO_FILE בנתיב של הגדרת ה-YAML של האילוץ בהתאמה אישית.

  2. כדי לוודא שהאילוץ המותאם אישית נוצר, משתמשים בפקודה gcloud org-policies list-custom-constraints:

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

    בפלט מופיעה רשימה של כללי המדיניות שנוצרו:

    CUSTOM_CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    ACTION_TYPE: ALLOW
    METHOD_TYPES: CREATE
    RESOURCE_TYPES: gkemulticloud.googleapis.com/AwsCluster
    DISPLAY_NAME: Allow new clusters only when certain annotations are set.
    

אכיפת האילוץ המותאם אישית

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

  1. יוצרים קובץ YAML למדיניות הארגון:

    name: RESOURCE_HIERARCHY/policies/POLICY_NAME
    spec:
      rules:
      - enforce: true
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫RESOURCE_HIERARCHY: המיקום של המדיניות בנושא חדשות, שמשפיע על היקף האכיפה. אפשר להיעזר ב Google Cloud היררכיית המשאבים. לדוגמה, כדי לאכוף את המדיניות בפרויקט ספציפי, משתמשים ב-projects/PROJECT_ID. כדי לאכוף את המדיניות בארגון ספציפי, משתמשים ב-organizations/ORGANIZATION_ID.

    • ‫POLICY_NAME: השם של המדיניות החדשה.

  2. אכיפת המדיניות:

    gcloud org-policies set-policy PATH_TO_POLICY
    

    מחליפים את PATH_TO_POLICY בנתיב לקובץ הגדרת המדיניות.

  3. מוודאים שהמדיניות קיימת:

    gcloud org-policies list --RESOURCE_FLAG=RESOURCE_ID
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫RESOURCE_FLAG: המשאב ב- Google Cloud שבו אכפתם את המדיניות. לדוגמה, פרויקט או ארגון.

    • ‫RESOURCE_ID: המזהה של המשאב שבו אכפתם את המדיניות. לדוגמה, מזהה הפרויקט או מזהה הארגון.

    הפלט אמור להיראות כך:

    CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CPjb27wGEOijhL4B-
    

בדיקת המדיניות

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

  1. יצירת אשכול AWS בפרויקט מוגבל.

    gcloud container aws clusters create CLUSTER_NAME \
      --aws-region AWS_REGION \
      --location GOOGLE_CLOUD_LOCATION \
      --cluster-version CLUSTER_VERSION \
      --fleet-project FLEET_PROJECT \
      --vpc-id VPC_ID \
      --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
      --pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS \
      --service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS \
      --role-arn API_ROLE_ARN \
      --database-encryption-kms-key-arn DB_KMS_KEY_ARN \
      --admin-users ADMIN_USERS_LIST \
      --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
      --iam-instance-profile CONTROL_PLANE_PROFILE \
      --tags "Name=CLUSTER_NAME-cp"
    
  2. הפלט אמור להיראות כך:

    FAILED_PRECONDITION: Operation denied by org policy on resource 'projects/PROJECT_NUMBER/locations/GOOGLE_CLOUD_REGION': ["customConstraints/custom.allowClusterCreateIfAnnotationPresent": "Allow new clusters only when certain annotations are set."]
    
    '@type': type.googleapis.com/google.rpc.ErrorInfo
    domain: googleapis.com
    metadata:
      customConstraints: customConstraints/custom.allowClusterCreateIfAnnotationPresent
    service: gkemulticloud.googleapis.com
    reason: CUSTOM_ORG_POLICY_VIOLATION