Skip to content
LlamaParse 文档版本 跟随上游 源快照 d4c35f85 更新于 2026-10-17

连接器把文件从 Google Drive、SharePoint、S3 与 Confluence 同步进 project 目录。它们如何工作见连接器。在自托管部署上,你要提供三样东西:

  1. 加密密钥。 LlamaCloud 会加密它保存的每一份凭据。没有密钥时它拒绝存储凭据,创建 connection 就会失败。
  2. 要提供哪些连接类型。 例如只有 S3,或者 S3 加上 Google Drive 与 SharePoint 的登录式连接。
  3. OAuth 客户端应用,仅当你提供登录式(“Sign in with Google” 或 “Sign in with Microsoft”)连接时才需要。这些应用由你自己向 Google 或 Microsoft 注册,再通过 API 把它们的 client ID 与 secret 交给 LlamaCloud。

使用密钥的连接(S3 access key、Google 服务账号密钥、SharePoint 应用注册、Confluence API token)只需要第 1、2 两步。

values.yaml 里的连接器设置

chart 0.9.3 及之后把连接器配置在 config.connectors 下。chart 会把这些设置传给所有会存取凭据的工作负载:API 与 Temporal worker。

config:
  connectors:
    # Which connection types to offer (see below). This is the default.
    enabledAuthTypes: "google_drive:oauth,google_drive:service_account,sharepoint:oauth,sharepoint:service_account,s3:service_account"
    # Where Google or Microsoft sends users back after sign-in.
    # Defaults to https://<ingress.host>/credential-brokers/return.
    oauthReturnUrl: ""
    # Encrypt with AWS KMS...
    credentialsKmsKeyArn: ""
    tokenVaultKmsKeyArn: ""
    # ...or with master keys, and the sign-in seal key, from a Secret you create.
    secret: llamacloud-connector-secrets

请在安装或升级之前先把这个 Secret 建好。chart 绝不会代你生成这些密钥:

终端窗口

kubectl create secret generic llamacloud-connector-secrets \
  --from-literal=CONNECTOR_AUTH_SEAL_KEY="$(openssl rand -base64 32)" \
  --from-literal=CONNECTOR_MASTER_KEY="$(openssl rand -base64 32)" \
  --from-literal=TOKEN_VAULT_MASTER_KEY="$(openssl rand -base64 32)"

当你为对应项改设了 KMS key ARN 时,就可以不设 CONNECTOR_MASTER_KEY 或 TOKEN_VAULT_MASTER_KEY。下面逐项说明。

连接器的加密密钥

LlamaCloud 保存两类连接器机密,每一类都用自己独立的密钥加密:

机密举例KMS 密钥或放在 Secret 里的主密钥
connection 自己持有的凭据S3 access key、Google 服务账号密钥、SharePoint client secret、Confluence API tokencredentialsKmsKeyArnCONNECTOR_MASTER_KEY
OAuth 客户端应用,以及登录式连接拿到的 token你的 Google 与 Entra client secret、用户的 refresh tokentokenVaultKmsKeyArnTOKEN_VAULT_MASTER_KEY

每一类都二选一:

  • 一把 KMS 密钥:填密钥 ARN 或别名 ARN,且要带地域,例如 arn:aws:kms:us-east-1:123456789012:alias/llamacloud-connector-credentials。API 与 Temporal worker pod 的 IAM 角色需要对它有 kms:GenerateDataKey、kms:Decrypt 与 kms:DescribeKey 权限。若 KMS 密钥与主密钥都设了,以 KMS 密钥为准。
  • 一把主密钥:放在 Secret 里的一把随机密钥,用于没有 AWS KMS 的部署。用 openssl rand -base64 32 生成。

密钥的规则:

  • 每一类用不同的密钥。 不要把 CONNECTOR_MASTER_KEY 复用成 TOKEN_VAULT_MASTER_KEY,也不要一把 KMS 密钥两用。
  • 一旦已有 connection,就绝不更改或丢失密钥。 已存的凭据只能用加密它的那把密钥解开;密钥变了,用过它的每一个 connection 都必须删掉重建。

没有密钥时,创建基于密钥的 connection 会返回 503 Credentials could not be stored securely,注册 OAuth 客户端应用则返回 500 Token vault encryption is not available。

CONNECTOR_AUTH_SEAL_KEY 是第三把独立的密钥,用于保护登录过程中来回传递的短期 state。它必须是 32 随机字节并做 base64 编码(openssl rand -base64 32)。没有它就创建不了登录式连接;基于密钥的连接不需要它。

选择要提供哪些连接类型

config.connectors.enabledAuthTypes 是一个逗号分隔的 integration:auth_type 列表。API 会拒绝任何未列出的组合并返回 422。设成 "" 即整体关闭连接器。

组合连接默认是否包含
s3:service_account用 access key 密钥对的 S3是
google_drive:service_account用服务账号密钥文件的 Google Drive是
google_drive:oauthGoogle Drive,用 Google 登录是
sharepoint:service_account用 Entra 应用注册与 client secret 的 SharePoint是
sharepoint:oauthSharePoint,用 Microsoft 登录是
confluence:api_key用 API token 或个人访问令牌的 Confluence否
confluence:oauthConfluence Cloud,用 Atlassian 登录否

Add connection 对话框里的那些卡片是在前端镜像构建时就固定的,并与默认列表一致。如果你收窄了列表(例如只留 s3:service_account),其他卡片仍会显示,但被使用时会因 422 失败。而不在默认列表里的连接类型,根本无法从对话框添加 —— 只要你把它列进配置,API 就接受。

对于只用 S3 的部署,s3:service_account 加上 CONNECTOR_MASTER_KEY(或 credentialsKmsKeyArn)就够了。本页其余部分可以跳过。

启用登录式连接

登录式连接走你自己部署内的 token vault,使用你在下面注册的 OAuth 客户端应用。除 token vault 密钥与 CONNECTOR_AUTH_SEAL_KEY 之外,它们还需要一个回调 URI:

https://<your-llamacloud-host>/credential-brokers/return

<your-llamacloud-host> 就是你的 ingress.host,即你打开界面用的那个域名。chart 会据 ingress.host 替你拼出这个 URL。只有当用户访问 LlamaCloud 的地址与之不同(例如走你自己的 ingress)时,才需要设 config.connectors.oauthReturnUrl。

这个 URI 必须与你向 Google 和 Microsoft 注册的逐字符一致:同样的协议、同样的主机、结尾不带斜杠。LlamaCloud 会在发起登录时以及换取 code 时各发送一次它,任何不一致都会被提供方拒绝。

为 Google Drive 创建 Google OAuth 客户端

请在你组织掌控的一个 Google Cloud project 里完成这些操作。

  1. 在 Google Cloud 控制台打开 APIs & Services → Library,启用 Google Drive API 与 Google Picker API。

  2. 打开 Google Auth Platform → Branding(即 OAuth 同意屏幕)并填写。在 Audience 下选择:

    • 只有你 Google Workspace 内的账号需要连接时选 Internal。这是最省事的选择,Google 不会审查 Internal 应用。
    • 还需要其他域的账号连接时选 External。drive.readonly 属于受限 scope,因此 External 应用必须通过 Google 的验证,你测试用户之外的人才能使用它。
  3. 在 Data Access 下加入这些 scope:

    • openid
    • .../auth/userinfo.email
    • .../auth/userinfo.profile
    • https://www.googleapis.com/auth/drive.readonly
  4. 在 Clients 下点击 Create client,选择 Web application,并添加一个 Authorized redirect URI:https://<your-llamacloud-host>/credential-brokers/return。

  5. 复制 Client ID 与 Client secret。

LlamaCloud 始终会申请 offline access,因此每个 connection 都会拿到一个 refresh token,无需用户再次登录就能持续同步。

为 SharePoint 登录创建 Microsoft Entra 应用

这个应用是给 SharePoint(用 Microsoft 登录)连接用的。它与 SharePoint Keys 连接所用的应用注册不是一回事 —— 后者需要的是 application 权限,见 SharePoint 连接器。

  1. 在 Microsoft Entra 管理中心 里,进入 App registrations → New registration。

  2. 在 Supported account types 下选择 Accounts in any organizational directory (multitenant)。LlamaCloud 通过 Microsoft 的 organizations 端点让用户登录,而单租户应用在该端点上会被拒绝。

  3. 在 Redirect URI 下选择 Web 平台,填入 https://<your-llamacloud-host>/credential-brokers/return。

  4. 在 API permissions → Add a permission → Microsoft Graph → Delegated permissions 下,把下面表里的每一个 scope 都加上。这正是 LlamaCloud 每次用户登录时申请的完整列表,也就是你要为登记进 token vault 的那个应用所批准的 scope 集合。少加一个,登录就会失败。

    ScopeLlamaCloud 为何要它
    offline_access拿到 refresh token,使 connection 无需用户重新登录就能持续同步
    openid, profile, email识别用户及其租户
    User.Read读取已登录用户的个人资料
    Sites.Read.All读取该用户能打开的 SharePoint 站点、文档库与文件
    Sites.FullControl.All读取每个文件的访问者,SharePoint 权限同步需要它,并能在不做完整重同步的情况下察觉文件夹被共享或取消共享
  5. 为了让用户能用 Microsoft 的文件选择器浏览文件夹,还要加上 SharePoint → Delegated permissions → AllSites.Read。没有它选择器打不开。用户仍可以创建文件夹,但只能靠填写 ID。

  6. 为你的租户点击 Grant admin consent。Sites.Read.All 与 Sites.FullControl.All 在多数租户里都需要管理员同意,提前做掉可省去每个用户各自去申请。

  7. 在 Certificates & secrets 下创建一个 client secret。复制的是它的 Value,不是 Secret ID,并记下它的过期日期。

  8. 从 Overview 复制 Application (client) ID。

以上全部是 delegated 权限。这个 connection 只能读到已登录用户本人能打开的内容。

通过 API 登记 OAuth 客户端应用

用 POST /api/v2/internal/token-vault/apps 把每个应用的 client ID 与 secret 交给 LlamaCloud。secret 会用 token vault 密钥加密,且永不回传。每个应用只作用于一个层级:

tenant_typetenant_id谁能登记作用于
global省略全局管理员整个部署里的所有 project
organization组织 ID组织管理员该组织下的 project
projectproject IDproject 管理员仅该 project

在多数部署里,每个提供方登记一个 global 应用就足够了。调用该 API 时,请使用在你所要登记的层级上拥有管理员角色的账号的 API key:

终端窗口

LLAMACLOUD="https://llamacloud.example.com"

# Google Drive
curl -sS -X POST "$LLAMACLOUD/api/v2/internal/token-vault/apps" \
  -H "Authorization: Bearer $LLAMA_CLOUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "integration": "google_drive",
    "tenant_type": "global",
    "client_id": "'"$GOOGLE_CLIENT_ID"'",
    "client_secret": "'"$GOOGLE_CLIENT_SECRET"'"
  }'

# SharePoint (set expires_at to the client secret's expiry)
curl -sS -X POST "$LLAMACLOUD/api/v2/internal/token-vault/apps" \
  -H "Authorization: Bearer $LLAMA_CLOUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "integration": "sharepoint",
    "tenant_type": "global",
    "client_id": "'"$ENTRA_CLIENT_ID"'",
    "client_secret": "'"$ENTRA_CLIENT_SECRET"'",
    "expires_at": "2027-09-30T00:00:00Z"
  }'

响应会回显 client_id 与应用自身的 id,但绝不会回显 secret。每个 integration 的 OAuth scope 是固定的,因此你不必提交它们。

integration 接受 google_drive、sharepoint 与 confluence。对于 Confluence,用同样的方式注册一个 Atlassian OAuth 2.0 (3LO) 应用,并把它的回调 URL 设为同一个 redirect URI。

管理已登记的 OAuth 应用

请求作用
GET /api/v2/internal/token-vault/apps?tenant_type=global列出某一层级下的应用(organization 或 project 要再加 &tenant_id=…)。可用 integration、is_enabled、is_expired 过滤。
PATCH /api/v2/internal/token-vault/apps/{app_id} with {"enabled": false}不再把该应用提供给新的 connection。已有的 connection 继续可用。
DELETE /api/v2/internal/token-vault/apps/{app_id}删除该应用。若仍有 connection 在用它则返回 409。

应用不能被编辑。要轮换 client secret,就把新 secret 登记为第二个应用、停用旧的那个,并在没有任何 connection 使用它之后再删除。越过其 expires_at 之后,该应用不再被提供给新的 connection。

同步 SharePoint 的文件权限

SharePoint 同步还可以读取每个文件与文件夹的访问者,并把它以 allowed_* 元数据写到文件上,供你在检索时按此过滤。它默认关闭,因为读取访问权限意味着要为每个文件额外调一次 Graph。

按 SharePoint 的每种连接类型分别开启,使用形如 <INTEGRATION>__<AUTH_TYPE>__SYNC_PERMISSIONS 的环境变量:

变量连接
SHAREPOINT__OAUTH__SYNC_PERMISSIONSSharePoint,用 Microsoft 登录
SHAREPOINT__SERVICE_ACCOUNT__SYNC_PERMISSIONSSharePoint Keys(Entra 应用注册)

后端与 Temporal worker 都要设置它。worker 执行同步并决定是否读取访问权限;后端在创建时校验文件夹用的是同一个设置。只配了其中一个,两边就会不一致。

backend:
  extraEnvVariables:
    - name: SHAREPOINT__OAUTH__SYNC_PERMISSIONS
      value: "true"

temporalWorkloads:
  workers:
    temporal-jobs-worker:
      extraEnvVariables:
        - name: SHAREPOINT__OAUTH__SYNC_PERMISSIONS
          value: "true"

该设置在 pod 启动时读取,因此从 helm upgrade 的那次滚动更新起生效。

这个 connection 还需要 Sites.FullControl.All:

  • 登录式连接:已包含在上面那个 Entra 应用的 scope 列表里。请确认它已被添加并在应用上完成管理员同意。
  • SharePoint Keys 连接:需要带管理员同意的 application 权限,见 SharePoint 连接器。如果应用注册里没有它,文件仍会同步但不带访问元数据,且 worker 会记一条 SharePoint permission sync is on, but the app registration lacks the role it needs。

此后每个同步过来的文件都会带上这些元数据键,按有权访问的主体种类各一个列表:

键内容
allowed_user_ids, allowed_user_display_namesEntra 用户
allowed_group_ids, allowed_group_display_namesEntra 组
allowed_siteUser_ids, allowed_siteUser_display_namesSharePoint 站点用户
allowed_siteGroup_ids, allowed_siteGroup_display_namesSharePoint 站点组
allowed_audiences拿到链接即可访问时为 public,组织内所有人可见时为 domain

某类主体为空时就没有对应的键。完全没有任何 allowed_* 键,意味着该文件的访问权限从未被读取过。ID 列表与显示名列表是分别排序的,因此同一位置上的名字并不属于同一位置上的 ID。这些键名与 legacy SharePoint 数据源所写入的一致,所以为它写好的过滤器仍然可用。

自托管连接器的排障

症状该检查什么
503 Credentials could not be stored securely when adding a key-based connectionconfig.connectors.secret 里 credentialsKmsKeyArn 与 CONNECTOR_MASTER_KEY 都没设。
500 Token vault encryption is not available when registering an appconfig.connectors.secret 里 tokenVaultKmsKeyArn 与 TOKEN_VAULT_MASTER_KEY 都没设。
”No enabled google_drive app is configured for this tenant” at sign-in在能覆盖该 project 的层级上没有为该 integration 登记应用,或它被停用、或已越过 expires_at。
Google: redirect_uri_mismatch; Microsoft: AADSTS50011应用上登记的 redirect URI 与 https://<ingress.host>/credential-brokers/return(或 config.connectors.oauthReturnUrl)不完全一致。
Microsoft: AADSTS50194该 Entra 应用是单租户的。把 Supported account types 改为多租户。
422 naming an integration and auth type该组合不在 config.connectors.enabledAuthTypes 里。
SharePoint files sync without allowed_* metadata后端与 temporal-jobs-worker 没有都设 SHAREPOINT__<AUTH_TYPE>__SYNC_PERMISSIONS,或该 connection 缺 Sites.FullControl.All。见同步 SharePoint 的文件权限。
Syncs fail with an error naming a SHAREPOINT__… variableauth type 之后那一段并不是连接器的设置项,通常是拼写错误。LlamaCloud 会显式报错而不是忽略它。
Syncs fail with decryption errors after a redeploySecret 里的密钥或 KMS 密钥 ARN 被改过。请恢复原值。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。