指南 3个标注团队操作手册:提升标注速度与质量

安全版 Label Studio

Label Studio 提供多种方式来保障您的数据和部署架构的安全访问。

所有应用程序组件交互均使用TLS协议进行加密。

Label Studio通过强制使用HTTPS和安全cookie来建立与Web应用程序的安全连接。

如果您在生产环境中运行开源版本,请限制对Label Studio服务器的访问。通过仅在服务器上打开所需端口来限制对服务器本身的访问。

确保用户安全访问Label Studio

确保用户安全访问Label Studio,以保护数据完整性,并仅允许拥有系统访问权限的人员执行更改。

每个用户必须创建一个至少8个字符的密码账户,以便跟踪谁有权访问Label Studio以及他们执行了哪些操作。

您可以限制注册,仅允许通过注册页面链接访问的用户进行注册,并且可以重置注册页面的邀请链接。详情请参阅为Label Studio设置用户账户

Label Studio的安全API访问

访问REST API受用户角色限制,并且需要特定于用户账户的访问令牌。访问令牌可以随时通过Label Studio界面或使用API进行重置。

为生产环境启用SSRF防护

将Label Studio部署到生产环境时,请将SSRF_PROTECTION_ENABLED环境变量设置为true

默认情况下禁用此变量以支持在本地环境中处理数据的用户。但在生产环境中使用时应当启用。

Label Studio 中的数据安全访问

Label Studio中的数据存储在一个或两个位置,具体取决于您的部署配置。

  • 项目设置和配置详情存储在Label Studio的内部数据库中。
  • 输入数据(文本、图像、音频文件)由外部数据存储托管,并通过URI链接提供给Label Studio。数据不直接存储在Label Studio中,内容仅在客户端检索。
  • 项目标注数据存储在内部数据库中,也可以选择存储在本地文件目录、Redis数据库,或亚马逊云服务(AWS)、谷歌云平台(GCP)、微软Azure等云存储桶中。

提示

AWS和GCP存储提供多种高级安全选项,包括:

安全数据库访问

Label Studio 不允许从应用程序直接访问内部数据库,以防止SQL注入攻击和其他数据泄露尝试。

相反,该应用使用URI来访问数据库中存储的数据。这些URI只能通过Label Studio标注界面和API访问,因为使用这些URI检索数据的请求会通过基本认证头信息进行验证和代理。

所有通过REST API公开的特定对象属性都会被添加到允许列表中。API端点只能通过特定的HTTP动词访问,并且必须由实现了适当跨域资源共享(CORS)策略的基于浏览器的客户端访问。API令牌是用户专属的,可以随时重置。

PostgreSQL数据库已启用SSL模式,并要求有效的证书。

安全访问云存储

Label Studio中的每个项目都可以链接到各种云存储选项,如AWS S3、Google云存储等。用户主要通过Label Studio生成的预签名URL从云存储访问文件。您可以为每个项目配置多个具有不同凭证的云存储连接来管理数据访问。了解如何设置云存储设置

整合工作区、项目、用户和角色。这种方法有助于有效配置和保护云存储访问。

源存储逻辑与安全性

Label Studio的云存储集成执行两项关键操作:

  • 任务同步与导入
  • 媒体文件服务

以下内容将从安全角度对两者进行说明。

任务同步与导入

将存储连接到项目后,您有多种方式将任务加载到项目中。根据所选方式,您需要提供相应的权限:

  • 同步媒体文件(需要LIST权限):当启用将每个存储桶对象视为源文件时,Storage Sync会根据存储中的文件列表自动创建Label Studio任务。Label Studio不会读取文件内容;它只是引用这些文件(例如{"image": "s3://bucket/1.jpg"})。

  • 同步JSON任务文件(需要LISTGET权限):当启用"将每个存储桶对象视为源文件"时,存储同步会从您的存储桶中的JSON文件读取Label Studio任务,并将整个JSON内容加载到Label Studio数据库中。

  • 不同步 (需要none权限): 您可以手动导入包含Label Studio任务的JSON文件,并在任务内部引用存储URI(例如{"image": "s3://bucket/1.jpg"})。

媒体文件服务

Label Studio任务创建后,用户可以在浏览器中查看和编辑任务。要访问存储桶中的媒体文件,需执行以下步骤:

  1. 预签名URL生成: Label Studio后端会为存储桶中的文件生成预签名URL。此步骤需要GET权限来生成预签名URL,但Label Studio不会下载您的数据。

  2. 用户浏览器下载: 当查看或标注任务时,用户的浏览器会下载并显示媒体文件。这要求用户的浏览器能够直接访问预签名URL。

您VPC背后的源存储

为确保您的数据在VPC后实现最高级别的安全性和隔离性,仅允许内部网络中的Label Studio后端和用户访问。为此,您可以使用以下技术——尤其适用于Label Studio SaaS(云端版,app.humansignal.com):

  1. 为您的存储设置IP限制,以允许Label Studio执行任务同步并生成用于媒体文件服务的预签名URL。IP限制通过确保只有受信任的网络可以访问您的存储来增强安全性。需要GET(S3的s3:GetObject)和LIST(S3的s3:ListBucket)权限。

  2. 在存储与用户浏览器之间建立安全连接

    • 配置一个VPC私有终端节点,并将VPN流量路由至该节点,这样用户的浏览器就能仅通过您的虚拟专用网络(VPN)安全访问S3存储桶。
    • 或者将您的存储访问限制为特定IP或VPC。

配置示例:

此图展示了如何通过您的VPC和IP限制,在Label Studio中安全配置云端存储源

Label Studio + Cloud Storage IP Restriction Label Studio + Cloud Storage VPC

安全访问Redis存储

如果您使用Redis作为数据和注释的外部存储数据库,该设置支持TLS/SSL协议,并要求Label Studio客户端使用有效证书对数据库进行身份验证。

Label Studio 收集的信息

Label Studio会收集使用统计数据,包括页面访问次数、标注数量以及您在配置中使用的数据类型。我们收集的这些信息有助于改进Label Studio中的数据标注体验,并帮助我们规划未来需要支持的数据类型和标注配置。

您可以通过将环境变量COLLECT_ANALYTICS设置为False来禁用数据收集。

将自签名证书添加到受信任的根证书存储

  1. 将您的自签名证书作为卷挂载到 app 容器中:
volumes:
  - ./my.cert:/tmp/my.cert:ro
  1. 添加名为CUSTOM_CA_CERTS的环境变量,以逗号分隔方式列出所有需要添加到信任存储中的证书:
CUSTOM_CA_CERTS=/tmp/my.cert
  1. 将您的自签名证书作为k8s密钥上传。 将my.cert作为名为test-my-root-cert的密钥上传:
kubectl create secret generic test-my-root-cert --from-file=file=my.cert
  1. 将卷添加到您的values.yaml文件中,并在.global.customCaCerts中引用它们:
global:
  customCaCerts:
   - /opt/heartex/secrets/ca_certs/file/file

app:
  extraVolumes:
    - name: foo
      secret:
        secretName: test-my-root-cert
  extraVolumeMounts:
    - name: foo
      mountPath: "/opt/heartex/secrets/ca_certs/file"
      readOnly: true

rqworker:
  extraVolumes:
    - name: foo
      secret:
        secretName: test-my-root-cert
  extraVolumeMounts:
    - name: foo
      mountPath: "/opt/heartex/secrets/ca_certs/file"
      readOnly: true

将自签名证书添加到S3存储的受信任根证书存储区

Boto库用于连接云存储S3。AWS_CA_BUNDLE必须设置为环境变量。

  1. 将您的自签名证书作为卷挂载到app容器中:(必须是.pem文件类型)
volumes:
  - ./ca.pem:/tmp/ca.pem:ro
  1. 添加名为AWS_CA_BUNDLE的环境变量,使其被boto库信任。
AWS_CA_BUNDLE=/tmp/ca.pem