אבטחת אפליקציות ומשאבים ב-GKE באמצעות IAP

בדף הזה מוסבר איך לאבטח מכונה של Google Kubernetes Engine ‏ (GKE) באמצעות שרת proxy לאימות זהויות (IAP).

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

סקירה כללית

רכישות מתוך האפליקציה משולבות דרך Ingress ב-GKE. השילוב הזה מאפשר לכם לשלוט בגישה ברמת המשאב לעובדים במקום להשתמש ב-VPN.

באשכול GKE, תעבורה נכנסת מטופלת על ידי איזון עומסים ב-HTTP(S), רכיב של Cloud Load Balancing. בדרך כלל, מאזן העומסים של HTTP(S) מוגדר על ידי בקר Kubernetes Ingress. בקר Ingress מקבל מידע על התצורה מאובייקט Ingress של Kubernetes שמשויך לאובייקט Service אחד או יותר. כל אובייקט Service מכיל נתוני ניתוב שמשמשים להפניית בקשה נכנסת ל-Pod ולפורט מסוימים.

החל מגרסה 1.10.5-gke.3 של Kubernetes, אפשר להוסיף הגדרה למאזן העומסים על ידי שיוך של Service לאובייקט BackendConfig. ‫BackendConfig הוא הגדרת משאב בהתאמה אישית (CRD) שמוגדרת במאגר kubernetes/ingress-gce.

בקר ה-Ingress של Kubernetes קורא את פרטי ההגדרה מ-BackendConfig ומגדיר את מאזן העומסים בהתאם. קובץ BackendConfig מכיל פרטי הגדרה שספציפיים ל-Cloud Load Balancing, ומאפשר לכם להגדיר הגדרה נפרדת לכל שירות עורפי של איזון עומסים מסוג HTTP(S).

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

כדי להפעיל את IAP ב-GKE, צריך:

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

מערכת IAP משתמשת בלקוח OAuth שמנוהל על ידי Google כדי לאמת את המשתמשים. רק משתמשים בארגון יכולים לגשת לאפליקציה עם רכישות מתוך האפליקציה. אם רוצים לאפשר גישה למשתמשים מחוץ לארגון, אפשר לעיין במאמר בנושא הפעלת IAP לאפליקציות חיצוניות.

הפעלת IAP

如果您尚未配置项目的 OAuth 同意屏幕,系统将提示您执行此操作。如需配置 OAuth 同意屏幕,请参阅设置 OAuth 同意屏幕

如果您运行的是 GKE 1.24 版或更高版本的集群,则可以使用 Kubernetes Gateway API 配置 IAP 和 GKE。为此,请完成以下步骤,然后按照配置 IAP 中的说明操作。 请勿配置 BackendConfig

设置 IAP 访问权限

  1. 转到 Identity-Aware Proxy 页面
    转到 Identity-Aware Proxy 页面
  2. 选择要使用 IAP 保护的项目。
  3. 选中您要授予访问权限的资源旁边的复选框。

    如果您未看到资源,请确保已创建该资源,并且 BackendConfig Compute Engine 入口控制器已同步。

    如需验证后端服务是否可用,请运行以下 gcloud 命令:

    gcloud compute backend-services list
  4. 在右侧面板上,点击添加主账号
  5. 在显示的添加主账号对话框中,输入群组或个人(应拥有项目的 IAP-secured Web App User 角色)的电子邮件地址。

    以下种类的主账号可以具有此角色:

    • Google 账号:user@gmail.com
    • Google 网站论坛:admins@googlegroups.com
    • 服务账号:server@example.
    • Google Workspace 网域:example.com

    请务必添加您有权访问的 Google 账号。

  6. 角色下拉列表中选择 Cloud IAP > 受 IAP 保护的网页应用用户
  7. 点击保存

配置 BackendConfig

您可以通过添加 iap 块来为 IAP 配置 BackendConfig。

iap 块添加到 BackendConfig

如需为 IAP 配置 BackendConfig,您需要指定 enabled 值。确保您具有 compute.backendServices.update 权限,并将 iap 块添加到 BackendConfig。

对于 GKE 1.16.8-gke.3 及更高版本,请使用 cloud.google.com/v1 API 版本。 如果您使用的是早期版本的 GKE,请使用 cloud.google.com/v1beta1

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: CONFIG_DEFAULT
  namespace: my-namespace
spec:
  iap:
    enabled: true

将服务端口与 BackendConfig 相关联

您还需要将 Service 端口与 BackendConfig 关联以触发启用 IAP。实现此操作的一种方法是将服务的所有端口默认为 BackendConfig,您可以通过向 Service 资源添加以下注释来实现此目的。

metadata:
  annotations:
    beta.cloud.google.com/backend-config: '{"default": "CONFIG_DEFAULT"}'

验证 BackendConfig

如需测试配置,请运行 kubectl get event。如果看到消息“no BackendConfig for service port exists”,则说明您已成功将服务端口与 BackendConfig 关联,但是未找到 BackendConfig 资源。如果您没有创建 BackendConfig 资源,或在错误的命名空间中创建了该资源,或在 Service 注释中拼错了引用,则会出现此错误。

关闭 IAP

要关闭 IAP,您必须在 BackendConfig 中将 enabled 设置为 false。如果您从 BackendConfig 中删除 IAP 块,则设置将保持不变。例如,如果 IAP 处于启用状态,而您删除了该块,则 IAP 仍处于启用状态。

השלבים הבאים