

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

# 设置服务凭证
<a name="sharepoint-kb-admin-config"></a>

在 Amazon Quick 中创建知识库之前，请在 Microsoft Entra ID 中 AWS 完成以下配置步骤。您可以创建 KMS 签名密钥、生成证书、在 Entra 中注册应用程序，然后授予 Amazon Quick 使用该密钥的权限。

此设置涉及多个系统，可能需要组织中不同管理员之间的协调。下表汇总了每个步骤以及完成该步骤所需的角色。


**设置步骤和角色**  

| 步骤 | 你在做什么 | 需要角色 | 
| --- | --- | --- | 
| 1. KMS 密钥 | 在 KMS 中创建非对称签名密 AWS 钥。 | AWS 管理员（KMS 和 IAM 控制台访问权限） | 
| 2. 证书 | 使用 KMS 公钥生成自签名证书。 | 与步骤 1 相同（需要AWS CLI 和 OpenSSL） | 
| 3. 进入应用程序 | 在 Microsoft Entra 中注册应用程序，分配 API 权限，然后上传证书。 | 微软 365 全球管理员或特权角色管理员 | 
| 3b。 Sites.Selected （可选） | 创建临时管理应用程序并通过 Microsoft Graph API 授予每个站点的权限。 | 微软 365 全球管理员（与步骤 3 相同） | 
| 4. KMS 密钥访问权限 | 向 Amazon Quick 授予使用 KMS 密钥进行签名的权限。 | Amazon Quick 管理员（管理员专业版） | 
| 5. 创建 KB | 使用前面步骤中的凭证在 Amazon Quick 中创建知识库。 | 任何 Amazon Quick 用户（作者专业版或管理员专业版） | 

**提示**  
在许多组织中，一个人同时拥有两者 AWS 兼有 Microsoft 365 管理员访问权限即可完成所有步骤。如果职责按团队分配，请共享此表格以协调设置。

## 先决条件
<a name="sharepoint-kb-admin-config-prerequisites"></a>

开始之前，请确保您拥有：
+ 一个拥有处于活动状态的 Amazon Quick 实例的 AWS 账户。
+ 访问 AWS KMS 控制台（用于创建签名密钥）。
+ Amazon Quick 管理员访问权限（Admin Pro 角色），用于授予 KMS 密钥权限。
+ 微软 365 租户在 SharePoint 线。
+ 使用 Microsoft Entra ID 访问全局管理员或特权角色管理员。
+ OpenSSL 3.0 或更高版本并在本地安装了 AWS CLI。
+ 该 AWS 账户和 Amazon Quick 实例必须位于同一区域。

## Permissions
<a name="sharepoint-kb-admin-config-permissions"></a>

您分配的权限取决于两个选择：
+ 是否计划启用文档级访问控制（ACL 抓取）。
+ 是要授予对所有 SharePoint 网站的访问权限还是仅授予对特定网站的访问权限。

### 选择您的权限范围
<a name="sharepoint-kb-admin-config-permission-scope"></a>

默认情况下，Entra 应用程序注册使用`Sites.Read.All`或`Sites.FullControl.All`，后者授予对租户中所有 SharePoint 网站的访问权限。如果您的组织需要最低权限访问权限，则可以改用`Sites.Selected`。使用后`Sites.Selected`，该应用程序只能访问您明确授予权限的网站。


**权限范围比较**  

| Scope | 访问 | 其他步骤 | 
| --- | --- | --- | 
| 所有站点（默认） | 应用程序可以读取租户中的所有 SharePoint 站点。 | — | 
| Sites.Selected | 应用程序只能访问您明确授权的网站。 | 每个站点都需要一个临时管理应用程序和一个 Microsoft Graph API 调用。请参阅[步骤 3b：授予站点级权限（仅限）Sites.Selected](#sharepoint-kb-admin-sites-selected)。 | 

**注意**  
如果您使用`Sites.Selected`，则必须单独授予每个站点的访问权限。将来添加到知识库中的任何新网站也需要单独授予权限。

**所有网站 — 仅限内容（没有 ACL）**


**Content-only 权限**  

| API | 权限 | Type | 
| --- | --- | --- | 
| Microsoft Graph | Sites.Read.All | 应用程序 | 
| SharePoint 休息 | Sites.Read.All | 应用程序 | 

**所有站点-具有 ACL 爬行功能**


**ACL 搜寻权限**  

| API | 权限 | Type | 
| --- | --- | --- | 
| Microsoft Graph | Sites.Read.All | 应用程序 | 
| Microsoft Graph | User.Read.All | 应用程序 | 
| Microsoft Graph | GroupMember.Read.All | 应用程序 | 
| SharePoint 休息 | Sites.FullControl.All | 应用程序 | 

**重要**  
选择前面表格中的所有站点权限或下表中的`Sites.Selected`权限。不要将两者合并。如果您不确定，请从所有站点开始。如果需要，您可以`Sites.Selected`稍后再创建一个新的 Entra 应用程序注册。

**Sites.Selected — 仅限内容（没有 ACL）**


**Sites.Selected 仅限内容的权限**  

| API | 权限 | Type | 
| --- | --- | --- | 
| Microsoft Graph | Sites.Selected | 应用程序 | 
| SharePoint 休息 | Sites.Selected | 应用程序 | 

**Sites.Selected — 使用 ACL 爬行**


**Sites.Selected ACL 搜寻权限**  

| API | 权限 | Type | 
| --- | --- | --- | 
| Microsoft Graph | Sites.Selected | 应用程序 | 
| Microsoft Graph | User.Read.All | 应用程序 | 
| Microsoft Graph | GroupMember.Read.All | 应用程序 | 
| SharePoint 休息 | Sites.Selected | 应用程序 | 

**注意**  
OneNote 管理员管理的`Notes.Read.All`设置不支持抓取 ()。微软于 2025 年 3 月 31 日停用了 OneNote API 的仅限应用程序的代币。[User-managed 设置](sharepoint-kb-user-managed.md)用于 OneNote 内容。

## 设置期间收集的值
<a name="sharepoint-kb-admin-config-values"></a>

下表汇总了您在设置过程中创建或收集的值以及使用这些值的位置。


**值参考**  

| 值 | 在步骤中创建 | 在步骤中使用 | 
| --- | --- | --- | 
| KMS 密钥 ARN | 1 (千米) | 2（证书）、4（IAM）、快速设置 | 
| 证书文件 (certificate.cer) | 2（证书） | 3（上传入口） | 
| 证书指纹 (base64url) | 2（证书） | 快速设置 | 
| 应用程序（客户端）ID | 3 (Entra) | 快速设置 | 
| 目录（租户）ID | 3 (Entra) | 快速设置 | 
| SharePoint 域名网址 | 你的 M365 租户 | 快速设置 | 

## 步骤 1：创建 AWS KMS 非对称签名密钥
<a name="sharepoint-kb-admin-step1-kms"></a>

使用微软 Entra ID 进行身份验证时，Amazon Quick 使用 AWS KMS 非对称密钥签署 OAuth 断言。私钥永远不会离开 KMS。只有公钥会被导出并嵌入到上传到您的 Entra 应用程序注册的证书中。

### 创建 KMS 密钥
<a name="sharepoint-kb-admin-kms-create"></a>

1. 打开 [AWS KMS 控制台](https://console.aws.amazon.com/kms)。

1. 在左侧导航中，选择**客户管理的密钥**。

1. 选择**创建密钥**。

### 配置密钥
<a name="sharepoint-kb-admin-kms-configure"></a>

在**配置密钥**页面上，设置以下值：


**KMS 密钥配置**  

| 设置 | 值 | 
| --- | --- | 
| 密钥类型 | 非对称 | 
|  密钥用法 | 签名和验证 | 
|  密钥规范 | RSA\_2048 | 
|  密钥材料源 | KMS（推荐） | 
| 区域性 | Single-Region 密钥（默认）。 Multi-Region 不支持密钥。 | 

### 添加标签
<a name="sharepoint-kb-admin-kms-labels"></a>

在**添加标签**页面上，输入密钥的别名。例如：`quick-sharepoint-service-auth`。

**注意**  
以下页面上的密钥管理员和密钥使用权限是可选的。对于此设置，默认值就足够了。在步骤 4 中，您分别授予 Amazon Quick 访问密钥的权限。

选择 “**跳过查看**”，然后选择 “**完成**” 创建密钥。

### 记录密钥 ARN
<a name="sharepoint-kb-admin-kms-arn"></a>

创建密钥后，打开密钥详情页面并记录**密钥 ARN**。ARN 有以下格式：

```
arn:aws:kms:us-west-2:123456789012:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

在步骤 2、4 以及在 Quick 中创建知识库时，你需要这个值。

## 步骤 2：生成自签名证书
<a name="sharepoint-kb-admin-step2-certificate"></a>

Microsoft Entra ID 需要 X.509 证书才能验证签名的断言。由于 KMS 私钥永远不会离开 AWS KMS，因此您不能将其直接与 OpenSSL 一起使用。相反，您可以生成临时的本地 key pair 并创建证书签名请求。然后，使用 OpenSSL `-force_pubkey` 选项将 KMS 公钥注入到最终证书中。结果是一个自签名证书，其公钥与 KMS key pair 匹配。

### 先决条件
<a name="sharepoint-kb-admin-cert-prereqs"></a>
+ AWS 已安装并配置 CLI。
+ OpenSSL 3.0 或更高版本。
+ 步骤 1 中的 KMS 密钥 ARN。

### 生成证书
<a name="sharepoint-kb-admin-cert-generate"></a>

在终端中运行以下命令。用您自己的{{placeholder}}值替换这些值。

**验证 OpenSSL 版本**

```
openssl version
```

确认输出显示版本 3.0 或更高版本。

**导出 KMS 公钥**

```
aws kms get-public-key \
    --key-id {{KMS_KEY_ARN}} \
    --region {{REGION}} \
    --output text \
    --query PublicKey | base64 --decode > public_key.der
```

**注意**  
在 macOS 上，`base64 -D`根据你的 shell 环境使用`base64 --decode`或。

**将公钥转换为 PEM 格式**

```
openssl rsa -pubin -inform DER -in public_key.der -outform PEM -out kms_public_key.pem
```

**生成临时本地密钥对**

```
openssl genrsa -out temp_private_key.pem 2048
```

**创建证书签名请求**

```
openssl req -new \
    -key temp_private_key.pem \
    -out cert.csr \
    -subj "/CN=QuickSharePointServiceAuth/O={{YourOrganization}}/C={{US}}"
```

**使用 KMS 公钥生成证书**

```
openssl x509 -req \
    -in cert.csr \
    -signkey temp_private_key.pem \
    -out certificate.pem \
    -days 730 \
    -force_pubkey kms_public_key.pem
```

**注意**  
OpenSSL 会显示警告。`Signature key and public key of cert do not match`这是意料之中的，因为证书使用临时本地密钥签名，但包含 KMS 公钥。该证书是有效的，并且可以在 Microsoft Entra 上正常运行。

**转换为 DER 格式以便上传 Entra**

```
openssl x509 -in certificate.pem -outform DER -out certificate.cer
```

**清理临时文件**

```
rm -f temp_private_key.pem cert.csr public_key.der kms_public_key.pem certificate.pem
```

**重要**  
保留`certificate.cer`文件。在步骤 3 中将其上传到微软 Entra ID。

### 计算证书指纹
<a name="sharepoint-kb-admin-cert-thumbprint"></a>

运行以下命令计算证书的 base64url 编码 SHA-1指纹：

```
openssl dgst -sha1 -binary certificate.cer | base64 | tr '+/' '-_' | tr -d '='
```

记录这个值。在 Quick 中创建知识库时可以输入它。

**注意**  
base64url 编码的指纹与 Microsoft Entra 门户中显示的十六进制指纹不同。快速需要使用 base64url 格式。

## 第 3 步：在 Microsoft Entra ID 中注册应用程序
<a name="sharepoint-kb-admin-step3-entra"></a>

无论您使用的是所有站点权限还是，都需要执行此步骤。`Sites.Selected`唯一的区别是您在[配置 API 权限](#sharepoint-kb-admin-entra-permissions)本节中分配了哪些 API 权限。

### 注册应用程序
<a name="sharepoint-kb-admin-entra-register"></a>

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

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

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

1. 对于**名称**，请输入 `QuickSharePointServiceAuth`。

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

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

1. 选择**注册**。

### 记录申请详情
<a name="sharepoint-kb-admin-entra-record"></a>

在应用程序**概述**页面上，记录以下值：


**应用程序详细信息**  

| 值 | 位置 | 
| --- | --- | 
| 应用程序（客户端）ID | 显示在 “概述” 页面的 “基本信息” 下。 | 
| 目录（租户）ID | 显示在 “概述” 页面的 “基本信息” 下。 | 

### 配置 API 权限
<a name="sharepoint-kb-admin-entra-permissions"></a>

添加与您的用例相匹配的权限。从该[Permissions](#sharepoint-kb-admin-config-permissions)部分的表格中选择权限。根据您的权限范围（所有网站或 Sites.Selected）以及是否启用 ACL 抓取进行选择。

**仅限内容 — 微软 Graph**
+ `Sites.Read.All`

**仅限内容 — SharePoint**
+ `Sites.Read.All`

**ACL 爬行 — Microsoft Graph（附加）**
+ `Sites.Read.All`
+ `User.Read.All`
+ `GroupMember.Read.All`

**ACL 爬行 — SharePoint**
+ `Sites.FullControl.All`

**注意**  
`Sites.FullControl.All`是 ACL 抓取所必需的，因为 SharePoint REST API 需要完全控制权限才能读取站点级别和项目级别的权限分配。如果您正在使用`Sites.Selected`，[步骤 3b：授予站点级权限（仅限）Sites.Selected](#sharepoint-kb-admin-sites-selected)请参阅，了解备用权限集。

1. 在应用程序注册的左侧导航栏中，选择 **API 权限**。

1. 选择**添加权限**。

1. 选择**微软 Graph**。

1. 选择**应用程序权限**。

1. 搜索并选择您的用例所需的 Microsoft Graph 权限，然后选择**添加权限**。

1. 再次选择 “**添加权限”**。

1. 选择 **SharePoint**（在微软 API 下）。

1. 选择**应用程序权限**。

1. 搜索并选择您的用例所需的 SharePoint 权限，然后选择**添加权限**。

**重要**  
选择 “**应用程序权限**” 选项卡，而不是 “**委派权限**”。 Admin-managed 安装程序使用客户端凭证流程，这需要应用程序权限。

### 授予管理员同意
<a name="sharepoint-kb-admin-entra-consent"></a>

1. 在 **API 权限**页面上，**为 [您的组织] 选择授予管理员同意**。

1. 出现提示时确认同意。

**重要**  
应用程序权限需要获得管理员同意。没有它，应用程序就无法访问 SharePoint 数据。

### 上传证书
<a name="sharepoint-kb-admin-entra-cert-upload"></a>

1. 在应用程序注册的左侧导航栏中，选择 “**证书和机密**”。

1. 选择 **Certificates (证书)** 选项卡。

1. 选择**上传证书**。

1. 选择您在步骤 2 中生成的`certificate.cer`文件。

1. 选择**添加**。

**注意**  
Entra 门户以十六进制格式显示证书指纹。这与您在步骤 2 中计算的 base64url 编码指纹不同。在 Quick 中配置知识库时，请使用 base64url 值。

## 步骤 3b：授予站点级权限（仅限）Sites.Selected
<a name="sharepoint-kb-admin-sites-selected"></a>

如果您选择`Sites.Selected`作为权限范围，则必须明确授予您的 Amazon Quick Entra 应用程序访问每个 SharePoint网站的权限。这需要一个具有调用 Microsoft Graph API `Sites.FullControl.All` 权限的临时管理员应用程序。

如果您使用的是所有站点权限范围（`Sites.Read.All`或`Sites.FullControl.All`），请跳过此步骤。

### 获取每个 SharePoint 网站的站点 ID
<a name="sharepoint-kb-admin-sites-selected-siteid"></a>

您需要为要授予访问权限的每个 SharePoint 网站提供站点 ID。要获取站点 ID，请执行以下操作：

1. 在浏览器中，导航到该 SharePoint 站点（例如，`https://{{yourcompany}}.sharepoint.com/sites/{{SiteName}}`）。

1. 追加`/_api/site/id`到网址并按回车键。例如：`https://{{yourcompany}}.sharepoint.com/sites/{{SiteName}}/_api/site/id`

1. 该页面显示包含站点 ID（一个 GUID）的 XML 响应。记录这个值。

对要包含在知识库中的每个站点重复此操作。

### 创建临时管理员应用程序
<a name="sharepoint-kb-admin-sites-selected-admin-app"></a>

管理应用程序仅用于向您的 Amazon Quick 应用程序授予网站级权限。完成此步骤后，您可以将其删除。

1. 在 [Microsoft Entra 管理中心](https://entra.microsoft.com/)中，前往 “**应用程序注册**”，然后选择 “**新**注册”。

1. 在 “**名称**” 中，输入描述性名称，例如。`Quick-SharePoint-PermissionGranter`

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

1. 将 “**重定向 URI**” 留空，然后选择 “**注册**”。

1. 从 “概述” 页面记录**应用程序（客户端）ID**。

1. 选择 **API 权限**，然后选择**添加权限**。

1. 选择 **Microsoft Graph**，然后选择**应用程序权限**。搜索并选择`Sites.FullControl.All`。选择**添加权限**。

1. 选择 **[您的组织] 的 “授予管理员同意**” 并确认。

1. 选择 “**证书和密钥**”，然后选择 “**新建客户机密钥**”。输入描述，选择到期时间，然后选择**添加**。

1. 立即记录秘密**值**。此值仅显示一次。

**重要**  
复制密钥**值**，而不是密钥 ID。该值是用于身份验证的较长字符串。

### 获取访问令牌
<a name="sharepoint-kb-admin-sites-selected-token"></a>

使用管理应用程序凭据从 Microsoft Entra 检索 OAuth 令牌。将这些{{placeholder}}值替换为管理应用程序的客户端 ID、密钥值和租户 ID。

**macOS 和 Linux (bash)**

```
curl -s --location "https://login.microsoftonline.com/{{TENANT_ID}}/oauth2/v2.0/token" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=client_credentials" \
  --data-urlencode "client_id={{ADMIN_APP_CLIENT_ID}}" \
  --data-urlencode "client_secret={{ADMIN_APP_SECRET_VALUE}}" \
  --data-urlencode "scope=https://graph.microsoft.com/.default"
```

**Windows (PowerShell)**

```
$tokenResponse = Invoke-RestMethod `
  -Uri "https://login.microsoftonline.com/{{TENANT_ID}}/oauth2/v2.0/token" `
  -Method Post `
  -ContentType "application/x-www-form-urlencoded" `
  -Body @{
    grant_type    = "client_credentials"
    client_id     = "{{ADMIN_APP_CLIENT_ID}}"
    client_secret = "{{ADMIN_APP_SECRET_VALUE}}"
    scope         = "https://graph.microsoft.com/.default"
  }
$adminToken = $tokenResponse.access_token
```

响应中包含一个`access_token`字段。记录此值以供下一步使用。

### 授予站点级权限
<a name="sharepoint-kb-admin-sites-selected-grant"></a>

使用管理员令牌授予您的 Amazon Quick Entra 应用程序`fullcontrol`访问每个 SharePoint 网站的权限。将这些{{placeholder}}值替换为步骤 3 中的站点 ID、管理员令牌以及客户端应用程序 ID 和显示名称。

**macOS 和 Linux (bash)**

```
curl -s --location "https://graph.microsoft.com/v1.0/sites/{{SITE_ID}}/permissions" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{ADMIN_TOKEN}}" \
  --data '{
    "roles": ["fullcontrol"],
    "grantedToIdentities": [{
      "application": {
        "id": "{{CLIENT_APP_ID}}",
        "displayName": "{{CLIENT_APP_NAME}}"
      }
    }]
  }'
```

**Windows (PowerShell)**

```
$body = @{
    roles = @("fullcontrol")
    grantedToIdentities = @(
        @{
            application = @{
                id          = "{{CLIENT_APP_ID}}"
                displayName = "{{CLIENT_APP_NAME}}"
            }
        }
    )
} | ConvertTo-Json -Depth 10

Invoke-RestMethod `
  -Uri "https://graph.microsoft.com/v1.0/sites/{{SITE_ID}}/permissions" `
  -Method Post `
  -Headers @{
    "Content-Type"  = "application/json"
    "Authorization" = "Bearer $adminToken"
  } `
  -Body $body
```

成功的响应包括`"roles": ["fullcontrol"]``grantedToIdentities`字段中的客户端应用程序 ID。

**重要**  
对要包含在知识库中的每个 SharePoint 站点重复此命令。将来添加的任何新网站也需要单独授予权限。

### 清理
<a name="sharepoint-kb-admin-sites-selected-cleanup"></a>

在你授予所有必需站点的权限后，你可以从 Microsoft Entra 管理中心删除临时管理应用程序。您授予的站点级权限独立于管理员应用程序仍然有效。

**注意**  
临时管理应用程序仅在你的本地环境中用于调用 Microsoft Graph API。Amazon Quick 从来没有看到也无法访问管理应用程序或其凭证。创建知识库时，只有客户端应用程序凭证才会提供给 Amazon Quick。

## 第 4 步：向 Amazon Quick 授予 KMS 密钥的权限
<a name="sharepoint-kb-admin-step4-iam"></a>

Amazon Quick 需要获得使用 KMS 密钥签署 OAuth 断言的权限。您可以通过 Amazon Quick 管理控制台授予此权限。

**注意**  
此步骤需要 Amazon Quick 管理员访问权限（管理员专业版角色）。如果您不是管理员，请您的 Amazon Quick 管理员使用步骤 1 中的 KMS 密钥 ARN 完成此步骤。

**重要**  
如果您的组织管理自己的 Amazon Quick IAM 服务角色，则以下控制台步骤可能不适用。相反，请确保该角色拥有步骤 1 中的 KMS 密钥 ARN 的`kms:Sign`权限。

1. 在 Amazon Quick 中，从左侧导航窗格中选择**管理账户**。

1. 在 “**权限**” 下，选择**AWS 资源**。

1. 在 AWS 资源页面上，滚动到**AWS 密钥管理服务**并选中复选框。

1. 选择 “**选择密钥”**。

1. **在**选择 KMS 密钥**对话框中，输入您在步骤 1 中记录的 KMS 密钥 ARN，然后选择添加。**

1. 密钥 ARN 出现在列表中。选择**结束**。

1. 选择 AWS 资源页面底部的**保存**。

## 后续步骤
<a name="sharepoint-kb-admin-config-next-steps"></a>

完成设置后，在 Amazon Quick 中创建 SharePoint 在线知识库连接。有关说明，请参阅[在 Amazon Quick 中创建知识库](sharepoint-kb-admin-connection.md)。