保护 AI 应用的基础设施

1. 简介

概览

在本实验中,您将缓解 AI 开发环境基础设施面临的常见威胁。您实施旨在保护此环境核心组件的安全控制措施。

上下文

您是开发团队中的安全倡导者,您的目标是构建一个在最大限度减少使用摩擦的同时,还能防范常见威胁的环境。

下表列出了您最关心缓解的威胁。本实验中的每个任务都旨在应对特定的威胁:

威胁

应对措施

任务涵盖范围

通过被利用的开放端口未经授权地进入网络。

创建专用 VPC,并将 Vertex AI 访问权限限制为通过 Google Cloud 代理的单个用户,而不是公共 IP 地址。

配置安全网络基础

利用过度授权的凭据从遭入侵的计算实例中提升权限。

为 Vertex AI 实例创建并分配最低权限服务账号。

部署安全的 Vertex AI Workbench 实例

接管计算资源实例,导致系统篡改。

通过停用 root 访问权限并启用安全启动来强化实例。

部署安全的 Vertex AI Workbench 实例

因存储配置错误而导致训练数据和模型意外公开。

对存储分区强制执行禁止公开访问设置,并使用统一的存储分区级访问权限控制。

部署安全的 Cloud Storage 存储分区

恶意或意外删除或篡改数据集和模型制品。

启用对象版本控制功能以进行恢复,并启用数据访问日志以获得所有活动的不可变审核轨迹。

部署安全的 Cloud Storage 存储分区

快速参考

在本实验中,您将一直使用以下命名资源:

组件

名称

VPC 名称

genai-secure-vpc

子网名称

genai-subnet-us-central1

Cloud Router

genai-router-us-central1

Cloud NAT

genai-nat-us-central1

服务账号

vertex-workbench-sa

Vertex AI 实例

secure-genai-instance

存储分区

secure-genai-artifacts-[PROJECT_ID]

学习内容

在本实验中,您将学习如何完成以下操作:

  • 预配具有专用网络的安全 VPC,以缓解未经请求的流量。
  • 强化 Vertex AI Workbench 实例,以防范启动套件和权限升级。
  • 保护 Cloud Storage 存储分区,以防范未经监控的数据传输和意外的公开泄露。

2. 项目设置

Google 账号

如果您还没有个人 Google 账号,则必须先创建一个 Google 账号

请使用个人账号,而不是工作账号或学校账号。

登录 Google Cloud 控制台

使用个人 Google 账号登录 Google Cloud 控制台

启用结算功能

兑换 5 美元的 Google Cloud 赠金(可选)

如需参加此研讨会,您需要拥有一个有一定信用额度的结算账号。如果您打算使用自己的结算方式,则可以跳过此步骤。

  1. 点击此链接,然后使用个人 Google 账号登录。您会看到类似如下的内容:点击此处前往“赠金”页面
  2. 点击点击此处访问您的积分按钮。然后,您会进入一个页面,可在其中设置结算资料 “设置结算资料”页面
  3. 点击确认

您现在已关联到 Google Cloud Platform 试用结算账号。

结算概览的屏幕截图

设置个人结算账号

如果您使用 Google Cloud 抵用金设置了结算,则可以跳过此步骤。

如需设置个人结算账号,请点击此处在 Cloud 控制台中启用结算功能

注意事项:

  • 完成本实验的 Cloud 资源费用应不到 1 美元。
  • 您可以按照本实验结束时的步骤删除资源,以避免产生更多费用。
  • 新用户符合参与 300 美元免费试用计划的条件。

创建项目(可选)

如果您没有当前项目可用于此实验,请在此处创建一个新项目

3. 启用 API

配置 Cloud Shell

成功创建项目后,请按以下步骤设置 Cloud Shell

启动 Cloud Shell

前往 shell.cloud.google.com,如果看到要求您授权的弹出式窗口,请点击授权

设置项目 ID

在 Cloud Shell 终端中执行以下命令,以设置正确的项目 ID。将 <your-project-id> 替换为从上述项目创建步骤中复制的实际项目 ID。

gcloud config set project <your-project-id>

现在,您应该会在 Cloud Shell 终端中看到已选择正确的项目。

启用 Vertex AI Workbench 和 Cloud Storage

如需使用本实验中的服务,您需要在 Google Cloud 项目中为 Compute Engine、Vertex AI Workbench、IAM 和 Cloud Storage 启用 API。

  1. 在终端中,启用以下 API:
gcloud services enable compute.googleapis.com notebooks.googleapis.com aiplatform.googleapis.com iam.googleapis.com storage.googleapis.com

或者,您也可以在控制台中前往这些 API 的相应页面,然后点击启用来启用它们。

4. 配置安全网络基础

在此任务中,您将为所有服务创建一个隔离的网络环境。通过使用专用网络和控制数据流,您可以构建多层防御机制,与可公开访问的资源相比,这可显著减小基础设施的攻击面。这种安全网络基础对于保护 AI 应用免遭未经授权的访问至关重要。

创建 VPC 和子网

在此步骤中,您将设置 Virtual Private Cloud (VPC) 和子网。这样一来,便创建了一个隔离的网络环境,这是抵御未经授权的网络入站流量的第一道防线。

  1. 在 Google Cloud 控制台中,前往 VPC 网络 > VPC 网络。使用 Google Cloud 控制台顶部的搜索栏搜索“VPC 网络”,然后选择该选项。
  2. 点击创建 VPC 网络
  3. 对于名称,输入 genai-secure-vpc
  4. 对于子网创建模式,选择自定义
  5. 新子网下,指定以下属性以创建子网:

    属性

    值(输入或选择)

    名称

    genai-subnet-us-central1

    区域

    us-central1

    IP 地址范围

    10.0.1.0/24

    专用 Google 访问通道

    开启

  6. 点击创建

创建 Cloud NAT 网关

Cloud NAT 网关允许您的私有实例在没有公共 IP 地址的情况下发起出站连接(例如,用于软件更新),这意味着公共互联网无法这些实例发起连接。

  1. 首先,创建 Cloud Router 路由器。使用 Google Cloud 控制台顶部的搜索栏搜索“Cloud Router”,然后选择该服务。
  2. 点击创建路由器
  3. 使用以下内容配置 Cloud Router:

    属性

    值(输入或选择)

    名称

    genai-router-us-central1

    网络

    genai-secure-vpc(您刚刚创建的 VPC 网络)

    区域

    us-central1

  4. 点击创建
  5. 接下来,前往网络服务 > Cloud NAT。使用 Google Cloud 控制台顶部的搜索栏搜索“Cloud NAT”,然后选择该服务。
  6. 点击开始使用
  7. 配置 Cloud NAT 网关,并添加以下内容:

    属性

    值(输入或选择)

    网关名称

    genai-nat-us-central1

    VPC 网络

    genai-secure-vpc(您创建的 VPC 网络)

    区域

    us-central1

    Cloud Router

    genai-router-us-central1(您刚刚设置的路由器)

  8. 点击创建

5. 部署安全的 Vertex AI Workbench 实例

现在,您已拥有安全网络基础,接下来将在安全的 VPC 中部署强化型 Vertex AI Workbench 实例。此 Workbench 实例将作为您的开发环境,为您的 AI 开发工作提供安全且隔离的空间。之前的网络配置可确保此实例不会直接暴露给公共互联网,从而构建多层防御。

创建最低权限的服务账号

创建具有必要的最少权限的专用服务账号有助于遵循最小权限原则。如果您的实例遭到入侵,此实践可确保实例只能访问其功能明确需要的资源并执行相应操作,从而限制“影响范围”。

  1. 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。使用 Google Cloud 控制台顶部的搜索栏搜索“服务账号”,然后选择该选项。
  2. 点击创建服务账号
  3. 对于服务账号名称,请输入 vertex-workbench-sa
  4. 点击创建并继续
  5. 授予以下角色:
    • Vertex AI User
    • Storage Object Creator
  6. 点击完成

创建 Workbench 实例

在此步骤中,您将部署 Vertex AI Workbench 实例。此实例已配置为在您之前创建的专用 VPC 中运行,从而进一步将其与公共互联网隔离开。您还可以直接对实例应用额外的安全强化措施。

  1. 在 Google Cloud 控制台导航菜单(汉堡菜单)中,依次前往 Vertex AI > Workbench。使用 Google Cloud 控制台顶部的搜索栏搜索“Workbench”,然后选择以“Vertex AI”作为副标题的结果。
  2. 点击新建,然后配置:

    属性

    值(输入或选择)

    名称

    secure-genai-instance

    区域

    us-central1

  3. 点击高级选项
  4. 点击机器类型,然后选中以下复选框:
    • 安全启动
    • 虚拟可信平台模块 (vTPM)
    • 完整性监控
  5. 点击网络,然后配置以下内容:

    属性

    值(输入或选择)

    网络

    genai-secure-vpc

    子网

    genai-subnet-us-central1 (10.0.1.0/24)

    分配外部 IP 地址

    取消选择,因为您仅通过 Google Cloud 中的代理访问此实例。

  6. 点击 IAM 和安全,然后配置以下内容:

    属性

    值(输入或选择)

    用户电子邮件地址

    单个用户,然后选择您目前用于登录 Google Cloud 的电子邮件地址。

    使用默认 Compute Engine 服务账号

    取消选中相应复选框。

    服务账号电子邮件地址

    输入为最低权限服务账号创建的电子邮件地址(将 [PROJECT_ID] 替换为您的实际 ID):vertex-workbench-sa@[PROJECT_ID].iam.gserviceaccount.com

    对实例的根访问权限

    取消选中相应复选框。

  7. 点击创建

访问 Vertex AI 实例

现在,您的 Vertex AI Workbench 实例已处于临时状态,您可以安全地访问它。您可以通过 Google Cloud 的代理连接到该实例,从而确保该实例保持私密状态,不会暴露给公共互联网,进而降低未经请求的潜在恶意流量的风险。

  1. 前往 Vertex AI > Workbench。如果您的实例刚刚完成配置,您可能已经位于此页面上。如果不是,您可以使用 Google Cloud 控制台导航菜单(汉堡菜单)或搜索栏前往该页面。
  2. 在列表中找到名为 secure-genai-instance 的实例。
  3. 在实例右侧,点击打开 JupyterLab 链接。

系统随即会在浏览器中打开一个新标签页,让您能够访问实例。您可以通过 Google Cloud 访问该实例,但该实例不会暴露给公共互联网,从而降低了接收到未经请求的潜在恶意流量的风险。

6. 部署安全的 Cloud Storage 存储分区

现在,您需要为数据集创建一个安全的 Cloud Storage 存储分区。这是 AI 训练数据、模型和制品存储的位置。通过为此存储分区应用强大的安全配置,您可以防止敏感数据意外公开,并防范恶意或意外删除和篡改。这样可确保您宝贵的 AI 资产的完整性和保密性。

创建和配置存储分区

在此步骤中,您将创建 Cloud Storage 存储分区并应用初始安全设置。这些设置会强制禁止公开访问,并启用统一的存储分区级访问权限控制,这对于控制谁可以访问您的数据至关重要。

  1. 在 Google Cloud 控制台中,依次前往 Cloud Storage > 存储分区。使用 Google Cloud 控制台顶部的搜索栏搜索“存储分区”,然后选择该选项。
  2. 点击创建
  3. 开始使用中,将名称设置为 secure-genai-artifacts-[PROJECT_ID],并将 [PROJECT_ID] 替换为您的实际 Google Cloud 项目 ID。
  4. 继续选择数据存储位置,然后配置以下内容:

    属性

    值(输入或选择)

    位置类型

    区域

    区域

    us-central1

  5. 继续前往选择数据存储方式,并保留默认设置。
  6. 继续执行选择如何控制对对象的访问权限,并保留默认设置:

    属性

    值(输入或选择)

    原因

    阻止公开访问

    保持选中强制执行禁止公开访问设置

    禁止公开访问会替换可能导致对象意外暴露给互联网的任何 IAM 更改。

    访问权限控制

    保持统一处于选中状态。

    虽然 ACL 似乎是实现精细控制(即最小权限)的更佳选择,但与其他 IAM 功能结合使用时,它们会带来复杂性和不可预测性。考虑统一存储分区级访问权限在防止意外数据泄露方面的权衡取舍和优势。

  7. 继续前往选择如何保护对象数据,并保留默认设置:

    属性

    值(输入或选择)

    原因

    软删除政策(用于数据恢复)

    保持选中软删除政策(用于数据恢复)

    如果存储分区中发生意外删除或恶意删除,软删除功能可让您在保留期限内恢复内容。

    对象版本控制(用于版本控制)

    选择对象版本控制(用于版本控制)

    对象版本控制功能可用于从意外或恶意覆盖操作中恢复,例如,如果攻击者将良性文件替换为包含漏洞利用代码的文件,则可使用此功能进行恢复。

    每个对象的版本数上限

    3

    虽然此值是任意的,并且可能会增加费用,但必须大于 1,才能回滚到之前的版本。如果攻击者可能会尝试多次覆盖,则可能需要更可靠的备份版本控制策略。

    非当前版本在多少天后过期

    7

    建议将旧版本保留 7 天,但对于长期存储,此天数可能会更长。

  8. 点击创建
  9. 如果系统显示“系统将禁止公开访问”弹出式窗口,请保持默认框(“禁止公开访问此存储分区”)处于选中状态,然后点击确认

启用数据保护和日志记录

为确保数据的不可变性和可审核性,您可以为存储分区启用对象版本控制并配置数据访问日志。对象版本控制功能可让您从意外删除或覆盖操作中恢复数据,而数据访问日志则可提供存储分区中所有活动的全面审核轨迹,这对于安全监控和合规性至关重要。

  1. 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 审核日志。使用 Google Cloud 控制台顶部的搜索栏搜索“审核日志”,然后选择该选项。
  2. 使用过滤条件搜索功能找到并选择 Google Cloud Storage
  3. 在随即显示的面板中,同时选中数据读取数据写入对应的复选框。
  4. 点击保存

7. 从实验室到现实

您刚刚在临时实验环境中完成了一系列步骤,但您应用的原则和配置是确保 Google Cloud 上真实 AI 项目安全的蓝图。下面介绍如何将所学知识应用到自己的工作中,从简单的实验过渡到可用于生产环境的设置。

您可以将刚刚构建的资源(专用 VPC、强化型 Workbench 实例和安全存储分区)视为任何新 AI 项目的安全启动模板。您的目标是让您和您的团队能够轻松地将此安全基础作为默认设置。

安全网络:您的私密工作区

如何在设置中使用此功能

每次开始新的 AI 项目(例如,“customer-churn-prediction”“image-classification-model”),您将复制此网络设置。您可以创建专用 VPC (churn-pred-vpc),也可以使用预先获批的共享网络。这会成为项目的隔离“沙盒”。您的开发环境(例如您配置的 Vertex AI Workbench)位于此受保护的空间内。您可以通过安全代理 (Open JupyterLab) 连接到该实例,而绝不会将其暴露给公共互联网。

连接到生产环境

在生产环境中,您可以通过考虑以下因素进一步扩展此概念:

  • 基础设施即代码 (IaC):您可以使用 TerraformCloud Deployment Manager 等工具定义此网络,而不是使用 Cloud 控制台。这样,您便能在几分钟内为新项目部署安全可靠的网络基础,确保其可重复使用且可审核。
  • 共享 VPC:在大型组织中,中央网络团队通常会管理共享 VPC。作为开发者,您将获准在集中管理的这个安全网络中的特定子网中启动实例和服务。原理相同 - 您仍然在私密空间中运营,但该空间是更大共享基础设施的一部分。
  • VPC Service Controls:为了实现最高安全性,您需要将整个环境封装在 VPC Service Controls 边界内。这是一项强大的功能,可确保只有专用网络边界的授权资源才能访问 Cloud Storage 等服务,从而防止数据泄露。

强化型计算:安全开发和训练中心

如何在设置中使用此功能

secure-genai-instance 是您的日常 AI 开发机器。您可以使用 JupyterLab 界面执行以下操作:

  • 在笔记本中编写和测试模型代码。
  • 安装 Python 库 (pip install ...)。
  • 使用中小型数据集进行实验。您配置的安全性(无公共 IP、最小权限服务账号、无 root 访问权限、安全启动)在后台透明运行。您可以专注于 AI 工作,因为实例已针对常见攻击进行了强化。

连接到生产环境

在生产环境中,您通常不会在单个 Workbench 实例上运行大规模训练。您可以改为通过以下方式将工作成果投入生产:

  • 从笔记本到流水线:您需要从笔记本中提取代码,并将其正式化为脚本。然后,此脚本将作为 Vertex AI 自定义训练作业Vertex AI 流水线中的一个步骤运行。
  • 容器化:将训练代码及其依赖项打包到 Docker 容器中,并将其存储在 Artifact Registry 中。这可确保您的代码每次都在一致且可预测的环境中运行。
  • 服务账号至关重要:您创建的 vertex-workbench-sa 服务账号至关重要。在生产环境中,自动化的 Vertex AI 训练作业将使用此相同(或类似)的最低权限服务账号运行,确保自动化作业仅具有其绝对需要的权限。

安全存储:您的中央制品库

如何在设置中使用此功能

secure-genai-artifacts 存储分区是项目数据的单一可信来源。它不仅适用于初始数据集。您可以使用它来存储:

  • 原始训练数据和预处理后的训练数据。
  • 长时间训练运行期间的模型检查点。
  • 最终的训练后模型制品(.pkl.pb.h5 文件)。
  • 评估结果和日志。您应用的这些安全设置(禁止公开访问、统一的存储分区级访问权限、版本控制和审核日志记录)意味着您可以放心地将此存储分区用作中央存储区,它可防止数据泄露和意外删除。

连接到生产环境

为了在生产环境中管理和控制您的正文,您还应考虑以下事项:

  • 生命周期政策:为了管理费用,您可以设置生命周期政策,以便在一定时间后自动将较旧的模型版本或数据集移至更实惠的存储类别(例如 Nearline 或 Coldline)或将其删除。
  • 跨项目权限:在生产流水线中,数据工程团队可能会从其他 Google Cloud 项目填充此存储分区。您启用的统一存储分区级访问权限可让您轻松安全地管理这些跨项目 IAM 权限,而无需使用复杂的(因此容易配置错误的)ACL。

概览:将安全性设为默认

采用此模型后,您可将安全性从事后考虑转变为基础。您不再只是一名开发者,而是团队的安全卫士。当有新团队成员加入时,您不会向其提供不安全的面向公众的机器。您为他们提供对安全、预配置环境的访问权限,在该环境中,安全的工作方式也是最简单的方式。这种方法可防止常见的数据泄露和系统入侵,从而直接降低业务风险,让您的团队能够放心地创新和构建强大的 AI 应用。

8. 恭喜!

恭喜!您已成功为 AI 开发环境构建并审核了多层安全基础设施。您创建了一个具有“默认拒绝”防火墙姿态的安全网络边界,部署了一个强化型计算实例,保护了一个数据桶,并使用日志验证您的控制措施是否完全按预期运行。

回顾

在本实验中,您已完成以下任务:

  • 预配了具有专用网络的安全 VPC,以缓解未经请求的流量。
  • 部署了针对启动套件和权限升级的强化型 Vertex AI Workbench 实例。
  • 保护 Cloud Storage 存储分区,以减少未受监控的数据传输和意外的公开暴露。
  • 实施了最小权限服务账号,以限制潜在的“爆炸半径”。
  • 启用了对象版本控制和数据访问日志,以实现数据保护和不可变的审核轨迹。