本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置 Microsoft Entra ID App-Only 身份验证用于 SharePoint
Microsoft Entra ID App-Only 身份验证 (ENTRA_ID_APP_ONLY) 是 SharePoint 数据源的推荐身份验证方法。它使用 OAuth 2.0 客户端凭证(仅限应用程序)流程:Microsoft Entra 应用程序使用证书进行身份验证,因此在抓取时或查询时不涉及用户登录。这是唯一支持文档级访问控制 (ACL) 的身份验证方法。有关与替代OAUTH2_APP方法的比较,请参见身份验证方法。
此设置跨越两个系统——Microsoft Entra ID和你的 AWS 账户——证书是将它们联系在一起的凭据。连接器将证书(包括私钥)作为 PKCS #12 (.p12) 文件存储在 Amazon S3 中,并使用它来签署微软的身份验证断言;匹配的公共证书将上传到 Entra 应用程序注册中,以便微软可以验证这些断言。
需要管理权限
此设置需要 Microsoft Entra ID 管理员(全局管理员或特权角色管理员)来注册应用程序、配置权限并授予管理员同意。如果您使用Sites.Selected权限范围,则还需要 SharePoint 管理员来授予每个站点的访问权限。下面的安装步骤和角色表列出了每个步骤所需的访问权限。
设置步骤和角色
此过程同时涉及 Microsoft Entra ID AWS 管理员和管理员。根据组织中职责的划分方式,可以由一个人或几个人来完成这些步骤。使用下表确定每个步骤所需的访问权限。
| 步骤 | 你在做什么 | 需要访问权限 |
|---|---|---|
| 1. 注册应用程序 | 创建 Entra 应用程序注册并记录其客户端和租户 ID。 | Microsoft Entra ID 管理员(全局管理员或特权角色管理员) |
| 2. 添加权限并授予同意 | 为您的配置分配应用程序权限并授予管理员同意。 | 微软 Entra ID 管理员 |
| 3. 生成证书 | 使用 OpenSSL 创建自签名证书和 PKCS #12 (.p12) 捆绑包。 |
任何拥有本地终端的人(需要 OpenSSL) |
| 4. 将公共证书上传到 Entra | 将公共证书添加到应用程序注册的密钥中。 | 微软 Entra ID 管理员 |
5. 授予每个站点的访问权限(Sites.Selected仅限) |
通过 Microsoft Graph API 向应用程序授予访问每个 SharePoint 站点的权限。 | 微软 Entra ID 管理员 |
| 6. 将证书上传到 Amazon S3 | 将.p12捆绑包存储在 Amazon S3 存储桶中。 |
AWS 管理员(亚马逊 S3) |
| 7. 创建密钥 | 将凭证存储在 AWS Secrets Manager 密钥中。 | AWS 管理员(Secrets Manager) |
| 8. 授予服务角色对证书的访问权限 | 将 Amazon S3 读取权限添加到您的知识库服务角色。 | AWS 管理员 (IAM) |
选择您的配置
在开始之前,请做出两个决定。它们决定您在步骤 2 中分配的权限以及如何授予网站访问权限。
-
Document-level 访问控制 (ACL)-决定数据源是否按每个用户的 SharePoint 权限筛选查询结果。ACL 爬网需要额外的 Microsoft Graph 和 SharePoint 权限。创建数据源后,您无法更改此设置。有关更多信息,请参阅 Document-level 访问控制。
-
权限范围-决定应用程序是可以读取租户中的所有 SharePoint 站点(所有站点,最简单的选项),还是只能读取您明确授予的站点(
Sites.Selected最低权限选项)。在第 5 步中Sites.Selected完成了每个站点的额外授权,之后添加的任何网站都需要自己的授权。
这两个选项的组合将选择下一节中的一个权限集。
权限参考
分配与您的配置相匹配的应用程序权限。所有权限均为应用程序权限(非委托),并且每个权限都需要管理员同意。连接器对两个 Microsoft 资源进行身份验证:Microsoft Graph(用于枚举站点,对于 ACL,用于解析用户和群组)和 SharePointREST API(用于读取网站内容,对于 ACL,则为项目级权限)。
重要
在 Entra 门户中添加这些权限时,请选择应用程序权限选项卡,而不是委派权限。 App-only 身份验证使用应用程序权限。
选择您的配置选项卡,查看要分配的确切的 Microsoft Graph 和 SharePoint 权限。
注意
Sites.FullControl.All授予对租户中每个站点的广泛访问权限。如果您的组织需要最低权限,请在步骤 5 中使用Sites.Selected并授予每个站点的访问权限。
您在设置过程中收集的值
在完成这些步骤时,您可以创建或收集以下值。您可以在创建数据源时使用它们。有关更多信息,请参阅 Connect SharePoint 数据源。
| 值 | 创建于 | 用于 |
|---|---|---|
| 应用程序(客户端)ID | 步骤 1 | 秘密 (clientId)。 |
| 目录(租户)ID | 步骤 1 | 数据源tenantId。 |
证书 — PKCS #12 bundle (.p12) 及其密码 |
步骤 3 | 捆绑包(证书加私钥)已上传到 Amazon S3(步骤 6);密码存储在密钥中(certificatePassword)。 |
证书-公共证书 (.cer) |
步骤 3 | 同一份证书的公开部分,上传到 Entra 应用程序注册处(步骤 4)。 |
| 亚马逊 S3 存储桶名称和密钥 | 步骤 6 | 数据源certificateS3Path。 |
| 密钥 ARN | 步骤 7 | 数据源secretArn。 |
第 1 步:在 Microsoft Entra ID 中注册应用程序
-
在左侧导航栏中,展开 Entra ID,然后选择应用程序注册。
-
选择 “新注册”。
-
在 “名称” 中,输入描述性名称,例如。
bedrock-sharepoint-connector -
对于支持的帐户类型,请选择 “仅限此组织目录中的帐户(单租户)”。
-
将重定向 URI 留空。不需要重定向 URI,因为应用程序使用的是客户端凭证流程,而不是交互式登录流程。
-
选择注册。
-
在应用程序概述页面上,记录应用程序(客户端)ID 和目录(租户)ID。稍后你需要两个。
第 2 步:添加 API 权限并授予管理员同意
从中为您的配置添加权限权限参考。
-
在您的应用程序注册中,选择 API 权限,然后选择添加权限。
-
选择 Microsoft Graph,然后选择应用程序权限。为您的配置搜索并选择每个 Microsoft Graph 权限,然后选择添加权限。
-
再次选择 “添加权限”。选择 SharePoint(在 Microsoft API 下),然后选择 “应用程序权限”。为您的配置选择每项 SharePoint 权限,然后选择添加权限。
-
在 API 权限页面上,选择 [您的组织] 授予管理员同意,然后确认。未经管理员同意,应用程序无法访问 SharePoint 数据。
注意
Microsoft Entra ID App-Only 身份验证使用证书(来自步骤 3)作为凭据,因此您无需为此应用程序创建客户端密钥。
步骤 3:生成身份验证证书
生成自签名证书并将其打包为 PKCS #12 (.p12) 捆绑包。该捆绑包包含证书及其受密码保护的私钥。您将公共证书上传到 Entra(步骤 4),将.p12捆绑包上传到 Amazon S3(步骤 6)。选择操作系统的选项卡以查看命令。
注意
Amazon Bedrock 从.p12捆绑包中读取私钥以签署身份验证断言,因此捆绑包必须有密码保护并安全存储。随机选择一个强度高的密码——你将其存储在秘密中,如certificatePassword步骤 7 所示。
重要
将.p12捆绑包存储在 Amazon S3 中(不是.pem或.cer文件)。该捆绑包包含 Amazon Bedrock 用于进行身份验证的私钥。 Document-level 访问控制 (ACL) 需要.p12格式。对于没有 ACL 的仅内容抓取,您可以改为存储 PEM-encoded 证书;由于.p12适用于每种配置,因此本指南自始至终都使用。.p12
注意
默认情况下,该证书的有效期为一年。证书过期会导致所有同步失败,因此请在证书到期之前轮换证书。要更改有效期,请调整-days选项 (openSSL) 或-NotAfter参数 (PowerShell)。有关轮换步骤,请参阅轮换证书。
第 4 步:将公共证书上传到 Entra
-
在应用程序注册中,选择 “证书和机密”,然后选择 “证书” 选项卡。
-
选择上传证书,然后选择您在步骤 3 中生成的
certificate.cer文件(仅限公共证书,切勿将.p12捆绑包或私钥上传到 Entra)。 -
选择添加。
第 5 步(Sites.Selected 仅限):授予每个站点的访问权限
注意
仅当您在步骤 2 中选择了Sites.Selected权限范围时,此步骤才适用。如果您使用了所有站点作用域(Sites.Read.All或Sites.FullControl.All),请跳至。第 6 步:将证书上传到 Amazon S3
使用Sites.Selected,您可以通过 Microsoft Graph API 单独授予连接器应用程序访问每个 SharePoint 站点的权限。这需要一份单独的临时申请Sites.FullControl.All,该申请只能用于执行补助金。Amazon Bedrock 从来没有看到这个临时应用程序或其证书。
-
创建临时授予者应用程序。在 Entra 管理中心,将第二个应用程序(例如
bedrock-sharepoint-granter)注册为没有重定向 URI 的单租户。添加 Microsoft GraphSites.FullControl.All应用程序权限,授予管理员同意,然后创建客户端密钥。记录其客户端 ID 和密钥值。 -
获取授予者应用程序的访问令牌。将占位符替换为授予者应用程序的客户端 ID 和密钥以及您的租户 ID。
curl -s -X POST \ "https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials" \ -d "client_id=GRANTER_CLIENT_ID" \ -d "client_secret=GRANTER_CLIENT_SECRET" \ -d "scope=https://graph.microsoft.com/.default"响应中包含
access_token。在接下来的命令中将其用作不记名令牌。 -
将每个网站的网址解析为一个站点 ID。使用网站的主机名和服务器相对路径。
curl -s \ "https://graph.microsoft.com/v1.0/sites/contoso.sharepoint.com:/sites/engineering" \ -H "Authorization: BearerACCESS_TOKEN"响应中的
id字段是站点 ID。 -
授予连接器应用程序访问该站点的权限。
read用于仅限内容的爬网或 ACL 爬网fullcontrol。CONNECTOR_CLIENT_ID替换为步骤 1 中的应用程序(客户端)ID。curl -s -X POST \ "https://graph.microsoft.com/v1.0/sites/SITE_ID/permissions" \ -H "Authorization: BearerACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "roles": ["fullcontrol"], "grantedToIdentities": [{ "application": { "id": "CONNECTOR_CLIENT_ID", "displayName": "bedrock-sharepoint-connector" } }] }' -
对数据源中包含的每个站点重复解析和授权命令。完成后,您可以删除临时授予者应用程序;每个站点的授权仍然有效。
重要
Per-site 补助金不具有追溯力。如果您稍后向数据源添加站点,请在下次同步之前授予连接器应用程序访问该站点的权限,否则其内容不会被抓取。
第 6 步:将证书上传到 Amazon S3
将步骤 3 中的.p12捆绑包上传到知识库所在 AWS 区域的 Amazon S3 存储桶。记录存储桶名称和密钥——您可以将其用作数据源certificateS3Path。
aws s3api put-object \ --bucketyour-certificate-bucket\ --keycerts/certificate.p12\ --body certificate.p12 \ --server-side-encryption AES256
注意
我们建议您在证书对象上启用服务器端加密,并将存储桶限制为需要它的委托人。该捆绑包包含私钥。
第 7 步:创建 Secrets Manager 密钥
将凭证存储在 AWS Secrets Manager 密钥中。对于 Entra ID App-Only 身份验证,请包括以下键值对:
clientId(必填)— 步骤 1 中的应用程序(客户端)ID。certificatePassword(推荐)— 您在步骤 3 中为.p12捆绑包设置的密码。参见下面的注释。
{ "clientId": "your-client-id", "certificatePassword": "your-certificate-password" }
使用以下命令创建密钥 AWS Command Line Interface:
aws secretsmanager create-secret \ --namebedrock-sharepoint-creds\ --secret-string file://secret.json
记录响应中的秘密 ARN。您可以将其用作数据源secretArn。
注意
设置certificatePassword为您在步骤 3 中创建.p12分发包时使用的密码。如果您省略此字段,Amazon Bedrock 将使用您的应用程序的客户端 ID 作为密码打开捆绑包,因此该捆绑包必须使用客户端 ID 作为其密码创建。我们建议您始终设置明确的高熵密码,并安全地存储私钥。
注意
改用 PEM 证书。本指南使用适用于所有配置的.p12捆绑包。如果您仅抓取内容(没有文档级访问控制),则可以改用 PEM 证书。在这种情况下,仅将公共证书上传到 Amazon S3(不是.p12捆绑包),并将私钥存储在密钥中privateKey(未加密 base64 编码的 PKCS #8,没有标题行),以代替:certificatePassword
{ "clientId": "your-client-id", "privateKey": "your-base64-pkcs8-private-key" }
步骤 8:向服务角色授予证书访问权限
您的知识库服务角色必须能够从 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 步:将证书上传到 Amazon S3使用 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"] }
只需要读取权限kms:Decrypt。有关更多信息,请参阅对 AWS KMS 密钥使用服务器端加密 (SSE-KMS)。
有关知识库服务角色权限的完整集合,请参阅访问数据来源的权限。
后续步骤
现在,您拥有了创建数据源所需的一切:秘密 ARN、您的租户 ID 以及证书的 Amazon S3 位置。要使用 AWS 管理控制台 或 API 创建 SharePoint 数据源,请参阅Connect SharePoint 数据源。
重要
要进行ENTRA_ID_APP_ONLY身份验证,即使禁用 ACL,也必须在创建数据源时提供certificateS3Path。使用此身份验证类型创建且没有证书 SharePoint 的数据源失败。