הקצאת ארגון בתשלום עם קישור בין רשתות VPC שכנות (peering)

הדף הזה מתייחס ל-Apigee, אבל לא ל-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

במאמר הזה מוסבר איך להתקין ולהגדיר את Apigee משורת הפקודה עם VPC peering. השלבים האלה רלוונטיים גם למודלים של מינוי וגם למודלים של תשלום לפי שימוש בארגונים בתשלום, עם או בלי שמירת נתונים במדינה מסוימת.

סיכום השלבים

אלה השלבים להקצאת הרשאות:

שלב 1: הגדרת משתני סביבה

מגדירים את gcloud ומגדירים משתני סביבה לשימוש בשלבים הבאים:

  1. חשוב לוודא שביצעתם את דרישות ההגדרה שמפורטות בקטע לפני שמתחילים.
  2. צריך להתקין את Cloud SDK. אם אתם צריכים להתקין אותו, תוכלו לעיין במאמר בנושא התקנת Cloud SDK.
  3. מאתחלים את Cloud SDK, כמו שמתואר במאמר אתחול ה-CLI של gcloud, או מוודאים שהפרויקט בענן שיצרתם בקטע דרישות מוקדמות הוא פרויקט ברירת המחדל עבור gcloud.
  4. מגדירים את משתני הסביבה הבאים בטרמינל של הפקודה. בוחרים את הכרטיסייה שמתאימה לסוג הארגון שצריך: No data residency או עם Data residency:

    אין מיקום נתונים

    AUTH="$(gcloud auth print-access-token)"
    PROJECT_ID="YOUR_PROJECT_ID"
    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    RUNTIME_LOCATION="YOUR_RUNTIME_LOCATION"
    ANALYTICS_REGION="YOUR_ANALYTICS_REGION"
    BILLING_TYPE="YOUR_BILLING_TYPE"

    כאשר:

    • הכותרת AUTH מוגדרת עם אסימון Bearer.Authentication תשתמשו בכותרת הזו כשתיגשו לממשקי Apigee API. שימו לב שהטוקן יפוג אחרי תקופה מסוימת. כשהוא יפוג, תוכלו פשוט ליצור אותו מחדש באמצעות אותה פקודה. מידע נוסף זמין בדף העיון בנושא הפקודה print-access-token.
    • PROJECT_ID הוא מזהה פרויקט בענן שיצרתם במסגרת הדרישות המוקדמות.
    • PROJECT_NUMBER הוא מספר הפרויקט בענן שיצרתם כחלק מהדרישות המוקדמות.
    • RUNTIME_LOCATION הוא המיקום הפיזי שבו נמצא מופע Apigee שתיצרו בהמשך. רשימת המיקומים הזמינים של סביבות זמן ריצה מופיעה במאמר בנושא מיקומים של Apigee.

    • ANALYTICS_REGION הוא המיקום הפיזי שבו יאוחסנו נתוני הניתוח של Apigee. רשימת האזורים שבהם אפשר להשתמש ב-Apigee API Analytics זמינה במאמר מיקומי Apigee.

      הערכים של RUNTIME_LOCATION ו-ANALYTICS_REGION יכולים להיות זהים, אבל הם לא חייבים להיות זהים.

    • BILLING_TYPE הוא סוג החיוב של הארגון שאתם יוצרים. הערכים החוקיים הם:

    המיקום של נתונים

    AUTH="$(gcloud auth print-access-token)"
    PROJECT_ID="YOUR_PROJECT_ID"
    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    RUNTIME_LOCATION="YOUR_RUNTIME_LOCATION"
    CONTROL_PLANE_LOCATION="YOUR_CONTROL_PLANE_LOCATION"
    CONSUMER_DATA_REGION="YOUR_CONSUMER_DATA_REGION"
    BILLING_TYPE="YOUR_BILLING_TYPE"

    כאשר:

    • הכותרת AUTH מוגדרת עם אסימון Bearer.Authentication תשתמשו בכותרת הזו כשתיגשו לממשקי Apigee API. שימו לב שהטוקן יפוג אחרי תקופה מסוימת. כשהוא יפוג, תוכלו פשוט ליצור אותו מחדש באמצעות אותה פקודה. מידע נוסף זמין בדף העיון בנושא הפקודה print-access-token.
    • PROJECT_ID הוא מזהה פרויקט בענן שיצרתם במסגרת הדרישות המוקדמות.
    • PROJECT_NUMBER הוא מספר הפרויקט בענן שיצרתם כחלק מהדרישות המוקדמות.
    • RUNTIME_LOCATION הוא המיקום הפיזי שבו נמצא מופע Apigee שתיצרו בהמשך. רשימת המיקומים הזמינים של סביבות זמן ריצה מופיעה במאמר בנושא מיקומים של Apigee.

      המיקום של זמן הריצה חייב להיות בתוך המיקום של מישור הבקרה.
    • CONTROL_PLANE_LOCATION הוא המיקום הפיזי שבו יאוחסנו נתוני מישור הבקרה של Apigee. רשימת המיקומים הזמינים של מישור הבקרה מופיעה במאמר מיקומי Apigee.
    • CONSUMER_DATA_REGION הוא אזור משנה של אזור מישור הבקרה. חובה לציין גם את CONTROL_PLANE_LOCATION וגם את CONSUMER_DATA_REGION. רשימת האזורים שבהם אפשר לאחסן נתונים של צרכנים זמינה במאמר בנושא מיקומי Apigee.
    • BILLING_TYPE הוא סוג החיוב של הארגון שאתם יוצרים. הערכים החוקיים הם:

  5. (אופציונלי) כדי לבדוק את העבודה, אפשר להציג את הערכים שהגדרתם. שימו לב: כשרוצים להשתמש במשתנה בפקודות, צריך להוסיף לפני שם המשתנה סימן דולר ($).

    אין מיקום נתונים

    echo $AUTH
    echo $PROJECT_ID
    echo $PROJECT_NUMBER
    echo $RUNTIME_LOCATION
    echo $ANALYTICS_REGION
    echo $BILLING_TYPE
    

    התגובות לפקודות echo אמורות להיראות כך:

    YOUR_TOKEN
    my-cloud-project
    1234567890
    us-west1
    us-west1
    SUBSCRIPTION
    

    המיקום של נתונים

    echo $AUTH
    echo $PROJECT_ID
    echo $PROJECT_NUMBER
    echo $RUNTIME_LOCATION
    echo $CONTROL_PLANE_LOCATION
    echo $CONSUMER_DATA_REGION
    echo $BILLING_TYPE
    

    התגובות לפקודות echo אמורות להיראות כך:

    YOUR_TOKEN
    my-cloud-project
    1234567890
    us-west1
    us
    us-west1
    SUBSCRIPTION
    

שלב 2: הפעלת ממשקי API

  1. כדי להשתמש ב-Apigee, צריך להפעיל כמה ממשקי Google Cloud API. מפעילים אותם באמצעות הפקודה services enable הבאה:

    gcloud services enable apigee.googleapis.com \
        servicenetworking.googleapis.com \
        apihub.googleapis.com \
        compute.googleapis.com \
        cloudkms.googleapis.com --project=$PROJECT_ID
  2. (אופציונלי) כדי לבדוק את העבודה, משתמשים בפקודה services list כדי להציג את כל ממשקי ה-API המופעלים:

    gcloud services list

    בתשובה מוצגים כל השירותים המופעלים, כולל ממשקי ה-API שהפעלתם עכשיו.

שלב 3: יוצרים את הזהות בשירות Apigee

  1. יוצרים את הזהות בשירות של Apigee:

    gcloud beta services identity create --service=apigee.googleapis.com \
      --project=$PROJECT_ID
  2. מוודאים שהנציג נוצר בהצלחה. התשובה צריכה להציג את שם הסוכן בפורמט הבא: service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com. לדוגמה:

    Service identity created: service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com

שלב 4: הגדרת רשתות שירות

בשלב הזה, מקצים ל-Apigee זוג טווחים של כתובות IP (טווח CIDR של ‎ /22 ו-‎ /28) ומבצעים קישור בין רשת ה-VPC שלכם לבין רשת Apigee. כל מופע של Apigee דורש טווח CIDR לא חופף של ‎ /22 ו-‎ /28. למישור זמן הריצה של Apigee מוקצות כתובות IP מתוך טווח ה-CIDR הזה. לכן, חשוב שהטווח יהיה שמור ל-Apigee ולא ישמש אפליקציות אחרות ברשת ה-VPC שלכם. מידע נוסף ושיקולים חשובים מפורטים במאמר הסבר על טווחי peering.

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

  1. יוצרים את משתני הסביבה הבאים:
    RANGE_NAME=YOUR_RANGE_NAME
    NETWORK_NAME=YOUR_NETWORK_NAME
    

    כאשר:

    • RANGE_NAME הוא השם של טווח כתובות ה-IP שאתם יוצרים. אפשר לתת לטווח כל שם שרוצים. לדוגמה: google-svcs
    • NETWORK_NAME הוא השם של משאב הרשת שבו צריך לשריין את הכתובות.

      ‫Google יוצרת רשת שמוגדרת כברירת מחדל (בשם default) לכל פרויקט חדש, כך שאפשר להשתמש בה. עם זאת, ‫Google לא ממליצה להשתמש ברשת ברירת המחדל למטרות אחרות מלבד בדיקות.

  2. יוצרים טווח כתובות IP ברשת עם אורך CIDR של ‎ /22:
    gcloud compute addresses create $RANGE_NAME \
      --global \
      --prefix-length=22 \
      --description="Peering range for Apigee services" \
      --network=$NETWORK_NAME \
      --purpose=VPC_PEERING \
      --addresses=OPTIONAL_ADDRESSES \
      --project=$PROJECT_ID

    כש---addresses מאפשר לציין טווח כתובות. לדוגמה, כדי להקצות את בלוק ה-CIDR 192.168.0.0/22, צריך לציין 192.168.0.0 לכתובת ו-22 לאורך הקידומת. אפשר לעיין גם במאמר בנושא יצירת הקצאת כתובות IP.

    אם לא תציינו את הפרמטר --addresses, ‏ gcloud תבחר בשבילכם טווח כתובות זמין.

    אם הפעולה מצליחה, gcloud משיב עם:

    Created [https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/addresses/google-svcs].

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

  3. מוודאים שטווח כתובות ה-IP של הרשת נוצר עם אורך CIDR של ‎ /22:
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe $RANGE_NAME --global --project=$PROJECT_ID
  4. יוצרים טווח כתובות IP ברשת עם אורך CIDR של ‎ /28. הטווח הזה נדרש ומשמש את Apigee למטרות פתרון בעיות. אי אפשר להתאים אותו אישית או לשנות אותו.
    gcloud compute addresses create google-managed-services-support-1 \
      --global \
      --prefix-length=28 \
      --description="Peering range for supporting Apigee services" \
      --network=$NETWORK_NAME \
      --purpose=VPC_PEERING \
      --addresses=OPTIONAL_ADDRESSES \
      --project=$PROJECT_ID

    כש---addresses מאפשר לציין טווח כתובות. לדוגמה, כדי להקצות את בלוק ה-CIDR 192.168.0.0/28, צריך לציין 192.168.0.0 לכתובת ו-28 לאורך הקידומת. אפשר לעיין גם במאמר בנושא יצירת הקצאת כתובות IP.

    אם לא תציינו את הפרמטר --addresses, ‏ gcloud תבחר בשבילכם טווח כתובות זמין.

  5. מוודאים שטווח כתובות ה-IP של הרשת נוצר עם אורך CIDR של ‎ /28:
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe google-managed-services-support-1 --global \
      --project=$PROJECT_ID
  6. מחברים את השירותים לרשת באמצעות הפקודה הבאה:
    gcloud services vpc-peerings connect \
      --service=servicenetworking.googleapis.com \
      --network=$NETWORK_NAME \
      --ranges=$RANGE_NAME,google-managed-services-support-1 \
      --project=$PROJECT_ID

    הפעולה הזו יכולה להימשך כמה דקות. אם הפעולה מצליחה, gcloud משיב את הערכים הבאים, כאשר OPERATION_ID הוא ה-UUID של LRO.

    Operation "operations/OPERATION_ID" finished successfully.
  7. ‫Apigee יוצר חיבור בין הרשת שלכם לבין השירותים של Google. באופן ספציפי,‫Apigee מקשר את הפרויקט שלכם ל-Service Networking API באמצעות קישור VPC. ‫Apigee גם משייך כתובות IP לפרויקט שלכם.

  8. אחרי כמה דקות, בודקים אם ה-VPC Peering הצליח:
    gcloud services vpc-peerings list \
      --network=$NETWORK_NAME \
      --service=servicenetworking.googleapis.com \
      --project=$PROJECT_ID

שלב 5: יצירת ארגון

לפני שיוצרים ארגון, צריך ליצור מחזיק מפתחות ומפתח להצפנת מסד נתונים בזמן ריצה (ראו שלב 1). אם משתמשים ב מיקום הנתונים, צריך ליצור מחזיקי מפתחות ומפתחות להצפנת מישור הבקרה (ראו שלב 2). המפתחות של Cloud KMS מצפינים נתונים שמאוחסנים ומשוכפלים במיקומים של זמן ריצה ושל מישור בקרה. ‫Apigee משתמשת בישויות האלה כדי להצפין נתוני אפליקציות כמו KVM, מטמון וסודות לקוח, ואז מאחסנת אותם במסד הנתונים. מידע נוסף זמין במאמר בנושא מפתחות ההצפנה של Apigee.

  1. יצירה של אוסף מפתחות ומפתח להצפנת מסד נתונים בזמן ריצה.

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

      הערך הוא המיקום הפיזי שבו מאוחסנים מחזיק המפתחות והמפתח של הצפנת מסד הנתונים בזמן הריצה.

      אזור יחיד

      הגדרות של אזור יחיד (שבהן יש רק מופע אחד באזור אחד): בוחרים מתוך המיקומים האזוריים הנתמכים של KMS.

      לדוגמה:

      RUNTIMEDBKEY_LOCATION="us-west1"

      הערך יכול להיות זהה לערך של $RUNTIME_LOCATION (גם הוא אזור), אבל הוא לא חייב להיות זהה. עם זאת, יכול להיות שיהיה שיפור בביצועים אם הם יהיו זהים.

      במספר אזורים

      תצורות של מספר אזורים: בוחרים מתוך המיקומים הנתמכים במספר אזורים (למשל us או europe) או המיקומים הנתמכים בשני אזורים.

      לדוגמה:

      RUNTIMEDBKEY_LOCATION="us"

      אם יש לכם הגדרה של מספר אזורים בארה"ב, מומלץ להשתמש ב-us למיקום שלכם, אם אפשר. אחרת, משתמשים ב-nam4.

    2. הגדרת משתני סביבה לאוספי מפתחות של מסד נתונים ולשמות של מפתחות.

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

      RUNTIMEDB_KEY_RING_NAME=YOUR_DB_KEY_RING_NAME
      RUNTIMEDB_KEY_NAME=YOUR_DB_KEY_NAME
    3. (אופציונלי) כדי לבדוק את העבודה, אפשר להציג את הערכים שהגדרתם. חשוב לזכור: כשרוצים להשתמש במשתנה בפקודות, צריך להוסיף לפני שם המשתנה סימן דולר ($).
      echo $RUNTIMEDBKEY_LOCATION
      echo $RUNTIMEDB_KEY_RING_NAME
      echo $RUNTIMEDB_KEY_NAME
    4. יצירת אוסף מפתחות חדש:
      gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \
        --location $RUNTIMEDBKEY_LOCATION --project $PROJECT_ID

      המיקום של מפתח ההצפנה של מסד הנתונים של זמן הריצה של Apigee תומך בכל המיקומים של Cloud KMS שתומכים ב-Cloud HSM וב-Cloud EKM.

    5. יוצרים מפתח:

      gcloud kms keys create $RUNTIMEDB_KEY_NAME \
        --keyring $RUNTIMEDB_KEY_RING_NAME \
        --location $RUNTIMEDBKEY_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID

      הפקודה הזו יוצרת את המפתח ומוסיפה אותו לאוסף המפתחות.

      מאחזרים את מזהה המפתח:

      gcloud kms keys list \
        --location=$RUNTIMEDBKEY_LOCATION \
        --keyring=$RUNTIMEDB_KEY_RING_NAME \
        --project=$PROJECT_ID

      תחביר מזהה המפתח (דומה לנתיב קובץ):

      projects/PROJECT_ID/locations/RUNTIMEDBKEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME
    6. מכניסים את מזהה המפתח למשתנה סביבה. תשתמשו במשתנה הזה בפקודה מאוחרת יותר:

      RUNTIMEDB_KEY_ID=YOUR_RUNTIMEDB_KEY_ID
    7. מעניקים לסוכן השירות של Apigee גישה לשימוש במפתח החדש:

      gcloud kms keys add-iam-policy-binding $RUNTIMEDB_KEY_NAME \
        --location $RUNTIMEDBKEY_LOCATION \
        --keyring $RUNTIMEDB_KEY_RING_NAME \
        --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project $PROJECT_ID

      הפקודה הזו מקשרת את המפתח לסוכן השירות של Apigee.

      אם הבקשה הזו תושלם בהצלחה, gcloud ישיב עם משהו דומה לזה:

      Updated IAM policy for key [runtime].
      bindings:
      - members:
        - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
        role: roles/cloudkms.cryptoKeyEncrypterDecrypter
      etag: BwWqgEuCuwk=
      version: 1

      אם מופיעה שגיאה כמו זו:

      INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.

      חשוב לוודא שהשתמשתם במספר הפרויקט ולא בשם הפרויקט בכתובת האימייל של חשבון השירות.

  2. אם אתם משתמשים ב שמירת נתונים באזור מסוים, אתם צריכים ליצור אוסף מפתחות ומפתח להצפנת מישור הבקרה. אם אתם לא משתמשים במיקום הנתונים, עוברים אל שלב 3.
  3. כדי ליצור אוסף מפתחות ומפתח להצפנת מישור הבקרה, פועלים לפי השלבים הבאים.

    1. מגדירים משתנה סביבה למיקום של טבעת ההצפנה ומפתח ההצפנה של מסד הנתונים במישור הבקרה:
      CONTROL_PLANE_LOCATION=YOUR_CONTROL_PLANE_LOCATION
      CONSUMER_DATA_REGION=YOUR_CONSUMER_DATA_REGION

      כאשר:

      • CONTROL_PLANE_LOCATION הוא המיקום הפיזי שבו יאוחסנו נתוני מישור הבקרה של Apigee. רשימת המיקומים הזמינים של מישור הבקרה מופיעה במאמר מיקומי Apigee.
      • CONSUMER_DATA_REGION הוא אזור משנה של אזור מישור הבקרה. חובה לציין גם את CONTROL_PLANE_LOCATION וגם את CONSUMER_DATA_REGION. רשימת האזורים שבהם אפשר לאחסן נתונים של צרכנים זמינה במאמר בנושא מיקומי Apigee.
    2. מגדירים משתני סביבה לאוספי מפתחות ולשמות מפתחות של מסד הנתונים של מישור הבקרה.

      השם של מחזיק המפתחות צריך להיות ייחודי בארגון.

      CONTROL_PLANE_KEY_RING_NAME=YOUR_CONTROL_PLANE_KEY_RING_NAME
      CONTROL_PLANE_KEY_NAME=YOUR_CONTROL_PLANE_KEY_NAME
      CONSUMER_DATA_KEY_RING_NAME=YOUR_CONSUMER_DATA_KEY_RING_NAME
      CONSUMER_DATA_KEY_NAME=YOUR_CONSUMER_DATA_REGION_KEY_NAME

      כאשר:

      • CONTROL_PLANE_KEY_RING_NAME הוא השם של אוסף המפתחות שבו תשתמשו כדי לזהות את אוסף המפתחות להצפנת מישור הבקרה.
      • CONTROL_PLANE_KEY_NAME הוא השם של המפתח שבו תשתמשו כדי לזהות את מפתח ההצפנה של מישור הבקרה.
      • CONSUMER_DATA_KEY_RING_NAME הוא השם של אוסף המפתחות שבו תשתמשו כדי לזהות את אזור גיאוגרפי לאחסון נתונים של נתוני הצרכנים המוצפנים.
      • CONSUMER_DATA_KEY_NAME הוא השם של המפתח שבו תשתמשו כדי לזהות את מפתח ההצפנה של אזור הנתונים שלכם.
    3. יצירת אוסף מפתחות חדש:
      gcloud kms keyrings create $CONTROL_PLANE_KEY_RING_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --project $PROJECT_ID
      gcloud kms keyrings create $CONSUMER_DATA_KEY_RING_NAME \
        --location $CONSUMER_DATA_REGION \
        --project $PROJECT_ID
    4. יוצרים מפתח:
      gcloud kms keys create $CONTROL_PLANE_KEY_NAME \
        --keyring $CONTROL_PLANE_KEY_RING_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID
      gcloud kms keys create $CONSUMER_DATA_KEY_NAME \
        --keyring $CONSUMER_DATA_KEY_RING_NAME \
        --location $CONSUMER_DATA_REGION \
        --purpose "encryption" \
        --project $PROJECT_ID

      הפקודה הזו יוצרת את המפתח ומוסיפה אותו לאוסף המפתחות.

      מאחזרים את מזהה המפתח:

      gcloud kms keys list \
      --location=$CONTROL_PLANE_LOCATION \
      --keyring=$CONTROL_PLANE_KEY_RING_NAME \
      --project=$PROJECT_ID
      gcloud kms keys list \
      --location=$CONSUMER_DATA_REGION \
      --keyring=$CONSUMER_DATA_KEY_RING_NAME \
      --project=$PROJECT_ID

      תחביר מזהה המפתח (דומה לנתיב קובץ):

      projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME
      projects/PROJECT_ID/locations/CONSUMER_DATA_REGION/keyRings/CONSUMER_DATA_KEY_RING_NAME/cryptoKeys/CONSUMER_DATA_KEY_NAME
    5. מכניסים את מזהה המפתח למשתנה סביבה. תשתמשו במשתנה הזה בפקודה מאוחרת יותר:
      CONTROL_PLANE_KEY_ID=YOUR_CONTROL_PLANE_KEY_ID
      
      CONSUMER_DATA_KEY_ID=YOUR_CONSUMER_DATA_KEY_ID
    6. מעניקים לסוכן השירות של Apigee גישה לשימוש במפתח החדש:
      gcloud kms keys add-iam-policy-binding $CONTROL_PLANE_KEY_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --keyring $CONTROL_PLANE_KEY_RING_NAME \
        --member "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project $PROJECT_ID
      
      gcloud kms keys add-iam-policy-binding $CONSUMER_DATA_KEY_NAME \
       --location $CONSUMER_DATA_REGION \
       --keyring $CONSUMER_DATA_KEY_RING_NAME \
       --member "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
       --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
       --project $PROJECT_ID
      

      הפקודה הזו מקשרת את המפתח לסוכן השירות של Apigee. אם הבקשה תושלם בהצלחה, gcloud ישיב בתגובה שדומה לתגובה הבאה:

      Updated IAM policy for key [runtime].
      bindings:
      - members:
        - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
        role: roles/cloudkms.cryptoKeyEncrypterDecrypter
      etag: BwWqgEuCuwk=
      version: 1

      אם מופיעה שגיאה כמו זו:

      INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.

      חשוב לוודא שהשתמשתם במספר הפרויקט ולא בשם הפרויקט בכתובת האימייל של חשבון השירות.

    ראו גם: פתרון בעיות ב-CMEK.

  4. יוצרים את הארגון על ידי שליחת הבקשה הבאה אל organizations API של Apigee:

    אין מיקום נתונים

    curl "https://apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID"  \
      -H "Authorization: Bearer $AUTH" \
      -X POST \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$PROJECT_ID"'",
        "analyticsRegion":"'"$ANALYTICS_REGION"'",
        "runtimeType":"CLOUD",
        "billingType":"'"$BILLING_TYPE"'",
        "authorizedNetwork":"'"$NETWORK_NAME"'",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    כאשר:

    • -d מגדיר את מטען הנתונים של הבקשה. המטען הייעודי (payload) הזה חייב לכלול את הפרטים הבאים:
      • name: מזהה את הארגון החדש. השם צריך להיות זהה למזהה הפרויקט.

      • analyticsRegion: מציין את המיקום הפיזי שבו יישמרו נתוני הניתוח.

      • runtimeType: מגדירים את הערך הזה ל-CLOUD.
      • billingType: מציין את סוג החיוב של הארגון שנוצר.
      • authorizedNetwork: מזהה את רשת ה-Peering שציינתם בהגדרת רשתות שירות.
      • runtimeDatabaseEncryptionKeyName: המזהה של מפתח ההצפנה של האפליקציה שיצרתם בשלב הקודם. חשוב לזכור שהמזהה בנוי כמו נתיב קובץ. לדוגמה:
        projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    המיקום של נתונים

    יצירת ארגון באמצעות ה-API:

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID"  \
      -H "Authorization: Bearer $AUTH" \
      -X POST \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$PROJECT_ID"'",
        "runtimeType":"CLOUD",
        "billingType":"'"$BILLING_TYPE"'",
        "controlPlaneEncryptionKeyName":"'"$CONTROL_PLANE_KEY_ID"'",
        "apiConsumerDataLocation":"'"$CONSUMER_DATA_REGION"'",
        "apiConsumerDataEncryptionKeyName":"'"$CONSUMER_DATA_KEY_ID"'",
        "authorizedNetwork":"'"$NETWORK_NAME"'",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    כאשר:

    -d מגדיר את מטען הנתונים של הבקשה. המטען הייעודי הזה חייב לכלול את הפרטים הבאים:

    • name: מזהה את הארגון החדש. השם צריך להיות זהה למזהה הפרויקט.
    • runtimeType: מגדירים את הערך הזה ל-CLOUD.
    • billingType: מציין את סוג החיוב של הארגון שנוצר.
    • controlPlaneEncryptionKeyName: מזהה המפתח של מישור הבקרה.
    • apiConsumerDataLocation: צריך גם לציין אזור משנה לשימוש של משאבים פנימיים. במאמר בנושא אזורים שבהם הנתונים מאוחסנים מפורטים הערכים הנתמכים.
    • apiConsumerDataEncryptionKeyName: מזהה המפתח של האזור הגיאוגרפי לאחסון נתונים של הצרכנים.
    • authorizedNetwork: מזהה את רשת ה-Peering שציינתם בהגדרת רשתות שירות.
    • runtimeDatabaseEncryptionKeyName: המזהה של מפתח ההצפנה של האפליקציה שיצרתם בשלב הקודם. חשוב לזכור שהמזהה בנוי כמו נתיב קובץ. לדוגמה:
      projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    אחרי שמריצים את הפקודה הזו, Apigee מתחיל פעולה ארוכת טווח, שיכולה להימשך כמה דקות.

    אם מוצגת שגיאה, צריך לבדוק את השימוש במרכאות סביב ערכי המשתנים במטען ייעודי (payload). חשוב לוודא שמשתנה $PROJECT_ID מוקף במירכאות כפולות, מירכאות בודדות ומירכאות כפולות, כמו בדוגמה הבאה:

    "'"$PROJECT_ID"'"

    אם אתם משתמשים במחרוזות פשוטות (לא במשתני סביבה) לערכי הבקשה, אתם יכולים להוסיף אותן במירכאות כפולות בתוך מחרוזת המטען הייעודי (payload) במירכאות בודדות, כמו בדוגמה הבאה:

    '{ "name":"my-gcp-project", ... }'
  5. מחכים כמה דקות.
  6. כדי לבדוק את הסטטוס של בקשת היצירה, אפשר לשלוח בקשת GET אל List organizations API של Apigee, כמו בדוגמה הבאה:

    אין מיקום נתונים

    curl -H "Authorization: Bearer $AUTH" "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    המיקום של נתונים

    curl -H "Authorization: Bearer $AUTH" "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    אם אתם רואים את התשובה הזו, סימן שיצירת הארגון עדיין לא הושלמה:

    {
      "error": {
        "code": 403,
        "message": "Permission denied on resource \"organizations/apigee-docs-m\" (or it may not exist)",
        "status": "PERMISSION_DENIED"
      }
    }

    אם Apigee יצליח ליצור ארגון חדש, תקבלו תגובה שדומה לזו:

    אין מיקום נתונים

    {
      "name": "my-cloud-project",
      "createdAt": "1592586495539",
      "lastModifiedAt": "1592586495539",
      "environments": [],
      "properties": {
        "property": [
          {
            "name": "features.hybrid.enabled",
            "value": "true"
          },
          {
            "name": "features.mart.connect.enabled",
            "value": "true"
          }
        ]
      },
      "analyticsRegion": "us-west1",
      "runtimeType": "CLOUD",
      "subscriptionType": "PAID",
      "caCertificate": "YOUR_CERTIFICATE",
      "authorizedNetwork": "my-network",
      "projectId": "my-cloud-project"
    }

    המיקום של נתונים

      {
        "name": "my-cloud-project",
        "createdAt": "1681412783749",
        "lastModifiedAt": "1681412783749",
        "environments": [
          "test-env"
        ],
        "properties": {
          "property": [
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
          ]
        },
        "authorizedNetwork": "default",
        "runtimeType": "CLOUD",
        "subscriptionType": "PAID",
        "caCertificate": "YOUR_CERTIFICATE",
        "runtimeDatabaseEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "projectId": "my-cloud-project",
        "state": "ACTIVE",
        "billingType": "PAYG",
        "addonsConfig": {
          "advancedApiOpsConfig": {},
          "integrationConfig": {},
          "monetizationConfig": {},
          "connectorsPlatformConfig": {}
        },
        "apiConsumerDataEncryptionKeyName": "projects/my-cloud-project/locations/us-central1/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "controlPlaneEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "apiConsumerDataLocation": "us-central1",
        "apigeeProjectId": "i0c2a37e80f9850ab-tp"
      }
    
    

    אם Apigee מחזיר תגובת שגיאת HTTP, כדאי לעיין במאמר בנושא יצירת ארגון Apigee.