你正在面对的问题
如果你在云端运行业务,那么你的团队其实已经在使用 AI 了:ChatGPT 插件、集成开发环境(IDE)中的 Copilot、悄无声息嵌入客户流程的 LangChain 概念验证,或是一款本应临时使用、却留存至今的周末辅助工具。
问题不在于 AI 是否存在于你的 IT 资产中,而在于有多少相关实例是你不知情的。微软针对英国企业机构开展的研究显示,71% 的员工会在工作中使用未获审批的 AI 工具,其中 51% 的人每周都会使用,该研究将这类行为明确定义为“影子 AI”,并着重指出其潜藏的安全隐患。Ivanti 等机构的调研同样表明,大量员工私自使用未授权 AI 工具,且大多通过个人账号登录使用。
近期发生的事件也印证了这一点。2025 年 8 月,针对 Nx npm 包的 s1ngularity 供应链攻击利用恶意的安装后脚本从开发设备与持续集成/持续交付(CI/CD)运行环境中窃取 GitHub 令牌、云凭证及其他机密信息,让攻击者得以入侵下游各类环境。
2024 至 2025 年期间,多项调查,大量暴露在公网中的 Jupyter 服务、大语言模型(LLM)服务器以及 AI 接口几乎未设置身份验证,部分设备还被用于加密货币挖矿、DDoS 攻击和数据窃取等恶意行为。
传统安全机制默认你清楚自身正在运行的业务与程序,而 AI 彻底打破了这一假设。有开发者为快速搭建原型接入 OpenAI API,尝试使用了真实客户数据,事后却忘了告知任何人。三个月后,该接口开始处理生产流量,没人敢贸然将其关停。
本指南后续内容将介绍如何以团队可接受的方式重新掌控局面。我们先从排查工作入手,讲解如何借助监控/可观测性工具检测基础设施中运行的各类 AI 服务。接着介绍数据写入时的分类规则,以及如何通过身份与访问控制落实控制,杜绝未授权数据流向大模型。
最后,我们将介绍策略即代码、模型注册表以及基于风险的审批机制,把治理工作融入常规交付流程,而非仅做事后审计。落实以上内容,就能显著提升 AI 模型的安全水平。
发现:找到你不知道的
第一步是梳理真实的 AI 接入节点清单。这件事看似简单,实际操作却并不容易。各类 AI 服务常常部署在现有工具无法监测的地方,下文我们会详细介绍可用于保护企业与数据的工具。
云访问安全代理扫描
云访问安全代理(CASB)部署在用户与云应用之间,可监控对各类主流 AI 服务商的接口调用。Microsoft Defender for Cloud Apps、Netskope、Prisma Access 等产品能够在用户访问 OpenAI、Anthropic、Hugging Face 或 Azure OpenAI 时及时发出告警。
大多数 CASB 产品都预设了 AI 应用分类。在 Defender for Cloud Apps 中,打开云应用目录,按“生成式 AI”筛选可将各个应用标记为已批准、未批准或监控状态。对于 Netskope,可使用“生成式 AI”应用分类创建实时防护策略。建议先将策略设为告警模式,持续运行三十天完成数据基线采集,之后再酌情启用拦截规则。
请至少为你的 CASB 告警筛选以下域名:api.openai.com、claude.ai、api.anthropic.com、huggingface.co,以及企业内部使用的所有 Azure OpenAI 接入端点。三十天后,你就能掌握各团队的使用情况、访问频次以及对应的终端设备信息。
部署后首日即可产生防护效果,且无需修改任何应用程序,但该方案的局限在深度方面:仅能查询到“昨日发起五百次 OpenAI 调用”这类统计数据,无法查看传输数据内容与发起调用的服务来源,CASB 也会遗漏自托管模型。
可将 CASB 作为发现和可见性工具,但不要把它当作拦截器。相关控制后续通过 IAM、虚拟私有云(VPC)权限控制或准入校验来实现。
服务网格遥测
采用服务网格部署自托管 AI 效果较为理想。若你正在使用 Istio、Linkerd 或 AWS App Mesh,相关运行数据已完成采集,只需执行查询操作即可查看。
针对运行 AI 工作负载的 Kubernetes 集群,先梳理出 AI 框架的实际部署分布情况。
第一步需要扫描所有命名空间中的 Pod,识别出运行主流 AI 框架的容器。该脚本利用 kubectl 的 JSON 输出结合 jq 过滤来搜索镜像名称,专门查找镜像中包含 TensorFlow、PyTorch、Hugging Face、MLflow 或 Triton Inference Server 引用的容器,这些框架代表了生产环境中最常部署的 ML 基础设施。
# 查找运行主流 AI 框架的 Podkubectl get pods --all-namespaces -o json | jq -r ' .items[] | select((.spec.containers // []) | any(.image?; test("tensorflow|pytorch|huggingface|mlflow|triton"; "i"))) | {namespace: .metadata.namespace, pod: .metadata.name, images: ((.spec.containers // []) | map(.image) | unique)}' | jq -s 'unique_by(.namespace + "-" + .pod)'脚本会解析 JSON 输出,提取所有匹配 Pod 对应的命名空间、Pod 名称与唯一容器镜像。脚本采用大小写不敏感的正则匹配规则,可识别 TensorFlow、tensorflow 以及内置该框架名称的自定义镜像等各类变体。最后的去重过滤逻辑能够避免单个 Pod 内多个带有 AI 框架的容器生成重复记录。
识别出 AI 工作负载后,下一步关键操作是检查网络策略,明确网络访问权限。ML 模型通常需要对外建立连接,用于下载模型、上报遥测数据或是调用云服务。网络策略审计会重点排查两类规则:未配置出站规则(默认放行全部出站流量)、通过 IP 段放开外部访问权限的策略。
# 核查允许对外出站访问的网络策略kubectl get networkpolicies --all-namespaces -o json | jq -r ' .items[] | select( .spec.egress == null or (.spec.egress[]? | ((.to[]?.podSelector == null) or (.to[]?.ipBlock != null))) ) | {namespace: .metadata.namespace, policy: .metadata.name, allows_external: true}'该脚本很有用,但也只是临时快照。想要持续监测新增服务,就需要长期采集运行数据,而这正是 API 网关日志发挥作用的地方。API 网关审计
如果业务流量经由 AWS API Gateway、Kong、Apigee 这类 API 网关转发,访问日志将具备极高价值,所有接口访问行为与外部调用记录都会留在那里。
针对 AWS API Gateway 的 REST API,请开启包含 httpMethod、resourcePath 与 status 字段的 JSON 访问日志,之后便可使用 CloudWatch Logs Insights 查询:
对于 HTTP API v2,可使用 requestContext.http.method和requestContext.http.path。
fields @timestamp, httpMethod, resourcePath, status, @message| filter @message like /openai|anthropic|cohere|huggingface|ai21|bedrock/| stats count() by httpMethod, resourcePath, status| sort count desc不要只搜索服务商名称,重点关注大量指向生成接口的 POST 请求、体积异常庞大的请求载荷,以及上月未曾出现的新的出口模式。
你做出的权衡
每一类监测信号各填补一处不同的安全盲区。借助云访问安全代理,你能够快速查清哪些人正在从哪里调用公有 AI 服务商,这样就可以解答诸如“哪些业务团队已将内部数据传输至 OpenAI 或 Anthropic” 这类问题。代价是你几乎了解不到集群和 VPC 内部的运行情况。
使用服务网格,你获得的是相反的视角。你能看到 Pod 到 Pod 的流量、哪些内部服务在调用模型部署服务、以及哪些命名空间在悄悄运行 TensorFlow 或 Hugging Face 镜像。想要这种深度观测能力,就要付出部署配置与自定义查询的成本。注意,它无法监测团队员工使用本地电脑直接访问 Azure OpenAI 的行为。
借助 API 网关日志,你能获得一个控制点。所有经过网关的请求都可以被审计,无论后端是托管模型、自建大语言模型,还是传统微服务。代价是需要做好存储与日志聚合规范管理,否则这些日志只会沦为无人查看的海量数据湖。
大多数企业最终会同时采用这三种方案,将各类监测信号汇总到安全信息与事件管理平台(SIEM)或数据平台,再搭建一个简易可视化面板,用以直观查看“实际在哪些场景使用了 AI,其中哪些使用渠道经过合规审批”。这会增加额外工作量,但能让企业告别盲目猜测,做到有据可查。
现在已能够监控 AI 流量,接下来需要全面对数据进行分类,以此防止敏感数据被意外发送至第三方工具。
创建时分类:AI 治理下的强制数据标记
在创建时对数据进行分类的原则已经从合规的“锦上添花”转变为 AI 治理必不可少的的手段。存储在云环境中的每个对象在创建时都应该立即被打上分类标签,为整个数据生命周期中的自动化策略执行奠定基础。虽然合规团队多年来一直倡导这种做法,但由于 AI 训练流程可能无意间读取敏感数据,这项要求已从建议升级为硬性规定。
现代云平台提供原生分类服务,在数据进入存储系统时自动扫描和标记内容。AWS Macie 使用机器学习和模式匹配来识别 S3 存储桶中的敏感数据,根据发现的内容打上分类标签。Microsoft Purview 将此功能扩展到 Azure 存储服务、Office 365 和本地存储库,创建统一的分类法,无论数无论数据存储在何处均可持续追踪。谷歌的数据丢失防护(DLP)服务为 Cloud Storage、BigQuery 和其他 GCP 服务提供类似功能,并增加了在数据摄取期间进行实时分类的能力。
这些服务依靠发现任务持续扫描新增及修改后的对象,通过内容检测为其打上分类标签。扫描过程会检查文件内容、元数据和上下文信息,以此确定对应的分类级别。例如,包含信用卡号的文档将被打上个人身份信息(PII)标签,而包含医疗记录的文件将触发健康保险流通与责任法案(HIPAA)相关分类。这些服务开箱即可识别超过 150 种敏感数据类型,涵盖身份证号、API 密钥、加密证书等。
json{ "DataClassification": "Confidential", "ContainsPII": true, "AIApproved": false, "ScanDate": "2025-10-20", "ComplianceScope": "GDPR,HIPAA"}上述的分类元数据结构采用了一套完备的标签机制,可同时满足多项治理管控需求。DataClassification 字段使用标准术语(公开、内部、机密、受限)划定敏感度等级,与企业数据处理策略保持一致。ContainsPII 布尔标志为需要启用增强保护或访问控制的系统提供了快速参考。AIApproved 标志用于解决 AI 治理的新要求,明确标注该数据是否经过审核、允许用于机器学习场景。
ScanDate 时间戳生成审计轨迹,记录分类操作的执行时间,这对于证明合规性、长期追踪数据分类偏差至关重要。ComplianceScope 字段将数据关联至对应的监管框架,可根据属地与行业要求自动执行策略。这种多维度标签方案能确保下游各类系统(备份服务、分析平台、AI 训练流程等)获取到完整的信息,从而做出合规的数据处理操作。
实施时需要充分考量性能影响和成本问题。数据分类服务通常按扫描的数据量计费,因此必须优化扫描周期与扫描范围。不少企业采用分级扫描策略:高风险数据链路启用实时分类,归档内容则采用批量处理。分类规则本身需要定期复核更新,以适配新增数据类型、新出台法规以及持续变化的 AI 使用场景。
数据分类从可选项变为强制要求标志着云数据治理发生根本性转变。企业若在数据生成之初就建立完善的分类机制,既能规避事后补打标签带来的技术负债,也能为适配 AI 业务扩张、基于策略自动化管理数据打下基础。
实时数据分类:入口点的即时保护
传统方案采用夜间批量分类任务,这样会产生一段高风险空窗期,敏感数据在数小时内无标签、不受保护。现代数据保护要求数据写入时同步完成分类,让数据治理从被动补救转变为主动安全控制。这一转变尤为关键,因为 AI 训练任务大多持续运行,很可能在夜间扫描打上防护标签前就读取了未分类数据。
亚马逊云科技提供了多种分类服务,按需选择合适的工具可兼顾防护效果与成本控制。S3 事件通知是实时分类的支柱,一旦有文件创建或修改,便会立刻触发 Lambda 函数。这种事件驱动架构能确保所有存入存储层的数据均完成合规分类,消除批量处理带来的安全空窗期。这种同步机制可在数据上传数秒内完成分类,即时落地各类安全控制策略。
Amazon Comprehend 在这种实时场景中是同步检测 PII 的最佳选择。与 Macie 不同——Macie 擅长跨大数据集进行全面发现,而 Comprehend 可针对单段文本进行低延迟处理。该服务可以检测超过 30 种个人身份信息,包括姓名、地址、社会安全号码、信用卡详细信息和医疗记录号码。它基于 API 架构,非常适合 Lambda 集成,仅需毫秒级即可返回分类结果,不像批量扫描服务需要数分钟乃至数小时。
import boto3import urllib.parses3 = boto3.client('s3')comprehend = boto3.client('comprehend')def lambda_handler(event, context): """ Triggered by S3 PutObject. Classifies data using Comprehend PII detection, applies tags. """ rec = event['Records'][0] bucket = rec['s3']['bucket']['name'] key = urllib.parse.unquote_plus(rec['s3']['object']['key']) obj = s3.get_object(Bucket=bucket, Key=key) text = obj['Body'].read(500000).decode('utf-8', errors='ignore') pii_response = comprehend.detect_pii_entities(Text=text, LanguageCode='en') has_pii = len(pii_response.get('Entities', [])) > 0 classification = 'Confidential' if has_pii else 'Internal' ai_approved = 'False' if has_pii else 'True' tags = [ {'Key': 'DataClassification', 'Value': classification}, {'Key': 'AIApproved', 'Value': ai_approved}, {'Key': 'ClassifiedAt', 'Value': context.aws_request_id} ] s3.put_object_tagging(Bucket=bucket, Key=key, Tagging={'TagSet': tags}) if has_pii: quarantine_key = f"quarantine/{key.split('/')[-1]}" s3.copy_object( Bucket=bucket, Key=quarantine_key, CopySource={'Bucket': bucket, 'Key': key}, ServerSideEncryption='aws:kms', MetadataDirective='COPY' ) s3.delete_object(Bucket=bucket, Key=key) return {'statusCode': 200, 'classification': classification, 'quarantined': True} return {'statusCode': 200, 'classification': classification, 'aiApproved': ai_approved}保留 Macie 用于定时巡检,排查数据分类偏差与遗漏:实时检测用于关口,定时扫描负责合规核验。成本提示:Comprehend 按文本单位计费,单份文件仅需几美分;Macie 按 GB 扫描计费。建议查询各区域定价,并对高流量业务做成本抽样测算。
只做数据分类却不实际应用只会徒增成本。Macie 与 Comprehend 给数据打上标签后,标签必须起到拦截风险行为的作用。下一层机制将静态元数据转化为主动控制能力,而这要依靠身份访问管理(IAM)来实现。
通过 IAM 强制执行:构建坚不可摧的数据访问控制
若没有拦截未授权访问的执行机制,数据对象的分类标签便毫无意义。IAM 策略将标签从静态元数据转化为主动安全控制手段,在敏感数据与 AI 服务之间构筑动态防护屏障。这里的核心思路是控制数据访问链路,而非直接控制 AI 模型本身;原因在于现代机器学习架构通常包含多类服务、容器及临时计算资源,在模型层面实施控制并不具备可操作性。
AWS 中的 IAM 策略遵循默认拒绝原则,但 AI 工作负载较为复杂,需要设置明确的拒绝语句来防止通过角色切换或跨账户访问绕过管控。文中所示的策略结构实现了五个不同的控制层,每个层解决 AI 数据管道中的特定漏洞。在这些控制的协同下,数据在到达 AI 服务之前必须通过多重检查点。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireClassificationOnUpload", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::ai-training-data/*", "Principal": "*", "Condition": {"Null": {"s3:RequestObjectTag/DataClassification": "true"}} }, { "Sid": "DenyReadsWhenClassificationMissing", "Effect": "Deny", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::ai-training-data/*", "Principal": "*", "Condition": {"Null": {"s3:ExistingObjectTag/DataClassification": "true"}} }, { "Sid": "DenyReadsUnlessAiApproved", "Effect": "Deny", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::ai-training-data/*", "Principal": "*", "Condition": {"StringNotEquals": {"s3:ExistingObjectTag/AIApproved": "True"}} }, { "Sid": "AllowAIServiceRoleAccess", "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::ai-training-data", "arn:aws:s3:::ai-training-data/*" ], "Principal": {"AWS": "arn:aws:iam::123456789012:role/AIServiceExecutionRole"}, "Condition": {"StringEquals": {"aws:SourceVpce": "vpce-1234abcd"}} }, { "Sid": "DenyAccessToRestrictedData", "Effect": "Deny", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::ai-training-data/*", "Principal": "*", "Condition": {"StringEquals": {"s3:ExistingObjectTag/DataClassification": "Restricted"}} } ]}第一层控制防止未经适当分类标签的数据进入 AI 训练存储桶。RequireClassificationOnUpload会在数据上传关口设置硬性拦截,拒绝为携带DataClassification 标签的 PutObject 操作。这样可以防止未分类数据的意外上传和故意绕过分类系统。采用拒绝策略效果,并将访问主体设置为通配符全部匹配,确保此规则全局生效,覆盖权限层次结构中可能存在的 Allow 权限。
第二和第三层针对读取路径,实现安全专业人员所说的“故障安全”设计。DenyReadsWhenClassificationMissing 会拦截对所有无分类标签文件的访问,防范文件上传后标签被移除或损坏带来的安全风险。
DenyReadsUnlessAiApproved 管控更为严格,要求数据必须带有 AIApproved 标签才能用于 AI 管道。这种双关卡机制可以确保即便数据已完成分级分类也必须经过专门核验、准许用于机器学习后各类模型才有权读取该数据。
第四层通过正向安全策略落实最小权限原则。AllowAIServiceRoleAccess 仅授予指定 IAM 角色(AIServiceExecutionRole)访问权限,并附加网络控制,要求流量必须经由专属 VPC 终端节点接入。这种身份与网络双重控制可抵御横向渗透攻击,避免遭入侵的服务擅自读取训练数据。强制使用 VPC 终端节点的机制能够确保即便凭证被盗,攻击者也无法在指定网络边界之外利用该凭证访问资源。
最后一层对受限数据实施绝对禁止访问。无论其他权限或条件如何,标记为 Restricted 的对象保持完全不可访问。这为最敏感的信息(如加密密钥、认证令牌和绝不应进入 AI 管道的受强监管的个人数据)创建了数据保护区。
鉴于 AWS 的权限判定逻辑,策略的顺序至关重要。显式 Deny 规则优先级始终高于 Allow 规则,形成层层校验的安全屏障,数据必须通过全部校验节点才可被访问。主体设为通配符“*”的通用拒绝规则能够杜绝任何角色、用户或服务通过权限提升、跨账号访问等方式绕过控制。
落地实施时需要与现有 IAM 权限架构做好协调。不少企业会发现这与旧策略存在权限冲突,这些旧策略曾为开发团队、数据科学角色开放宽松的 S3 访问权限。在启用执行策略之前必须解决这些冲突,通常需要新建粒度更细的角色,严格遵循数据分类权限边界。过渡期间一般会借助 CloudTrail 日志,将策略设置为“仅记录”模式,在全面强制生效前排查出所有可能引发业务中断的问题。
VPC 端点控制为安全模型增加了另一个防护维度。企业要求流量仅通过指定终端节点访问资源,借此实现网络层面的流量检测、日志记录与访问速率限制。端点成为可以监控所有 AI 训练数据访问的控制点,为安全和成本管理目的创建了有价值的遥测数据。仅依靠 IAM 日志往往无法捕捉到未授权访问行为,而此类终端节点生成的网络流量日志通常能清晰暴露这类攻击尝试。
组织级服务控制策略(SCP)是最后一道强制控制层,可阻止单个独立账号管理员擅自弱化这些控制。SCP 能够禁止修改存储桶策略、禁止移除数据分级标签,同时拦截创建可绕过整个防护机制的 IAM 策略。这种分层控制可确保即便是高权限用户也无法有意或无意搭建敏感数据的绕过路径。
多重控制措施叠加作用,将 S3 存储桶从单纯的存储载体转变为智能数据防护单元,主动拦截未经授权的 AI 数据消费行为。每一个请求都要经过多层校验,任一校验不通过都会被直接拒绝。这种深度防御思路充分考虑到 AI 系统架构复杂、分布式部署且持续迭代更新的特性,配套安全控制能力需要适配各类新服务和新的访问模式,同时持续为敏感数据提供稳定防护。
强大的控制只有在人们实际使用它们时才能发挥效用。若过度收紧权限限制,开发人员会另寻规避手段,常见方式包括使用个人账户与影子 IT 系统。下一步关键在于让合规操作成为阻力最小的实施路径。
让安全路径变简单:通过开发者体验实现治理
当安全控制成为生产力的障碍时,它们就会形同虚设。如果开发者为了赶工期而经常绕过,即便是最健全的治理框架也会变得毫无价值。与其在出现摩擦时放松控制,不如将安全要求嵌入到简易易用的工具中,让工具自动处理合规。这种方法将治理从检查点转变为推动者,使安全路径也成为通往生产的最快路径。
传统方法要求开发者记住分级分类体系、规范设置标签、配置加密参数并走完各类审批流程。每一步都存在合规失效风险,处于压力之下的开发者可能会走捷径规避流程。现代 DevSecOps 实践将这些要求嵌入到开发者已在使用的工具中,使合规成为默认设置而非额外负担。
import boto3from botocore.config import Configfrom typing import LiteralDataClass = Literal["Public", "Internal", "Confidential", "Restricted"]class SecureS3Client: def __init__(self): config = Config(retries={'max_attempts': 5, 'mode': 'adaptive'}) self.s3 = boto3.client('s3', config=config) def upload_for_ai_training(self, file_path, bucket, classification: DataClass, requires_approval=False): if classification in ["Confidential", "Restricted"] and not requires_approval: raise ValueError( f"{classification} data needs approval. Set requires_approval=True to route through governance." ) key_prefix = "staging" if requires_approval else "ai-training" key = f"{key_prefix}/{file_path.split('/')[-1]}" self.s3.upload_file( file_path, bucket, key, ExtraArgs={ 'Tagging': f'DataClassification={classification}&AIApproved=True', 'ServerSideEncryption': 'aws:kms' } ) return f"s3://{bucket}/{key}"SecureS3Client 类展示了抽象层如何消除合规流程带来的阻碍。开发人员仅需在上传数据时指定分级类别,客户端会在后台自动处理全部合规要求。类型提示可在开发阶段校验分级参数的合法性,避免因输入错误或参数取值不当引发运行时异常。字面量类型注解支持代码编辑器自动补全功能,向开发者准确显示哪些分类选项可用。
上传方法会根据数据敏感度实现智能路由。机密与受限数据若需审批,将自动路由至待审批区域;已完成审批的数据则直接存入训练存储桶。这种限制可防止数据意外泄露,同时为各类数据划分清晰流转路径。当缺少审批凭证时,系统会给出明确报错提示,引导开发人员走标准流程,而不是让他们反复上传失败后才知晓合规要求。
自动标记和加密在上传过程中对开发人员完全透明。开发人员永远看不到标签格式语法,也不用记忆各类加密参数。客户端默认采用 KMS 加密,并构建符合 IAM 策略的标签字符串。自适应模式的重试配置可自动处理瞬时故障,避免开发人员在业务高峰期遭遇随机上传失败带来的困扰。
该方法会返回完整的 S3 统一资源标识符,开发人员可直接将其用于训练管道,无需手动拼接路径,也不用记忆存储桶架构。统一的路径格式还能简化调试与日志分析工作,所有 AI 训练数据均遵循可预判的命名规则。
这种设计预留扩展点,可新增治理能力且不破坏现有代码。团队仅需更新客户端类即可接入个人身份信息自动扫描、病毒检测或成本分摊标签等功能。使用客户端的开发人员无需修改自身代码就能自动启用新增的防护机制。这种渐进式方案可持续强化治理能力,无需大规模重构代码。
暂存区域概念构建了一个顺畅的审批流程,且不会阻滞开发工作。需要审核的数据会存入暂存存储桶,由自动化或人工治理流程完成校验。审核通过的数据转入训练存储桶,被驳回的数据则进入隔离区。治理流程异步执行,开发人员可同步开展工作,杜绝那种“仓促提交后干等审批”、严重损耗工作效率的情况。
与现有开发工作流集成仅需做少量改动。客户端兼容标准 Python 环境、Jupyter 笔记本以及 CI/CD 部署管道。团队可将其封装为命令行工具,将其与 SageMaker 等数据科学平台集成,或将其嵌入 ETL 管道。开发人员凭借 Boto3 基础就能快速理解底层逻辑与各类异常场景。
这种方法之所以可行,是因为它充分考量了开发者心理。在复杂的安全路径和简单的不安全路径之间,处于压力下的开发者会选择后者。将安全流程设计得比其他任何替代方案都更简便,合规就成了阻力最小的选择。安全方案变成了最省事的方案,省事永远是人们的第一选择。
策略即代码:让复杂规则规模化
IAM 策略能实现基础的访问控制,但现代 AI 治理需要基于时间窗口、数据年龄、模型注册状态和多团队审批的上下文做出决策。策略即代码引擎在运行时会评估这些复杂规则,做出在静态 IAM 策略中无法表达的决策。这种方法将治理从配置文件转变为可执行逻辑,可适应不断变化的业务场景。
Open Policy Agent(OPA)已成为策略即代码的行业标准,它采用 Rego 语言根据声明性规则对 JSON 输入内容进行校验判定。AWS Cedar 为 Amazon Verified Permissions 提供支持,使用专门为授权决策构建的语法,而 HashiCorp 的 Sentinel 直接与 Terraform 和 Vault 工作流集成。这些引擎通常作为 Kubernetes Pod 中的边车或 API 网关的 Lambda 授权器运行,拦截请求并根据当前上下文在毫秒内做出决策。
package ai.governancedefault allow_data_access = falseallow_data_access if { input.principal.type == "ai_service" input.resource.type == "data_store" input.resource.tags["DataClassification"] != "Restricted" input.resource.tags["AIApproved"] == "true" data_within_retention_window model_is_registered production_requirements_met}allow_data_access if { input.break_glass == true input.approver in data.security.oncall time.now_ns() - time.parse_rfc3339_ns(input.approval_time) < 30*60*1e9}data_within_retention_window if { not is_customer_data}data_within_retention_window if { is_customer_data data_age_days := time.now_ns() - time.parse_rfc3339_ns(input.resource.created_at) data_age_days < 90 * 24 * 60 * 60 * 1000000000}is_customer_data if { input.resource.tags["DataCategory"] == "Customer"}model_is_registered if { model_id := input.principal.model_id registry_entry := data.model_registry[model_id] registry_entry.status == "approved"}production_requirements_met if { input.environment != "production"}production_requirements_met if { input.environment == "production" scan_date := time.parse_rfc3339_ns(input.principal.last_security_scan) time.now_ns() - scan_date < 7 * 24 * 60 * 60 * 1000000000 input.principal.monitoring_enabled == true input.principal.security_approved == true}该策略结构展示了如何将复杂治理需求拆解为易于维护的规则。allow_data_access链接必须全部为真的多个条件。每个条件对应一类治理校验维度:数据分级检查保障敏感数据安全留存;数据留存时效约束落实数据最小化原则;模型登记校验确保仅有经过审核的算法可访问生产数据。
数据留存逻辑展示了策略如何针对不同类别数据执行差异化管理。客户数据设置严格的 90 天保留期限,执行被遗忘权原则;内部分析数据则无存储时长限制。若采用传统方案实现这种细粒度管理,需编写数十条 IAM 策略和多个 Lambda 函数,而借助 Rego 代码仅需寥寥数行即可完成。
生产环境检查展示了对关键系统的纵深防御。在生产环境中运行的模型必须在最近 7 天内通过安全扫描,启用监控,并获得显式安全批准。非生产环境可绕过这些检查,让开发者能够快速迭代,同时在重要的地方保持严格控制。基于时效的安全扫描要求实现持续性合规,而非一次性认证。
应急机制充分考虑了突发安全事件的情况。当事件响应团队需要进行即时访问时,他们可以通过批准的应急请求绕过正常控制流程。该策略会校验审批人是否处于当日值班状态,且审批操作需发生在近三十分钟内。每一次应急权限访问都会生成完整审计日志,在保障应急处置效率的同时落实权责追溯。
清晰的拒绝提示能够减少开发人员的困扰,降低工单提交量。当 OPA 拒绝访问请求时,会返回“模型未注册”或“安全扫描已过期”这类失败原因,而非笼统的 403 错误码。这种信息透明化便于开发人员自行排查问题、理解治理规范。这种反馈闭环既能提升团队的合规认知,也减轻运维支持压力。
package ai.governancetest_allow_internal_data_with_registered_model if { allow_data_access with input as { "principal": {"type": "ai_service", "model_id": "model-123", "monitoring_enabled": true, "security_approved": true, "last_security_scan": time.now_rfc3339_ns()}, "resource": {"type": "data_store", "tags": {"DataClassification": "Internal", "AIApproved": "true", "DataCategory": "Analytics"}, "created_at": time.now_rfc3339_ns()}, "environment": "production" } with data.model_registry as {"model-123": {"status": "approved"}}}对策略即代码进行测试,避免线上环境出现治理规则异常。单元测试能够验证策略在各类场景下的执行逻辑是否正常,在其阻断合法访问或放行未授权操作前提前捕获逻辑缺陷。测试框架可让团队模拟各类输入与数据源,即便面对复杂的条件逻辑也能保证策略运行无误。CI/CD 管道会自动执行这些测试,对待策略变更与业务应用代码采用同等严格的校验标准。
从静态配置文件转向可执行策略代码,让治理体系随组织复杂度同步扩展。团队可以对策略进行版本控制,通过拉取请求审查变更,并回滚有问题的更新。策略语言的声明式特性让规则具备可审计、可溯源的特点,这对于满足监管合规要求、开展安全审查至关重要。随着 AI 系统变得更加复杂,策略即代码提供了实施新治理要求的灵活性,而无需架构变更。
团队如何将其变为现实:AI 治理的运营规范
上述的技术控制手段只有在团队能够切实执行的简易运营规范才能发挥作用。流于形式的治理与真正有效的防护的区别在于搭建开发者自愿使用、而非被迫应付的系统。实现这一切的基础,是搭建模型注册表,并将其作为所有投产算法的唯一可信数据源。
人们实际会用的模型注册表
成功的模型注册表不只是用来完成合规勾选,更能为工程团队创造真正的价值。每个生产模型都被注册,不是因为政策要求,而是因为注册解锁了团队需要的功能:自动部署、性能监控和即时回滚。注册表会跟踪每个模型的完整溯源信息,包括训练数据源、安全扫描结果、审批链、监控配置和事件历史。这种全面跟踪体系让注册表从一项官僚化硬性要求转变为运维工作不可或缺的核心工具。
MLflow 和 DVC 为模型版本控制和元数据跟踪提供了坚实的基础,但它们需要与 Kubernetes 编排集成,才能在运行时强制执行治理规范。自定义资源定义(CRD)填补了这一缺口,创建注册模型的 Kubernetes 原生表示,准入控制器可以完成验证。CRD 成为伴随模型整个生命周期的活文档,确保治理规则在开发、暂存和生产环境中统一生效。
apiVersion: ai.company.com/v1kind: AIModelmetadata: name: customer-segmentation-v2 namespace: ml-productionspec: modelType: sklearn-classifier trainingData: buckets: - s3://training-data/customer-segments/ classification: Internal scanDate: "2025-10-15" approvals: - approver: security-team date: "2025-10-18" scanResults: "passed" - approver: data-governance date: "2025-10-19" dataReview: "approved" monitoring: enabled: true driftDetection: true explainability: true accessPolicy: allowedDataClasses: [Public, Internal] maxDataAge: 90d requiresAudit: truestatus: phase: Approved deployedAt: "2025-10-20T10:30:00Z" lastSecurityScan: "2025-10-18T14:22:00Z"AIModel 资源在单个可版本化的文档中捕获治理决策所需的一切。spec 部分定义模型的要求和约束,记录它可以访问哪些数据分类以及监控和可解释性等运营要求。trainingData 部分维护溯源信息,显示生成当前模型所用数据集及其最近一次合规扫描时间。这种透明度有助于数据团队理解决策对下游的影响。
approvals 数组会创建谁批准了模型以及何时批准的不可变审计记录。安全团队可以看到扫描结果,数据治理团队可跟踪数据审查结果,合规团队可获取规范流程的证据。安全团队可查看扫描结果,数据治理团队跟进数据审核结论,合规团队可获取规范流程的完整佐证。审批流程不只是书面存档;准入控制器会读取这些字段,在运行时判定模型是否允许部署、能否访问指定数据源。
通过自定义资源定义(CRD)架构,监控配置从可选配置变为强制要求。团队必须显式开启配置漂移检测与模型可解释性功能,集群会拒绝部署缺少完备可观测能力的模型。这种监控机制能够避免生产环境中模型性能悄然衰减这一常见问题,确保团队在问题影响业务决策或违反合规要求前及时发现隐患。
accessPolicy部分将治理要求转化为技术约束。不再只依靠模型的自我监管,策略明确说明模型可以访问哪些数据分类以及数据允许的留存时效。requiresAudit 标志为敏感模型触发额外的日志记录和审查流程,创建监管机构要求的详细审计记录。
借助多种互补工具在多个阶段执行校验。Kyverno 负责简单的声明式校验,例如确保所有模型均完成安全审批、生产环境模型开启监控等。基于 YAML 的策略配置便于平台团队编写和维护,无需复杂逻辑即可覆盖 80% 的校验需求。针对时效类校验(如核查安全扫描是否在有效期内),OPA Gatekeeper 可提供评估复杂条件的计算能力。工具组合可实现全面校验覆盖,同时不会给团队带来过高的操作复杂度。
# Kyverno 策略示例 - 基础校验规则apiVersion: kyverno.io/v1kind: ClusterPolicymetadata: name: require-model-monitoringspec: validationFailureAction: enforce rules: - name: check-monitoring match: resources: kinds: - AIModel namespaces: - "ml-production" validate: message: "Production models must have monitoring enabled" pattern: spec: monitoring: enabled: true driftDetection: true注册表和集群之间的分离带来了清晰的责任边界。模型注册表作为团队提交审批申请、记录合规和追踪数据溯源的决策点。它在生产集群之外运行,与运行时系统保持独立。集群成为执行点,通过 CRD 读取注册表状态并应用策略。这种分离机制确保治理决策经过了深思熟虑,且有适当的审查和文档记录,同时执行是自动化的,无需人工干预。
运营成功的关键在于将注册表视为单一事实来源。当模型在注册表中获得审批后,审批状态会通过 GitOps 管道或 Operator 自动传播到集群资源。当安全扫描过期或审批被撤销时,集群会自动限制模型访问。这种自动化消除了政策决策和技术执行之间的脱节问题,保障治理规则被即时、统一地应用。
落地的关键在于让注册表为日常运营提供价值。工程师用它来查找可用的模型,数据科学家用它跟踪实验溯源信息,安全团队用它监控合规状态。当注册表成为完成工作的必备工具,而不仅仅是用来应付审计时,团队自然会主动维护注册表,保证内容实时准确。这种自发式采用模式能够形成长效治理体系,持续完善,而非流于走形式式的合规应付。
基于风险的审批,不阻碍交付
固定审批队列会形成流程瓶颈,开发人员难免通过影子 IT 或曲解政策来规避。高效的治理会区分不同 AI 部署的风险等级,并实施分级审批流程。部署至开发环境、使用公开数据的低风险模型可自动放行,生产环境中处理客户财务数据的模型则需要人工审核。这种基于风险的方法既能保障安全,又不会拖慢交付进度。
class AIGovernanceApprover: def evaluate_deployment(self, model_config): risk_score = self.calculate_risk(model_config) if risk_score < 3: return {"approved": True, "approver": "automated", "conditions": ["monitoring_required"]} elif risk_score < 7: scan_passed = self.run_security_scan(model_config) if scan_passed: return {"approved": True, "approver": "automated-with-scan", "conditions": ["monitoring_required", "monthly_review"]} return self.escalate_to_security_team(model_config) else: return self.escalate_to_governance_board(model_config)这套评估逻辑展示了风险评分如何驱动审批流程。风险评分低于 3 分的模型(大多是在非生产环境中使用公开数据的模型)可自动通过审批,仅需满足基础监控要求。中风险部署会自动触发安全扫描,检测漏洞、硬编码凭证以和合规问题。只有涉及敏感数据或核心生产系统的高风险场景,才会流转至人工审核,将宝贵的人工判断资源留给真正需要人工决策的场景。
监控,像对待可靠性一样对待治理
随着数据分布发生变化、不断出现新的对抗性样本模式,生产环境模型会随时间发生漂移。AI 专属指标必须被接入到现有的可观测体系中,将治理违规与生产事件同等对待。团队已经信任使用 Prometheus、Datadog 或 CloudWatch 进行可靠性监控,在上述平台中加入 AI 合规治理指标可确保违规行为实时触发告警,而不是等到季度审计时才被发现。
ai_model_data_access_total{model="customer-segmentation-v2", classification="Internal", approved="true"} 1247ai_model_data_access_denied_total{model="recommendation-engine", classification="Restricted", reason="not_registered"} 23ai_model_drift_score{model="fraud-detection", environment="production"} 0.07ai_model_last_security_scan_timestamp{model="customer-segmentation-v2"} 1729425720这些指标可实时展示治理的健康状况。访问计数器记录哪些模型读取了哪些数据分类,能即时发现未授权访问行为。漂移分数可量化模型的衰减程度,在合规违规发生之前触发重新训练。安全扫描时间戳支持对逾期核查行为推送告警,避免模型在审批失效的情况下持续运行。当生产模型尝试读取未分类数据时,它会触发 PagerDuty 告警,而不是等到三个月后才出具合规报告。
成本管理需要制定完善的数据留存策略。原始日志会占用大量存储空间,高并发推理任务场景下该问题尤为突出。保留详细日志 30 天,可供事故排查;聚合指标保留一年,可用于趋势分析和出具合规报表。高容量端点可采用采样策略:系统正常运行时每百条请求采集一份样本,出现异常时则切换为全量采集。
这种方法的适用场景
AI 治理应该是整合到现有的云安全中,而不是取代它。网络分段、身份管理、漏洞扫描和补丁管理仍然必不可少。变化之处在于受保护系统运行的速度和自主性。模型每秒做出数百万个决策,如果保护不当,不法分子能够通过推理 API 窃取整个数据库。
成熟的团队将合规治理视为面向内部用户的产品。他们构建工具,让安全部署流程比绕过治理的操作更简便,自动化处理重复的审核工作,并将 AI 监控数据接入现有运维仪表盘。这种产品化思维通过价值交付而非强制命令来推动采用。
实施路径遵循分阶段方法,循序渐进地建立能力。CASB 、服务网格和 API 网关创建了 AI 接触点清单,以客观数据替代对模型与接口调用分布的主观预估。在数据写入时完成分级标注并定期执行模型漂移扫描可保障所有数据对象均附带合规标签,后台作业可实时捕获检查遗漏的内容。
IAM 和 VPC 从基础设施层面拦截未授权数据访问,即便新增接口节点,也能阻止敏感数据流入模型。开发工具默认自动打上标签并绑定策略,让合规操作成为最高效操作,无需开发人员熟记各类治理规范。策略即代码引擎可定义针对模型、运行环境、数据留存时效及审批流程的复杂规则,同时通过标准 CI/CD 管道完成测试。
基于风险的审批工作流与现代交付周期保持同步。低风险部署自动放行,中等风险变更通过自动扫描校验,只有真正敏感的修改才需要人工审查。这种分级方法既可以防止审批队列成为瓶颈,又能对关键变更实施到位监管。
监控系统将治理违规事件升级为生产故障级告警。模型漂移、策略违规和可疑访问模式被展示在统一的仪表盘中,与延迟峰值和错误率等一同展示。这种一体化集成确保治理问题会立即得到关注,而不是积压在无人查阅的合规报告里。
总结
治理的目的是为了实现安全的 AI 大规模部署,而不是阻碍业务推进。行之有效的治理体系所需的工程规范从对 AI 使用模式的全面可见性开始。自动化负责处理重复性校验和执行任务,让人类可以专注于判断能够带来真正价值的细微决策。
这种方法将 AI 治理从最后一分钟临时核查变为交付管道的组成部分。虽然实现细节因云服务商和技术堆存在差异,但基本的模式是一样的:建立 AI 使用的可见性,系统地标记数据,通过平台能力执行基本控制,并利用策略即代码和全面遥测来实现长效治理。这种系统方法将无治理 AI 的混乱转变为可控的、可审计的迭代流程,同时兼顾创新需求与合规要求。
查看英文原文:https://www.infoq.com/articles/governing-ai-cloud-guide/





