

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 设置 Microsoft Entra 应用程序 ID 身份验证 OneDrive
<a name="kb-managed-onedrive-entra-setup"></a>

Microsoft Entra 应用程序 ID 身份验证 (`ENTRA_APP_ID`) 是 OneDrive 数据源的推荐身份验证方法。连接器使用应用程序的客户端 ID 和密钥通过 OAuth 2.0 客户端凭证（仅限应用程序）流程抓取内容，不涉及用户登录。这是唯一支持文档级访问控制 (ACL) 的身份验证方法。有关与替代`OAUTH2`方法的比较，请参见[身份验证方法](kb-managed-ds-onedrive.md#kb-managed-onedrive-auth-methods)。

**注意**  
只有在启用文档级访问控制时才需要证书。对于仅限内容的抓取，客户端 ID 和密钥是连接器所需的唯一凭据。这与数据源不同，在 SharePoint 数据源中，Microsoft Entra ID App-Only 身份验证始终需要证书。

**需要管理权限**  
此设置需要 Microsoft Entra ID 管理员（全局管理员或特权角色管理员）来注册应用程序、配置权限并授予管理员同意。下面的**安装步骤和角色**表列出了每个步骤所需的访问权限。

## 设置步骤和角色
<a name="kb-managed-onedrive-entra-roles"></a>

此过程同时涉及 Microsoft Entra ID AWS 管理员和管理员。根据组织中职责的划分方式，可以由一个人或几个人来完成这些步骤。证书步骤（步骤 4—6 和 8）仅在启用文档级访问控制时适用。使用下表确定每个步骤所需的访问权限。


**设置步骤和每个步骤所需的访问权限**  

| 步骤 | 你做什么 | 需要访问权限 | 
| --- | --- | --- | 
| 1. 注册应用程序 | 创建 Entra 应用程序注册并记录其客户端和租户 ID。 | Microsoft Entra ID 管理员（全局管理员或特权角色管理员） | 
| 2. 添加权限并授予同意 | 为您的配置分配应用程序权限并授予管理员同意。 | 微软 Entra ID 管理员 | 
| 3. 创建客户机密钥 | 为应用程序创建客户端密钥并记录其值。 | 微软 Entra ID 管理员 | 
| 4. 生成证书（仅限 ACL） | 使用 OpenSSL 创建自签名证书和 PKCS \#12 (.p12) 捆绑包。 | 任何拥有本地终端的人（需要 OpenSSL） | 
| 5. 将公共证书上传到 Entra（仅限 ACL） | 将公共证书添加到应用程序注册的密钥中。 | 微软 Entra ID 管理员 | 
| 6. 将证书上传到 Amazon S3（仅限 ACL） | 将.p12捆绑包存储在 Amazon S3 存储桶中。 | AWS 管理员（亚马逊 S3） | 
| 7. 创建密钥 | 将凭证存储在 AWS Secrets Manager 密钥中。 | AWS 管理员（Secrets Manager） | 
| 8. 授予服务角色对证书的访问权限（仅限 ACL） | 将 Amazon S3 读取权限添加到您的知识库服务角色。 | AWS 管理员 (IAM) | 

## 权限参考
<a name="kb-managed-onedrive-entra-permissions"></a>

分配与您的配置相匹配的应用程序权限。所有权限均为**应用程序**权限（非委托），并且每个权限都需要管理员同意。**对于仅限内容的抓取，连接器仅向 Microsoft Graph 进行身份验证。**启用文档级访问控制后，连接器还会向 **SharePoint**REST API 进行身份验证，以便在查询时验证访问权限，因为 for Business 由 OneDrive 提供支持。 SharePoint

**重要**  
在 Entra 门户中添加这些权限时，请选择**应用程序权限**选项卡，而不是**委派权限**。 Application-only 身份验证使用应用程序权限。

选择您的配置选项卡，查看要分配的确切权限。

------
#### [ Content only (no ACLs) ]


**仅限内容**  

| API | 权限 | 用途 | 
| --- | --- | --- | 
| Microsoft Graph | Files.Read.All | 读取用户云端硬盘中的文件。 | 
| Microsoft Graph | Sites.Read.All | 阅读支持用户 OneDrive 云端硬盘的网站。 | 
| Microsoft Graph | User.Read.All | 列举您抓取其驱动器的用户。 | 

------
#### [ With ACLs ]


**使用 ACL**  

| API | 权限 | 用途 | 
| --- | --- | --- | 
| Microsoft Graph | Files.Read.All | 读取用户云端硬盘中的文件。 | 
| Microsoft Graph | Sites.Read.All | 阅读支持用户 OneDrive 云端硬盘的网站。 | 
| Microsoft Graph | User.Read.All | 枚举用户并将其解析为文档级 ACL。 | 
| Microsoft Graph | GroupMember.Read.All | 解决文档级 ACL 的群组成员资格问题。 | 
| SharePoint | Sites.FullControl.All | 在查询时验证每个用户对文档的访问权限。 Sites.Read.All不足以进行此项检查。 | 

------

**注意**  
该 SharePoint `Sites.FullControl.All`权限授予连接器应用程序在租户中的站点上的广泛访问权限。仅将其授予此应用程序，并相应地保护该应用程序的凭证。

## 您在设置过程中收集的值
<a name="kb-managed-onedrive-entra-values"></a>

在完成这些步骤时，您可以创建或收集以下值。您可以在创建数据源时使用它们。有关更多信息，请参阅 [Connect OneDrive 数据源](kb-managed-ds-onedrive-connect.md)。


**值参考**  

| 值 | 创建于 | 用于 | 
| --- | --- | --- | 
| 应用程序（客户端）ID | 步骤 1 | 秘密 (clientId)。 | 
| 目录（租户）ID | 步骤 1 | 数据源tenantId。 | 
| 客户端密钥值 | 步骤 3 | 秘密 (clientSecret)。 | 
| 证书 — PKCS \#12 捆绑包 (.p12) 及其密码（仅限 ACL） | 步骤 4 | 捆绑包（证书加私钥）已上传到 Amazon S3（步骤 6）；密码存储在密钥中（certificatePassword）。 | 
| 证书-公共证书 (.cer)（仅限 ACL） | 步骤 4 | 同一份证书的公开部分，上传到 Entra 应用程序注册（步骤 5）。 | 
| Amazon S3 存储桶名称和密钥（仅限 ACL） | 步骤 6 | 数据源certificateS3Path。 | 
| 密钥 ARN | 步骤 7 | 数据源secretArn。 | 

## 第 1 步：在 Microsoft Entra ID 中注册应用程序
<a name="kb-managed-onedrive-entra-step1"></a>

1. 登录 [Microsoft Entra 管理中心](https://entra.microsoft.com/)。

1. 在左侧导航栏中，展开 **Entra ID**，然后选择**应用程序注册**。

1. 选择 “**新注册**”。

1. 在 “**名称**” 中，输入描述性名称，例如。`bedrock-onedrive-connector`

1. 对于**支持的帐户类型**，请选择 “**仅限此组织目录中的帐户（单租户）**”。

1. **将重定向 URI** 留空。不需要重定向 URI，因为应用程序使用的是客户端凭证流程，而不是交互式登录流程。

1. 选择**注册**。

1. 在应用程序**概述**页面上，记录**应用程序（客户端）ID** 和**目录（租户）ID**。稍后你需要两个。

## 第 2 步：添加 API 权限并授予管理员同意
<a name="kb-managed-onedrive-entra-step2"></a>

从中为您的配置添加权限[权限参考](#kb-managed-onedrive-entra-permissions)。

1. 在您的应用程序注册中，选择 **API 权限**，然后选择**添加权限**。

1. 选择 **Microsoft Graph**，然后选择**应用程序权限**。为您的配置搜索并选择每个 Microsoft Graph 权限，然后选择**添加权限**。

1. 如果您正在启用文档级访问控制，请再次选择 “**添加权限**”。选择 **SharePoint**（在 **Microsoft API** 下），然后选择 “**应用程序权限”**。选择`Sites.FullControl.All`，然后选择**添加权限**。

1. 在 **API 权限**页面上，选择 **[您的组织] 授予管理员同意**，然后确认。未经管理员同意，应用程序无法访问 OneDrive 数据。

## 步骤 3：创建客户端密钥
<a name="kb-managed-onedrive-entra-step3"></a>

OneDrive 抓取使用应用程序的客户端 ID 和密钥，因此纯内容源和 ACL-enabled 数据源都需要客户端密钥。启用文档级访问控制后，连接器使用客户端密钥获取用于解析租户 OneDrive 主机的 Microsoft Graph 令牌，并使用证书（来自步骤 4）获取用于访问检查的 SharePoint 令牌。

1. 在应用程序注册中，选择**证书和密钥**，然后选择**客户端密钥**，然后选择**新客户机密**。

1. 输入描述，选择到期时间，然后选择**添加**。

1. 立即记录秘密**值** ——它只显示一次。记录**值**，而不是**秘密 ID**。

## 步骤 4（仅限 ACL）：生成身份验证证书
<a name="kb-managed-onedrive-entra-step4"></a>

**注意**  
仅当您启用文档级访问控制时，此步骤以及步骤 5、6 和 8 才适用。要进行仅限内容的抓取，请跳至。[第 7 步：创建 Secrets Manager 密钥](#kb-managed-onedrive-entra-step7)

生成自签名证书并将其打包为 PKCS \#12 (`.p12`) 捆绑包。该捆绑包包含证书及其受密码保护的私钥。您将公共证书上传到 Entra（步骤 5），将`.p12`捆绑包上传到 Amazon S3（步骤 6）。选择操作系统的选项卡以查看命令。

**注意**  
Amazon Bedrock 从`.p12`捆绑包中读取私钥以签署身份验证断言，因此该捆绑包必须有密码保护。随机选择一个强度高的密码——你将其存储在秘密中，如`certificatePassword`步骤 7 所示。

------
#### [ Linux or macOS (OpenSSL) ]

**生成私钥和自签名证书**

```
openssl req -x509 -newkey rsa:2048 -keyout private_key.pem -out certificate.cer \
    -days 365 -nodes \
    -subj "/CN={{bedrock-onedrive-connector}}"
```

**Package 将证书和密钥打包为 PKCS \#12 (`.p12`) 捆绑包**

出现提示时，请输入强导出密码。为步骤 7 录制下来。

```
openssl pkcs12 -export -out certificate.p12 \
    -inkey private_key.pem -in certificate.cer
```

您现在有三个文件：私钥 (`private_key.pem`)、公共证书 (`certificate.cer`) 和捆绑包 (`certificate.p12`)。您在步骤 5 中将公共证书上传到 Entra，在步骤 6 中将`.p12`捆绑包上传到 Amazon S3。

------
#### [ Windows (PowerShell) ]

**生成自签名证书**

以下 PowerShell 命令生成有效期为一年 2048 位 RSA 自签名证书，并将其存储在当前用户的证书存储中。{{your-password}}替换为一个强的随机密码——你可以将其存储在秘密中，如`certificatePassword`步骤 7 所示。

```
$cert = New-SelfSignedCertificate `
    -Subject "CN={{bedrock-onedrive-connector}}" `
    -CertStoreLocation "Cert:\CurrentUser\My" `
    -KeyAlgorithm RSA `
    -KeyLength 2048 `
    -KeyExportPolicy Exportable `
    -NotAfter (Get-Date).AddYears(1)
```

**导出公共证书**

```
Export-Certificate -Cert $cert -FilePath certificate.cer -Type CERT
```

**导出 PKCS \#12 (`.p12`) 捆绑包**

```
$password = ConvertTo-SecureString -String "{{your-password}}" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath certificate.p12 -Password $password
```

您现在有两个文件：公共证书 (`certificate.cer`) 和捆绑包 (`certificate.p12`)。您在步骤 5 中将公共证书上传到 Entra，在步骤 6 中将`.p12`捆绑包上传到 Amazon S3。

------

**重要**  
将`.p12`捆绑包存储在 Amazon S3 中（不是`.pem`或`.cer`文件）。该捆绑包包含私钥，Amazon Bedrock 使用该私钥进行身份验证以 SharePoint 进行访问验证，因此请将其安全存放。 Document-level 访问控制需要`.p12`格式。

**注意**  
默认情况下，该证书的有效期为一年。证书过期会导致所有同步失败，因此请在证书到期之前轮换证书。要更改有效期，请调整`-days`选项 (openSSL) 或`-NotAfter`参数 (PowerShell)。有关旋转步骤，请参阅[轮换证书](kb-managed-ds-onedrive-troubleshooting.md#kb-managed-ds-onedrive-rotate-cert)。

## 步骤 5（仅限 ACL）：将公共证书上传到 Entra
<a name="kb-managed-onedrive-entra-step5"></a>

1. 在应用程序注册中，选择 “**证书和机密**”，然后选择 “**证书**” 选项卡。

1. 选择**上传证书**，然后选择您在步骤 4 中生成的`certificate.cer`文件（仅限公共证书，切勿将`.p12`捆绑包或私钥上传到 Entra）。

1. 选择**添加**。

## 第 6 步（仅限 ACL）：将证书上传到 Amazon S3
<a name="kb-managed-onedrive-entra-step6"></a>

将步骤 4 中的`.p12`捆绑包上传到知识库所在 AWS 区域的 Amazon S3 存储桶。记录存储桶名称和密钥——您可以将其用作数据源`certificateS3Path`。

```
aws s3api put-object \
  --bucket {{your-certificate-bucket}} \
  --key {{certs/certificate.p12}} \
  --body certificate.p12 \
  --server-side-encryption AES256
```

**注意**  
我们建议您在证书对象上启用服务器端加密，并将存储桶限制为需要它的委托人。捆绑包包含私钥。

## 第 7 步：创建 Secrets Manager 密钥
<a name="kb-managed-onedrive-entra-step7"></a>

将凭证存储在 AWS Secrets Manager 密钥中。对于 Microsoft Entra 应用程序 ID 身份验证，请包括以下键值对：
+ `clientId`（必填）— 步骤 1 中的应用程序（客户端）ID。
+ `clientSecret`（必填）— 步骤 3 中的客户机密值。
+ `certificatePassword`（仅限文档级访问控制，推荐）— 您在步骤 4 中为`.p12`捆绑包设置的密码。请参阅下面的注释。

**仅限内容（无文档级访问控制）**

```
{
    "clientId": "{{your-client-id}}",
    "clientSecret": "{{your-client-secret}}"
}
```

**使用文档级访问控制**

```
{
    "clientId": "{{your-client-id}}",
    "clientSecret": "{{your-client-secret}}",
    "certificatePassword": "{{your-certificate-password}}"
}
```

使用以下命令创建密钥 AWS Command Line Interface：

```
aws secretsmanager create-secret \
  --name {{bedrock-onedrive-creds}} \
  --secret-string file://secret.json
```

记录响应中的秘密 ARN。您可以将其用作数据源`secretArn`。

**注意**  
启用文档级访问控制后，请设置`certificatePassword`为在步骤 4 中创建`.p12`分发包时使用的密码。如果您省略此字段，Amazon Bedrock 将使用您的应用程序的客户端 ID 作为密码打开捆绑包，因此该捆绑包必须使用客户端 ID 作为其密码创建。我们建议您始终设置明确的高熵密码。

## 步骤 8（仅限 ACL）：授予服务角色对证书的访问权限
<a name="kb-managed-onedrive-entra-step8"></a>

您的知识库服务角色必须能够从 Amazon S3 读取证书对象。将以下语句添加到角色的权限策略中，将存储桶名称和密钥替换为您的值。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S3ListCertificateBucket",
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::{{your-certificate-bucket}}"],
            "Condition": {
                "StringEquals": { "aws:ResourceAccount": ["{{123456789012}}"] }
            }
        },
        {
            "Sid": "S3GetCertificate",
            "Effect": "Allow",
            "Action": ["s3:GetObject"],
            "Resource": [
                "arn:aws:s3:::{{your-certificate-bucket}}/{{certs/certificate.p12}}",
                "arn:aws:s3:::{{your-certificate-bucket}}/{{certs/certificate.p12}}.metadata.json"
            ],
            "Condition": {
                "StringEquals": { "aws:ResourceAccount": ["{{123456789012}}"] }
            }
        }
    ]
}
```

**注意**  
该策略还允许对证书旁边的可选`.metadata.json`文件进行读取权限。Amazon Bedrock 不需要此文件；包括权限可以防止出现访问错误（如果存在）。

**如果证书对象使用 AWS KMS 密钥加密**

中的上传命令[第 6 步（仅限 ACL）：将证书上传到 Amazon S3](#kb-managed-onedrive-entra-step6)使用 Amazon S3-managed 加密 (`AES256`)，无需额外权限。相反，如果您使用客户托管的 KMS 密钥 (SSE-KMS) 使用 Amazon S3 服务器端加密对证书对象进行加密，则服务角色还需要对该密钥的`kms:Decrypt`权限，并且密钥的策略必须允许该角色使用该密钥。使用 AWS 托管`aws/s3`密钥加密的对象不需要此额外授权。

```
{
    "Sid": "KmsDecryptCertificate",
    "Effect": "Allow",
    "Action": ["kms:Decrypt"],
    "Resource": ["arn:aws:kms:{{us-west-2}}:{{123456789012}}:key/{{your-key-id}}"]
}
```

有关知识库服务角色权限的完整集合，请参阅[访问数据来源的权限](kb-permissions.md#kb-permissions-access-ds)。

## 后续步骤
<a name="kb-managed-onedrive-entra-next"></a>

现在，您拥有了创建数据源所需的凭证：秘密 ARN、您的租户 ID 以及（用于文档级访问控制）证书的 Amazon S3 位置。要使用 AWS 管理控制台 或 API 创建 OneDrive 数据源，请参阅[Connect OneDrive 数据源](kb-managed-ds-onedrive-connect.md)。