המדריך הזה מסביר איך להשתמש באיחוד שירותי אימות הזהות של עומסי עבודה כדי לאמת עומסי עבודה שרצים מחוץ ל- Cloud de Confiance by S3NS , כך שיוכלו לגשת למיקרו-שירותים (microservices) ש-Cloud Run מארח. המדריך הזה מיועד לאדמינים שרוצים לשלב את איחוד שירותי אימות הזהות של עומסי עבודה עם ספק הזהויות הקיים (IdP). איחוד שירותי אימות הזהויות של עומסי עבודה מאפשר לחבר עומסי עבודה חיצוניים לעומסי עבודה שפועלים ב- Cloud de Confiance by S3NS. Cloud Run מאפשר להריץ מיקרו-שירותים (microservices) בקונטיינרים ללא שמירת מצב.
המדריך הזה מספק הוראות להגדרה של Jenkins כעומס העבודה החיצוני, של Keycloak כ-IdP, של Cloud Run ושל איחוד שירותי אימות הזהויות של עומסי עבודה. לאחר השלמת המדריך הזה, תבינו איך איחוד שירותי אימות הזהות של עומסי עבודה מאפשר לבצע אימות של אפליקציית Jenkins עם Cloud de Confiance באמצעות אימות OpenID Connect.
אימות עומס עבודה חיצוני באמצעות איחוד שירותי אימות הזהות של עומסי עבודה
איחוד שירותי אימות הזהות של עומסי עבודה מאפשר לאמת עומסי עבודה מחוץ ל- Cloud de Confiance בלי להשתמש במפתח סטטי של חשבון שירות. התכונה הזו יכולה להועיל לכל עומסי העבודה החיצוניים שצריכים לצרוך שירותים ב-Cloud de Confiance .
איחוד שירותי אימות הזהויות של עומסי עבודה מאפשר לכם להשתמש ב-IdP כדי לבצע אימות ישירות מולCloud de Confiance. כדי לבצע אימות, משתמשים ב-OpenID Connect. Cloud Run מקבל מה-IdP אסימונים מסוג OpenID Connect לצורך אימות.
תהליך האימות באמצעות איחוד שירותי אימות הזהות של עומסי עבודה הוא:
- ספריית האימות (AUTHN) שולחת ל-IdP בקשת אסימון אינטרנט מסוג JSON (JWT).
- ה-IdP חותם על אסימוני האינטרנט מסוג JSON (JWT). הספרייה AUTHN קוראת את הנתונים האלו מתוך משתנה.
- הספרייה שולחת פקודת POST אל Security Token Service, שכוללת את האסימון החתום.
- Security Token Service בוחן את ספק מאגר הזהויות של עומס העבודה שהוגדר כדי ליצור אמון ומאמת את הזהות מול פרטי הכניסה.
- Security Token Service שולח חזרה אסימון גישה מאוחד.
- הספרייה שולחת את אסימון הגישה המאוחד ל-IAM.
- מערכת IAM מחליפה את אסימון הגישה המאוחד באסימון מזהה. למידע נוסף, ראו יצירת אסימון מזהה של OpenID Connect (OIDC).
- הספרייה מספקת את האסימון המזהה ל-Jenkins.
- Jenkins משתמש באסימון הזה כדי לבצע אימות עם Cloud Run.
התרשים הבא מדגים את תהליך האימות:
מטרות
- הגדרת Jenkins כעומס העבודה החיצוני.
- הגדרת Keycloak כ-IdP שתואם ל-OpenID Connect.
- חיבור Jenkins עם Keycloak.
- התקנת ספריות לקוח של Cloud כדי לקבל את אסימון ה-JWT מ-Keycloak אל Cloud de Confiance.
- חיבור Cloud de Confiance ל-Keycloak ול-Jenkins.
- קבלת ה-JWT בשביל המשתמש המאומת מ-Keycloak.
למרות שמדריך זה משתמש ב-Keycloak, אפשר להשתמש בכל ספק זהויות שתומך ב-OpenID Connect, כמו GitLab, Okta או OneLogin.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Cloud de Confiance by S3NS, והשימוש בהם כרוך בתשלום:
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
-
In the Cloud de Confiance console, go to the project selector page.
-
Select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
- הגדרת מיקרו-שירות (microservice) ב-Cloud Run. מידע נוסף זמין במאמר מדריך למתחילים: פריסת קונטיינרים ב-Cloud Run.
הגדרת Jenkins
צריך לבצע את המשימות האלו בסביבה שאינה שלCloud de Confiance , למשל בסביבה מקומית או בענן אחר.
אם כבר יש ספק זהויות שתומך ב-OpenID Connect ובעומס עבודה חיצוני, אפשר לדלג על השלב הזה ולעבור אל התקנת ספריות לקוח של Cloud.
כדי לדמות עומס עבודה חיצוני, אפשר להשתמש ב-VM שמותקן עליה Jenkins. אפשר להריץ את Jenkins כקובץ אימג' של Docker או להתקין אותו ישירות בשרת. השלבים הבאים מסבירים איך להתקין אותו ישירות בשרת.
- פותחים את שורת הפקודה ב-VM כלשהי.
מתקינים Java:
$ sudo apt update $ sudo apt install openjdk-11-jre $ java -versionמתקינים את Jenkins:
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \ /usr/share/keyrings/jenkins-keyring.asc > /dev/null echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \ https://pkg.jenkins.io/debian-stable binary/ | sudo tee \ /etc/apt/sources.list.d/jenkins.list > /dev/null sudo apt-get update sudo apt-get install jenkinsמוודאים שיש גישה לשרת Jenkins ביציאה 8080. אם משתמשים ב-VM שנמצאת מאחורי חומת אש, מוודאים שהיציאות המתאימות פתוחות.
משיגים את סיסמת האדמין ומגדירים את Jenkins. הוראות מופיעות באשף ההגדרה לאחר ההתקנה.
כדי להגדיר SSL, מבצעים את הפעולות הבאות:
- אם יש ספק דומיין, אפשר להשתמש ברשות האישורים (CA) שלו כדי לבקש אישור חתום. לחלופין, אפשר לקבל אישור חתום בחינם למשך 90 יום מהכתובת zerossl.com.
מורידים את קובץ ה-zip של האישור ומעבירים אותו לשרת שבו מריצים Jenkins:
scp -i CERTFILE.pem -r CERTFILE.zip VM_FQDN:/home/USERNAMEמחליפים את מה שכתוב בשדות הבאים:
-
CERTFILEמחליפים בשם של קובץ האישור שכולל את המפתח הציבורי. -
VM_FQDNמחליפים ב-FQDN של השרת מחוץ ל- Cloud de Confiance. -
USERNAMEמחליפים בשם המשתמש שלכם.
-
משנים את השמות של הקבצים ויוצרים קובץ .pkcs12 לשימוש של Jenkins:
openssl rsa -in KEYFILE.com.key -out KEYFILE.com.keyמחליפים את
KEYFILEבשם של קובץ האישור.
מעדכנים את הקובץ
/etc/sysconfig/jenkins:פותחים את הקובץ בכלי לעריכת טקסט:
vi /etc/sysconfig/jenkinsמגדירים את
JENKINS_PORTלהיות-1.מגדירים את
JENKINS_HTTPS_PORTלהיות8443.בתחתית הקובץ, מוסיפים את הארגומנטים הבאים:
JENKINS_ARGS="--httpsCertificate=/var/lib/jenkins/.ssl/CERTFILE.crt --httpsPrivateKeys=/var/lib/jenkins/.ssl/KEYFILE.pkcs1.key"מחליפים את מה שכתוב בשדות הבאים:
-
CERTFILEמחליפים בשם של קובץ האישור בפורמט .crt -
KEYFILEמחליפים בשם הקובץ של מפתח ה-PKCS.
-
מפעילים מחדש את שרת Jenkins.
מוודאים שהיציאה 8443 פתוחה בחומת האש, וניגשים ל-Jenkins ביציאה 8443.
מתקינים פלאגין של Jenkins כדי לשלב את Keycloak עם Jenkins. אפשר לבחור באחת מהאפשרויות הבאות:
כדי להתקין את הפלאגין:
- בלוח הבקרה של Jenkins, עוברים אל Manage Jenkins > Manage Plugins.
בוחרים Available ומחפשים את הפלאגין הרצוי. בצילום המסך הבא אפשר לראות את מנהל יישומי הפלאגין עם בחירה בכרטיסייה Availability.

מתקינים את הפלאגין.
הגדרת Keycloak
במדריך הזה, Keycloak מנהל את המשתמשים, הקבוצות והתפקידים. Keycloak משתמש בתחום (Realm) לניהול משתמשים.
ב-VM שפועל מחוץ ל- Cloud de Confiance, מתקינים את שרת Keycloak. בשביל מדריך זה מומלץ להתקין את Keycloak מקונטיינר של Docker.
פותחים את מסוף Admin של Keycloak.
עוברים אל Realm settings.
בכרטיסייה General מוודאים שהשדות מוגדרים כך:
- Enabled: ON
- User-Managed Access: OFF
- Endpoints: OpenID Endpoint Configuration וגם SAML 2.0 Identity Provider Metadata
בצילום המסך הבא מוצגים השדות שצריך להגדיר.

יוצרים לקוח, שהוא הישות שיכולה לבקש מ-Keycloak לבצע אימות משתמש. לעיתים קרובות לקוחות הם אפליקציות ושירותים שמשתמשים ב-Keycloak כספק של פתרון כניסה יחידה (SSO).
- במסוף Admin של Keycloak, לוחצים על Clients > Create.
מזינים את הפרטים הבאים:
- Client ID: jenkins
- Client Protocol: openid-connect
- Root URL: http://JENKINS_IP_ADDRESS:8080, כאשר JENKINS_IP_ADDRESS היא כתובת ה-IP של שרת ה-Jenkins.
בצילום המסך הבא מוצגים השדות שצריך להגדיר.

לוחצים על Save.
בכרטיסייה Installation, מוודאים שפורמט האסימון הוא Keycloak OIDC JSON. צרו עותק של האסימון הזה, כי תצטרכו אותו להשלמת ההגדרה של Jenkins.
כדי ליצור קבוצת בדיקה:
- במסוף Admin של Keycloak, לוחצים על Groups > New.
- מזינים שם לקבוצה ולוחצים על Save.
- יוצרים קבוצת בדיקה נוספת. אפשר להקצות תפקידים לקבוצות, אבל זו לא חובה לעשות זאת עבור המדריך הזה.
כדי להוסיף לקבוצה חשבון למטרות בדיקה:
- במסוף Admin של Keycloak, לוחצים על Manage user > Add users.
ממלאים את פרטי המשתמש ולוחצים על Save.
בצילום המסך הבא מוצג מידע לדוגמה של חשבון משתמש.

לוחצים על הכרטיסייה Credentials ומוודאים שהשדה Temporary מוגדר למצב Off.
מאפסים את הסיסמה.
בהמשך, החשבון הזה ישמש לביצוע אימות ב-JWT.
בצילום המסך הבא מוצגת הכרטיסייה Credentials עם השדות שצריך להגדיר.

לוחצים על הכרטיסייה Groups ובוחרים אחת מהקבוצות שנוצרו קודם.
לוחצים על Join.
חוזרים על הפעולה הזו כדי ליצור עוד חשבונות למטרות בדיקה.
הגדרת Jenkins לשימוש ב-OpenID Connect
הקטע הזה מתאר איך להגדיר שימוש בפלאגין של OpenID Connect ב-Jenkins.
- בשרת Jenkins, עוברים אל Manage Jenkins > Configuration Global Security.
בקטע Security Realm, בוחרים את Keycloak Authentication Plugin. לוחצים על Save.
לוחצים על Configure system.
בהגדרות של Global Keycloak, מעתיקים את ה-JSON של התקנת Keycloak שיצרתם ב-Configure Keycloak. כדי לקבל שוב את נתוני ה-JSON, משלימים את השלבים הבאים:
במסוף Admin של Keycloak, עוברים אל Clients.
לוחצים על שם הלקוח.
בכרטיסייה Installation, לוחצים על Format Option ובוחרים את Keycloak OIDC JSON.
הנה דוגמה ל-JSON של Keycloak:
{ "realm":"master" "auth-server-url":"AUTHSERVERURL" "ssl-required":"none" "resource":"jenkins" "public-client":true "confidential-port":0 }AUTHSERVERURL היא כתובת ה-URL של שרת האימות.
כדי לשמור את תצורת OIDC, לוחצים על Save.
עכשיו Jenkins יכול להפנות באופן אוטומטי ל-Keycloak כדי לקבל פרטי משתמשים.
התקנת ספריות לקוח של Cloud
כדי לשלוח JWT מ-Keycloak אל Cloud de Confiance, צריך להתקין את ספריות הלקוח של Cloud בשרת ה-Jenkins. במדריך הזה משתמשים ב-Python כדי ליצור אינטראקציה עםCloud de Confiance באמצעות ה-SDK.
בשרת ה-Jenkins, מתקינים Python. כדי להתקין את python3:
sudo apt update sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update sudo apt install python3.8מתקינים את pip3 כדי להוריד ולייבא ספריות לקוח של Cloud:
pip3 –version sudo apt update sudo apt install python3-pip pip3 –versionבאמצעות pip3 מתקינים את ספריות הלקוח של Cloud לשימוש ב-Python.
pip3 install –upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlibלדוגמה:
pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib Collecting google-api-python-client Downloading google_api_python_client-2.42.0-py2.py3-none-any.whl (8.3 MB) USERNAME | 8.3 MB 19.9 MB/s Collecting google-auth-httplib2 Downloading google_auth_httplib2-0.1.0-py2.py3-none-any.whl (9.3 MB) Collecting google-auth-oauthlib Downloading google_auth_oauthlib-0.5.1-py2.py3-non-any.whl (19 KB)מחליפים את USERNAME בשם המשתמש.
מתקינים את Google Cloud CLI בשרת ה-Jenkins. להוראות, ראו מדריך למתחילים: התקנת CLI של gcloud.
הגדרת הסביבה של Cloud de Confiance
בקטע הזה מתוארים השלבים שצריך לבצע כדי לוודא שסביבתCloud de Confiance שמארחת את הקונטיינר ללא שרת תוכל להתחבר ל-Jenkins ול-Keycloak.
ב- Cloud de Confiance, יוצרים חשבון שירות כדי שהמיקרו-שירות (microservice) ב-Cloud Run יוכל לגשת להרשאות שמצורפות אליו. לדוגמה, כדי ליצור חשבון שירות באמצעות ה-CLI של gcloud:
gcloud iam service-accounts create cloudrun-oidc \ –-description="cloud run oidc sa" \ –-display-name="cloudrun-oidc"כברירת מחדל, Cloud Run יוצר חשבון שירות שמוגדר כברירת מחדל. עם זאת, לא מומלץ להשתמש בחשבון השירות שמוגדר כברירת מחדל, כי הוא כולל טווח הרשאות רחב. לכן מומלץ ליצור חשבון שירות נפרד בשביל המיקרו-שירות (microservice). להוראות ליצירת חשבון שירות בשביל Cloud Run, ראו יצירה וניהול של חשבונות שירות.
יוצרים מאגר זהויות של עומסי עבודה. כדי ליצור מאגר באמצעות CLI של gcloud:
gcloud iam workload-identity-pools create cloudrun-oidc-pool \ --location="global" \ —-description="cloudrun-oidc" \ —-display-name="cloudrun-oidc"יוצרים ספק מאגר זהויות של עומסי עבודה בשביל OpenID Connect:
gcloud iam workload-identity-pools providers create-oidc cloud-run-provider \ --workload-identity-pool="cloudrun-oidc-pool" \ --issuer-uri="VAR_LINK_TO_ENDPOINT" \ --location="global" \ --attribute-mapping ="google.subject=assertion.sub,attribute.isadmin-assertion.isadmin,attribute.aud=assertion.aud" \ --attribute-condition="attribute.isadmin=='true'"מחליפים את הערך
VAR_LINK_TO_ENDPOINTבמשתנה שמכיל את הקישור לנקודת הקצה (endpoint) של OIDC של Keycloak. כדי למצוא את הקישור הזה, בחלון Realm במסוף האדמין של KeyCloud, לוחצים על הכרטיסייה General. נקודת הקצה חייבת להיות מסוג HTTPS, כלומר צריך להגדיר את שרת Keycloak עם HTTPS.
קבלת JWT מ-Keycloak בשביל משתמש מאומת
ב-VM שמריצה Keycloak, מורידים את האסימון לקובץ טקסט. לדוגמה, ב-Linux, מריצים:
curl -L -X POST 'https://IP_FOR_KEYCLOAK:8080/auth/realms/master/protocol/openid-connect/token' -H 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=jenks' \ --data-urlencode 'grant_type=password' \ --data-urlencode 'client_secret=CLIENT_SECRET \ --data-urlencode 'scope=openid' \ --data-urlencode 'username=USERNAME' \ --data-urlencode 'password=PASSWORD' | grep access_token | cut -c18-1490 > token.txtמחליפים את מה שכתוב בשדות הבאים:
-
IP_FOR_KEYCLOAKמחליפים בכתובת ה-IP של שרת Keycloak. -
CLIENT_SECRETמחליפים בסוד הלקוח של Keycloak. -
USERNAMEמחליפים במשתמש Keycloak -
PASSWORDמחליפים בסיסמה של המשתמש Keycloak.
הפקודה הזו כוללת את מזהה הלקוח, סוד הלקוח, שם המשתמש והסיסמה. השיטה המומלצת לאבטחה היא להשתמש במשתני סביבה כדי לבצע אנונימיזציה של הערכים האלו, במקום להשתמש בשורת הפקודה. הפקודה לדוגמה מבצעת הפניה של פרטי הכניסה לקובץ בשם
token.txt.אפשר גם ליצור סקריפט bash כדי להפוך את השלב הזה לאוטומטי.
-
אפשר לאמת את האסימון בכתובת jwt.io.
ב-VM, יוצרים את קובץ פרטי הכניסה:
gcloud iam workload-identity-pools create-cred-config \ projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/cloudrun-oidc-pool/providers/cloud-run/provider \ --output-file=sts-creds.json \ --credential-source-file=token.txtלמידע נוסף, ראו gcloud iamworkload-identity-pools create-cred-config.
קובץ הפלט צריך להיראות ככה:
{ "type": "external_account", "audience": "//iam.google.apis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/cloudrun-oidc-pool/subject/USER_EMAIL", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "credential_source": { "file" "token.txt" } }
PROJECT_NUMBERהוא מספר הפרויקט.ב-VM, מגדירים את הקובץ
sts.creds.jsonכמשתנה בשביל ADC:export GOOGLE_APPLICATION_CREDENTIALS=/Users/USERNAME/sts-creds.jsonמחליפים את USERNAME בשם המשתמש ב-UNIX.
לפני ההשקה של איחוד שירותי אימות הזהויות של עומסי עבודה, הערך הזה היה המפתח של חשבון השירות. עם איחוד שירותי אימות הזהות של עומסי עבודה, הערך הזה הוא קובץ פרטי הכניסה החדש שנוצר.
יצירת קישור תפקיד בשביל שהמשתמש יתחזה לחשבון השירות:
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT \ --role roles/iam.workloadIdentityUser \ --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/cloudrun-oidc-pool/subject/USER_EMAILמחליפים את מה שכתוב בשדות הבאים:
SERVICE_ACCOUNTמחליפים בכתובת האימייל של חשבון השירות שנוצר בהגדרת הסביבה של Google Cloud למידע נוסף, ראו gcloud iam service-accounts add-iam-policy-binding.
USER_EMAILמחליפים בכתובת האימייל שלכם.
מתן אפשרות לחשבון השירות לגשת לשירות Cloud Run:
gcloud run services add-iam-policy-binding SERVICE_NAME --member-"serviceAccount:SERVICE_ACCOUNT" \ --role="roles/run.invoker"מחליפים את מה שכתוב בשדות הבאים:
SERVICE_NAMEמחליפים בשם של מיקרו-שירות (microservice) שרץ ב-Cloud Run.
SERVICE_ACCOUNTמחליפים בכתובת האימייל של חשבון השירות בשביל Cloud Run.
למידע נוסף, ראו gcloud running services add-iam-policy-binding.
יצירת אסימון מזהה:
#!/usr/bin/python from google.auth import credentials from google.cloud import iam_credentials_v1 import google.auth import google.oauth2.credentials from google.auth.transport.requests import AuthorizedSession, Request url = "https://WORKLOAD_FQDN" aud = "https://WORKLOAD_FQDN" service_account = 'SERVICE_ACCOUNT' client = iam_credentials_v1.IAMCredentialsClient() name = "projects/-/serviceAccounts/{}".format(service_account) id_token = client.generate_id_token(name=name,audience=aud, include_email=True) print(id_token.token) creds = google.oauth2.credentials.Credentials(id_token.token) authed_session = AuthorizedSession(creds) r = authed_session.get(url) print(r.status_code) print(r.text)מחליפים את מה שכתוב בשדות הבאים:
WORKLOAD_FQDNמחליפים ב-FQDN בשביל עומס העבודה.
SERVICE_ACCOUNTמחליפים בכתובת האימייל של חשבון השירות בשביל Cloud Run.
האסימון שמשתמשים בו יכול לקרוא לממשק ה-API של ניהול זהויות והרשאות גישה (IAM), שיספק את ה-JWT החדש שנחוץ כדי להפעיל את שירות Cloud Run.
אפשר להשתמש באסימון עם צינור עיבוד נתונים של Jenkins כדי להפעיל את הקונטיינר ללא שרת שרץ ב-Cloud Run. אך שלבים אלה לא נכללים במדריך הזה.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Cloud de Confiance בגלל השימוש במשאבים שנעשה במסגרת מדריך זה, אפשר למחוק את הפרויקט.
מחיקת הפרויקט
- In the Cloud de Confiance console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
המאמרים הבאים
- מידע נוסף על איחוד זהויות של עומסי עבודה
- לדוגמאות נוספות של ארכיטקטורות, תרשימים ושיטות מומלצות, עיינו במאמר Cloud Architecture Center.