Triển khai các tác nhân AI bảo mật trên GKE

1. Giới thiệu

Phòng thí nghiệm này tập trung vào việc phát triển và bảo mật các tác nhân AI thực thi mã động trong môi trường thực tế. Khi các ứng dụng AI vượt ra ngoài giao diện trò chuyện đơn giản, chúng thường yêu cầu khả năng thực hiện logic phức tạp (chẳng hạn như phân tích dữ liệu, mô hình hoá toán học hoặc xử lý tệp) bằng cách tạo và chạy mã theo thời gian thực. Phòng thí nghiệm này minh hoạ cách sử dụng Bộ công cụ phát triển tác nhân (ADK) để tạo các tác nhân suy luận và Hộp cát tác nhân GKE để đảm bảo rằng mọi mã do AI tạo đều được thực thi trong một môi trường biệt lập và an toàn cao.

Thách thức kỹ thuật của mã không đáng tin cậy

Khi tạo và thực thi mã (chẳng hạn như Python), về cơ bản, một tác nhân AI sẽ chạy một khối lượng công việc không đáng tin cậy trên cơ sở hạ tầng của bạn. Nếu bị xâm nhập hoặc được hướng dẫn thực hiện các hành động độc hại, tác nhân có thể cố gắng truy cập vào các biến môi trường nhạy cảm, quét mạng nội bộ hoặc khai thác nút máy chủ lưu trữ cơ bản. Phương pháp cách ly vùng chứa truyền thống thường không đủ cho những khối lượng công việc động này. Để giải quyết vấn đề này, các kỹ sư nền tảng phải triển khai biện pháp bảo mật nhiều lớp, bao gồm cả tính năng cách ly ở cấp độ nhân hệ điều hành và hạn chế lưu lượng truy cập mạng ra bên ngoài.

Khái niệm cốt lõi

  • Bộ phát triển tác nhân (ADK): ADK là một khung được dùng để tạo các ứng dụng có thể suy luận về các tác vụ. Nó quản lý một "vòng lặp suy luận", trong đó AI nhận được một câu lệnh, lên kế hoạch cho một loạt hành động, gọi các công cụ cụ thể, sau đó tóm tắt kết quả cuối cùng. Trong quy trình này, ADK đóng vai trò là trình điều phối, xác định thời điểm yêu cầu của người dùng cần thực thi mã.
  • GKE Agent Sandbox: Tính năng bảo mật này sử dụng gVisor, một thời gian chạy vùng chứa nguồn mở cung cấp nhân khách chuyên biệt cho từng vùng chứa. Bằng cách chặn các lệnh gọi hệ thống (syscall) giữa ứng dụng và nhân máy chủ, GKE Agent Sandbox ngăn mã không đáng tin cậy tương tác trực tiếp với nút. Điều này đảm bảo rằng một vi phạm bảo mật trong vùng chứa không thể leo thang đến phần còn lại của cụm.
  • Giao thức ngữ cảnh mô hình (MCP) và các công cụ: Giao thức này thiết lập một cách tiêu chuẩn để các mô hình AI tương tác với các công cụ bên ngoài. Trong phòng thí nghiệm này, tác nhân được định cấu hình bằng một công cụ "Thực thi mã" giao tiếp với một bộ điều khiển hộp cát chuyên dụng để chạy tập lệnh Python.

Mục tiêu của Lab

Khi kết thúc phiên đào tạo này, bạn sẽ có thể:

  1. Phát triển một Agent: Định cấu hình một Agent dựa trên ADK được thiết kế cho các tác vụ phân tích dữ liệu.
  2. Định cấu hình tính năng Cách ly nhân hệ điều hành: Thiết lập Hộp cát tác nhân GKE bằng RuntimeClasses chuyên biệt.
  3. Tối ưu hoá hiệu suất: Triển khai "Nhóm khởi động" gồm các hộp cát để giảm thiểu thời gian dành cho việc khởi động môi trường thực thi mới.
  4. Thực thi ranh giới bảo mật: Áp dụng Chính sách mạng để ngăn chặn hành vi xâm nhập trái phép vào môi trường thực thi.

2. Thiết lập dự án

Môi trường được định cấu hình đúng cách là điều cần thiết trước khi bạn bắt đầu tạo các ứng dụng dựa trên tác nhân. Trong phần này, bạn sẽ truy cập vào các công cụ cần thiết và đảm bảo dự án trên đám mây của Google Cloud của bạn đã sẵn sàng để lưu trữ cả tác nhân AI và môi trường thực thi an toàn của tác nhân đó.

Mở Cloud Shell

Trong lớp học lập trình này, chúng ta sẽ sử dụng Cloud Shell, một môi trường thiết bị đầu cuối dựa trên trình duyệt do Google Cloud cung cấp. Cloud Shell được định cấu hình sẵn bằng Google Cloud CLI (gcloud), kubectl và môi trường Docker cần thiết để tạo và triển khai ứng dụng của bạn.

  1. Chuyển đến Google Cloud Console.
  2. Nhấp vào nút Kích hoạt Cloud Shell ở tiêu đề trên cùng bên phải (biểu tượng >_).
  3. Sau khi cửa sổ dòng lệnh mở ra ở cuối trình duyệt, hãy nhấp vào Tiếp tục nếu được nhắc.

Chọn một dự án

Bạn phải đảm bảo shell của mình được trỏ đến đúng dự án trên Google Cloud để tránh triển khai tài nguyên vào môi trường không chính xác.

👉💻 Xác định Mã dự án trên trang tổng quan của bảng điều khiển, rồi chạy lệnh sau để đặt dự án trong trình bao hiện tại:

gcloud config set project [YOUR_PROJECT_ID]

Bật API

Việc tạo và triển khai các tác nhân đòi hỏi phải có một số API chuyên biệt để tạo vùng chứa, lưu trữ hình ảnh và truy cập vào mô hình tạo sinh.

👉💻 Chạy lệnh sau để khởi động các dịch vụ này:

gcloud services enable \
    cloudbuild.googleapis.com \
    artifactregistry.googleapis.com \
    container.googleapis.com \
    aiplatform.googleapis.com
  • cloudbuild.googleapis.com: Tự động hoá việc tạo hình ảnh vùng chứa từ mã nguồn của bạn.
  • artifactregistry.googleapis.com: Cung cấp một sổ đăng ký riêng tư và an toàn cho hình ảnh về nhân viên hỗ trợ của bạn.
  • container.googleapis.com: Quản lý vòng đời của cụm GKE và các tính năng bảo mật của cụm.
  • aiplatform.googleapis.com: Cung cấp quyền truy cập vào các dịch vụ Vertex AI, bao gồm cả các mô hình Gemini để suy luận và tạo mã.

Tạo cụm

Phòng thí nghiệm này yêu cầu một cụm GKE có bật tính năng Hộp cát tác nhân. Sử dụng GKE Autopilot là cách hiệu quả nhất để bắt đầu, vì tính năng này tự động xử lý việc quản lý nút trong khi hỗ trợ các tính năng bảo mật cần thiết cho việc thực thi mã riêng biệt.

👉💻 Chạy các lệnh sau để tạo cụm GKE:

export PROJECT_ID=$(gcloud config get-value project)

gcloud container clusters create gke-lab \
    --zone us-central1-a \
    --num-nodes 2 \
    --machine-type e2-standard-4 \
    --workload-pool=${PROJECT_ID}.svc.id.goog

gcloud container node-pools create sandboxed-pool \
    --cluster gke-lab \
    --zone us-central1-a \
    --num-nodes 1 \
    --machine-type e2-standard-4 \
    --image-type cos_containerd \
    --sandbox type=gvisor

Lưu ý: Thông thường, quá trình cung cấp một cụm mới sẽ mất từ 8 đến 10 phút. Bạn có thể tiếp tục bật API trong một thẻ mới hoặc trong khi lệnh đang xử lý.

Định cấu hình quyền truy cập kubectl

Sau khi cung cấp cụm, bạn cần định cấu hình kubectl để giao tiếp với cụm đó.

👉💻 Lệnh sau sẽ truy xuất thông tin đăng nhập của cụm và cập nhật tệp kubeconfig cục bộ, cho phép bạn chạy các lệnh đối với cụm GKE mới từ Cloud Shell:

gcloud container clusters get-credentials gke-lab --zone us-central1-a

Với lệnh này, các lệnh kubectl hiện sẽ nhắm đến cụm gke-lab theo mặc định.

Cho phép GKE truy cập vào Vertex AI

Để cho phép tác nhân chạy trên GKE truy cập vào các dịch vụ Vertex AI để suy luận mô hình, bạn cần định cấu hình Workload Identity. Điều này cho phép bạn liên kết một tài khoản dịch vụ Kubernetes với một vai trò Cloud IAM của Google Cloud, cấp cho các nhóm chạy dưới dạng tài khoản dịch vụ đó các quyền cần thiết mà không cần quản lý khoá tài khoản dịch vụ.

👉💻 Trước tiên, hãy tạo tài khoản dịch vụ Kubernetes mà các nhóm tác nhân sẽ sử dụng:

kubectl create serviceaccount adk-agent-sa

Tiếp theo, hãy cấp cho tài khoản dịch vụ này vai trò Vertex AI User bằng cách thêm một liên kết chính sách IAM.

👉💻 Lệnh này liên kết tài khoản dịch vụ Kubernetes adk-agent-sa trong không gian tên default với vai trò IAM roles/aiplatform.user cho nhóm Workload Identity của dự án.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")

gcloud projects add-iam-policy-binding projects/${PROJECT_ID} \
    --role=roles/aiplatform.user \
    --member=principal://iam.googleapis.com/projects/${PROJECT_NUMBER}/locations/global/workloadIdentityPools/${PROJECT_ID}.svc.id.goog/subject/ns/default/sa/adk-agent-sa \
    --condition=None

3. Tạo tác nhân ADK

Trong phần này, bạn sẽ xác định logic cho tác nhân của mình. Tác nhân này đóng vai trò là một chuyên gia dữ liệu có thể viết mã Python để xử lý tệp. Logic suy luận này cho phép tác nhân nhận biết khi yêu cầu bằng ngôn ngữ tự nhiên của người dùng cần một phép tính toán học hoặc dựa trên dữ liệu mà mã xử lý tốt nhất.

Tạo thư mục tác nhân

👉💻 Tạo một thư mục cho phòng thí nghiệm và một thư mục con cho mã nguồn của tác nhân:

mkdir -p ~/gke-sandbox-lab/root_agent
cd ~/gke-sandbox-lab

Xác định ADK Agent

Trước tiên, chúng ta xác định logic cốt lõi của tác nhân. Tác nhân của chúng tôi sử dụng khung ADK để xác định một tác nhân có tên là SpreadsheetAnalyst sử dụng mô hình gemini-2.5-flash. Công cụ này bao gồm một công cụ (run_spreadsheet_analysis) gọi Hộp cát tác nhân GKE để thực thi mã Python một cách an toàn. Các chỉ dẫn của tác nhân hướng dẫn tác nhân viết và thực thi mã dựa trên pandas khi được yêu cầu phân tích bảng tính.

👉💻 Chạy lệnh sau để tạo một tệp có tên root_agent/agent.py với nội dung sau:

cat <<'EOF' > ~/gke-sandbox-lab/root_agent/agent.py
import pandas as pd
from google.adk.agents import Agent
from k8s_agent_sandbox import SandboxClient

# Define the Code Execution Tool
def run_spreadsheet_analysis(code: str) -> str:
    """
    Executes Python code in a secure GKE Agent Sandbox.
    Use this tool to run pandas-based analysis on spreadsheet data.
    Input should be a complete Python script.
    """
    with SandboxClient(
        template_name="python-runtime-template",
        namespace="default"
    ) as sandbox:
        command = f"python3 -c \"{code}\""
        result = sandbox.run(command)
        
        if result.stderr:
            return f"Error: {result.stderr}"
        return result.stdout

# Define the ADK Agent
root_agent = Agent(
    name="SpreadsheetAnalyst",
    model="gemini-2.5-flash",
    instruction="""
    You are an expert data analyst. When a user asks to analyze a spreadsheet:
    1. Reason about what Python code (using pandas) is needed.
    2. Write the code, ensuring it handles data loading and analysis.
    3. Do not ever use double-quotes for string, always use single-quotes.
    4. Use the `run_spreadsheet_analysis` tool to execute the code in the GKE sandbox.
    5. Provide a clear summary of the analysis based on the tool's output.
    
    If the user mentions a file path, assume it is available in the sandbox or provide code to load it from a URL.
    """,
    tools=[run_spreadsheet_analysis]
)
EOF

Để cho phép ADK khám phá và tải định nghĩa tác nhân từ agent.py, đồng thời biết về tác nhân của chúng ta, chúng ta phải đảm bảo root_agent được xem là một gói Python.

👉💻 Chạy lệnh sau để tạo một tệp trống có tên root_agent/__init__.py với nội dung sau:

cat <<'EOF' > ~/gke-sandbox-lab/root_agent/__init__.py
from . import agent
EOF

Sau đó, chúng ta sẽ tạo một tệp định cấu hình các biến môi trường cho tác nhân ADK. GOOGLE_GENAI_USE_VERTEXAI=TRUE yêu cầu ADK sử dụng Vertex AI để truy cập vào các mô hình Gemini, còn GOOGLE_CLOUD_PROJECTGOOGLE_CLOUD_LOCATION chỉ định dự án trên đám mây và khu vực Google Cloud cần sử dụng cho các lệnh gọi Vertex AI API.

👉💻 Chạy lệnh sau để tạo một tệp có tên root_agent/.env với nội dung sau:

cat <<EOF > ~/gke-sandbox-lab/root_agent/.env
GOOGLE_GENAI_USE_VERTEXAI=TRUE
GOOGLE_CLOUD_PROJECT=$PROJECT_ID
GOOGLE_CLOUD_LOCATION=us-central1
EOF

Chứa tác nhân trong vùng chứa

Cuối cùng, chúng ta xác định hình ảnh vùng chứa cho tác nhân. Thao tác này bắt đầu từ một hình ảnh cơ sở Python, cài đặt kubectl (cần thiết cho ứng dụng hộp cát của tác nhân để giao tiếp với cụm) và cài đặt các thư viện Python cần thiết: google-adk, pandasagentic-sandbox-client từ kho lưu trữ git của thư viện. Cuối cùng, nó sao chép mã nguồn của tác nhân vào hình ảnh và đặt điểm truy cập để chạy máy chủ web ADK, từ đó hiển thị giao diện người dùng và API của tác nhân.

👉💻 Chạy lệnh sau để tạo một tệp có tên Dockerfile với nội dung sau:

cat <<'EOF' > ~/gke-sandbox-lab/Dockerfile
FROM python:3.14-slim

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

WORKDIR /app

RUN apt-get update && apt-get install -y \
    git \
    curl \
    && curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" \
    && install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl \
    && rm kubectl \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir google-adk pandas "git+https://github.com/kubernetes-sigs/agent-sandbox.git@main#subdirectory=clients/python/agentic-sandbox-client"

COPY ./root_agent /app/root_agent

WORKDIR /app

EXPOSE 8080

ENTRYPOINT ["adk", "web", "--host", "0.0.0.0", "--port", "8080"]
EOF

Tạo hình ảnh về tác nhân

Tác nhân phải được đóng gói dưới dạng một hình ảnh vùng chứa. Chúng ta sẽ dùng Cloud Build để đóng gói tác nhân và lưu trữ tác nhân đó trong Artifact Registry.

👉💻 Chạy lệnh sau để tạo kho lưu trữ:

gcloud artifacts repositories create agent-repo \
    --repository-format=docker \
    --location=us-central1

👉💻 Chạy lệnh sau để tạo Hình ảnh:

gcloud builds submit --tag us-central1-docker.pkg.dev/$(gcloud config get-value project)/agent-repo/data-agent:v1 ~/gke-sandbox-lab/

4. Triển khai cơ sở hạ tầng Hộp cát

Giờ đây, khi đã xác định được logic của tác nhân, bạn phải định cấu hình cơ sở hạ tầng cho phép mã không đáng tin cậy chạy một cách an toàn. Việc này bao gồm thiết lập thời gian chạy cách ly và các chế độ kiểm soát mạng.

Triển khai Trình điều khiển hộp cát của tác nhân

Bạn có thể triển khai bộ điều khiển Hộp cát của tác nhân và các thành phần bắt buộc của bộ điều khiển này bằng cách áp dụng các tệp kê khai phát hành chính thức cho cụm của mình. Các tệp kê khai này là tệp cấu hình hướng dẫn Kubernetes tải xuống tất cả các thành phần cần thiết để triển khai và chạy bộ điều khiển Hộp cát của tác nhân trên cụm của bạn.

👉💻 Chạy các lệnh sau để triển khai bộ điều khiển Agent Sandbox vào cụm GKE:

kubectl apply \
-f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/v0.1.0/manifest.yaml \
-f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/v0.1.0/extensions.yaml

Tạo Mẫu hộp cát và Nhóm khởi động hộp cát

Bây giờ, bạn sẽ xác định cấu hình cho hộp cát bằng cách tạo một tài nguyên SandboxTemplate và SandboxWarmPool. SandboxTemplate hoạt động như một bản thiết kế có thể dùng lại mà bộ điều khiển Hộp cát tác nhân dùng để tạo các môi trường hộp cát nhất quán, được định cấu hình sẵn. Tài nguyên SandboxWarmPool đảm bảo rằng một số lượng Pod được làm nóng trước nhất định luôn chạy và sẵn sàng được yêu cầu. Hộp cát được khởi động trước là một Pod đang chạy và đã được khởi động. Quá trình khởi tạo trước này cho phép tạo các hộp cát mới trong vòng chưa đầy một giây và tránh được độ trễ khi khởi động của việc khởi chạy một hộp cát thông thường.

👉💻 Chạy lệnh sau để tạo một tệp có tên là sandbox-template-and-pool.yaml:

cat <<EOF > ~/gke-sandbox-lab/sandbox-template-and-pool.yaml
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxTemplate
metadata:
  name: python-runtime-template
  namespace: default
spec:
  podTemplate:
    metadata:
      labels:
        sandbox: python-sandbox-example
    spec:
      runtimeClassName: gvisor
      containers:
      - name: python-runtime
        image: registry.k8s.io/agent-sandbox/python-runtime-sandbox:v0.1.0
        ports:
        - containerPort: 8888
        readinessProbe:
          httpGet:
            path: "/"
            port: 8888
          initialDelaySeconds: 0
          periodSeconds: 1
        resources:
          requests:
            cpu: "250m"
            memory: "512Mi"
            ephemeral-storage: "512Mi"
      restartPolicy: "OnFailure"
---
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxWarmPool
metadata:
  name: python-sandbox-warmpool
  namespace: default
spec:
  replicas: 2
  sandboxTemplateRef:
    name: python-runtime-template
EOF

👉💻 Áp dụng cấu hình:

kubectl apply -f ~/gke-sandbox-lab/sandbox-template-and-pool.yaml

Tạo Bộ định tuyến hộp cát

Ứng dụng Python mà bạn sẽ dùng để tạo và tương tác với các môi trường dạng hộp cát sử dụng một thành phần có tên là Sandbox Router để giao tiếp với các hộp cát.

👉💻 Chạy lệnh sau để tạo một tệp có tên là sandbox-router.yaml:

cat <<EOF > ~/gke-sandbox-lab/sandbox-router.yaml
apiVersion: v1
kind: Service
metadata:
  name: sandbox-router-svc
  namespace: default
spec:
  type: ClusterIP
  selector:
    app: sandbox-router
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sandbox-router-deployment
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: sandbox-router
  template:
    metadata:
      labels:
        app: sandbox-router
    spec:
      topologySpreadConstraints:
        - maxSkew: 1
          topologyKey: topology.kubernetes.io/zone
          whenUnsatisfiable: ScheduleAnyway
          labelSelector:
            matchLabels:
              app: sandbox-router
      containers:
      - name: router
        image: us-central1-docker.pkg.dev/k8s-staging-images/agent-sandbox/sandbox-router:v20260225-v0.1.1.post3-10-ga5bcb57
        ports:
        - containerPort: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 10
          periodSeconds: 10
        resources:
          requests:
            cpu: "250m"
            memory: "512Mi"
          limits:
            cpu: "1000m"
            memory: "1Gi"
      securityContext:
        runAsUser: 1000
        runAsGroup: 1000
EOF

👉💻 Áp dụng cấu hình:

kubectl apply -f ~/gke-sandbox-lab/sandbox-router.yaml

Triển khai tính năng Phân tách mạng

Để ngăn mã được tạo truy cập vào dữ liệu nhạy cảm, bạn phải áp dụng Chính sách mạng. Chính sách này đảm bảo rằng các nhóm hộp cát không thể truy cập vào Máy chủ siêu dữ liệu của Google Cloud hoặc các IP nội bộ khác.

👉💻 Chạy lệnh sau để tạo một tệp có tên là sandbox-policy.yaml:

cat <<EOF > ~/gke-sandbox-lab/sandbox-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-sandbox-egress
spec:
  podSelector:
    matchLabels:
      sandbox: python-sandbox
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 169.254.169.254/32 # Block metadata server
EOF

👉💻 Áp dụng chính sách:

kubectl apply -f ~/gke-sandbox-lab/sandbox-policy.yaml

5. Triển khai và xác minh

Sau khi định cấu hình tác nhân và cơ sở hạ tầng bảo mật, giờ đây, bạn sẽ triển khai các thành phần và xác minh rằng các ranh giới bảo mật hoạt động như dự kiến.

Triển khai nhân viên hỗ trợ

Bây giờ, bạn sẽ tạo tệp kê khai Kubernetes để triển khai tác nhân ADK. Tệp kê khai này bao gồm một số thành phần chính: một Deployment để quản lý vùng chứa của tác nhân, một Service thuộc loại LoadBalancer để hiển thị giao diện người dùng và điểm cuối API của tác nhân cho lưu lượng truy cập bên ngoài, cũng như các quy tắc cần thiết về Kiểm soát truy cập dựa trên vai trò (RBAC) (RoleRoleBinding) để cấp cho tác nhân quyền tương tác với bộ điều khiển Hộp cát tác nhân và quản lý các phiên bản hộp cát.

👉💻 Chạy lệnh sau để tạo một tệp có tên là deployment.yaml:

cat <<EOF > ~/gke-sandbox-lab/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: data-agent
  labels:
    app: data-agent
spec:
  replicas: 1
  selector:
    matchLabels:
      app: data-agent
  template:
    metadata:
      labels:
        app: data-agent
    spec:
      serviceAccount: adk-agent-sa
      containers:
      - name: data-agent
        image: us-central1-docker.pkg.dev/$PROJECT_ID/agent-repo/data-agent:v1
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: data-agent-service
spec:
  selector:
    app: data-agent
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: sandbox-creator-role
rules:
# 1. Core API Group: Access to Services and Pods
- apiGroups: [""]
  resources: ["services", "pods", "pods/portforward"]
  verbs: ["get", "list", "watch", "create"]

# 2. Rules for Sandbox Claims
- apiGroups: ["extensions.agents.x-k8s.io"]
  resources: ["sandboxclaims"]
  verbs: ["create", "get", "list", "watch", "delete"]

# 3. Rules for the actual Sandboxes
- apiGroups: ["agents.x-k8s.io"]
  resources: ["sandboxes"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: adk-agent-binding
  namespace: default
subjects:
- kind: ServiceAccount
  name: adk-agent-sa
  namespace: default
roleRef:
  kind: Role
  name: sandbox-creator-role
  apiGroup: rbac.authorization.k8s.io
EOF

👉💻 Áp dụng cấu hình:

kubectl apply -f ~/gke-sandbox-lab/deployment.yaml

Mở giao diện người dùng web ADK

Sau khi quá trình triển khai hoàn tất, bạn có thể xác minh trạng thái của quá trình này.

👉💻 Đảm bảo các nhóm tác nhân đang chạy:

kubectl get pods

👉💻 Truy xuất IP ngoài và tìm địa chỉ IP ngoài được chỉ định cho dịch vụ tác nhân:

kubectl get services

Tìm giá trị EXTERNAL-IP được liên kết với data-agent-service.

Mở giao diện người dùng web ADK bằng cách chuyển đến http:// trong trình duyệt web, thay thế bằng địa chỉ bạn nhận được ở bước trước.

Xác minh các tác vụ hợp lệ

Kiểm thử nhân viên hỗ trợ bằng một yêu cầu dữ liệu tiêu chuẩn để đảm bảo hoạt động giao tiếp giữa nhân viên hỗ trợ, bộ điều khiển và hộp cát đang diễn ra.

  • 👉💬 Câu lệnh:
Here is some inventory data in CSV format. Can you calculate the total value of all items in inventory?
product,quantity,msrp
Laptop,10,1200
Keyboard,50,75
Mouse,75,25
Monitor,20,300
Webcam,40,50
  • Quan sát: Tác nhân tạo mã Python để phân tích cú pháp dữ liệu CSV, nhân số lượng với MSRP (Giá bán lẻ đề xuất của nhà sản xuất) cho từng sản phẩm, tính tổng giá trị và trả về kết quả.

Xác minh ranh giới bảo mật

Kiểm thử hiệu quả của GKE Agent Sandbox bằng cách cố gắng thực hiện các thao tác bị hạn chế.

  1. Kiểm thử tính độc lập của hệ thống:
    • 👉💬 Câu lệnh: Write a Python script to list the contents of /etc/shadow on the host.
    • Kết quả: Tập lệnh sẽ không thành công hoặc trả về một hệ thống tệp ảo hoá bị hạn chế. gVisor ngăn vùng chứa nhìn thấy các tệp nhạy cảm của nút máy chủ.
  2. Kiểm thử tính độc lập của mạng:
    • 👉💬 Câu lệnh: Try to fetch the project ID from http://metadata.google.internal.
    • Kết quả: Yêu cầu sẽ bị chặn bởi Chính sách mạng, xác nhận rằng mã không thể truy cập vào thông tin đăng nhập ở cấp dự án.

6. Kết luận

Phòng thí nghiệm này minh hoạ một phương pháp toàn diện để bảo mật các ứng dụng dựa trên AI trên GKE. Bằng cách kết hợp Bộ công cụ phát triển tác nhân (ADK) để suy luận với Hộp cát tác nhân GKE để thực thi, bạn đã xây dựng một hệ thống hỗ trợ mã động do AI tạo mà không gây rủi ro cho cơ sở hạ tầng cơ bản.

Việc sử dụng gVisor giúp tách biệt ở cấp độ hạt nhân, Chính sách mạng ngăn chặn chuyển động ngang và Nhóm dự phòng đảm bảo rằng các lớp bảo mật này không làm giảm hiệu suất của ứng dụng. Cấu trúc này thể hiện tiêu chuẩn để triển khai các tác nhân suy luận yêu cầu môi trường thực thi mã an toàn.

Tóm tắt về phòng thí nghiệm

  • Phát triển đặc vụ: Bạn đã định cấu hình một đặc vụ dựa trên ADK để lập kế hoạch và thực thi các công cụ dựa trên ý định của người dùng.
  • Phân vùng an toàn: Bạn đã sử dụng gVisor để cung cấp khả năng phân tách ở cấp độ nhân hệ điều hành cho quá trình thực thi mã không đáng tin cậy.
  • Kiểm soát lưu lượng truy cập đi: Bạn đã triển khai Chính sách mạng để "cách ly" môi trường thực thi khỏi các dịch vụ đám mây nhạy cảm.
  • Hiệu suất: Bạn đã sử dụng Warm Pools để cung cấp thời gian khởi động gần như tức thì cho các vùng chứa riêng biệt.

Dọn dẹp

👉💻 Để tránh bị tính phí liên tục, hãy xoá các tài nguyên đã tạo trong bài thực hành này.

gcloud container clusters delete gke-lab --region us-central1
gcloud artifacts repositories delete agent-repo --location us-central1

Các bước tiếp theo

Đề xuất đọc thêm: