View a markdown version of this page

设置 Microsoft Entra ID App-Only 身份验证用于 SharePoint - Amazon Bedrock

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

设置 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 权限。

All sites, no ACLs
所有网站,仅限内容
API 权限 用途
Microsoft Graph Sites.Read.All 枚举并读取所有 SharePoint 站点。
SharePoint Sites.Read.All 通过 SharePoint REST API 阅读网站内容。
All sites, with ACLs
所有带有 ACL 的站点
API 权限 用途
Microsoft Graph Sites.Read.All 枚举并读取所有 SharePoint 站点。
Microsoft Graph User.Read.All 为用户解析文档级 ACL。
Microsoft Graph GroupMember.Read.All 解决文档级 ACL 的群组成员资格问题。
SharePoint Sites.FullControl.All 读取 ACL 搜索的项目级别权限,并在查询时验证访问权限。 Sites.Read.All不足以进行此项检查。
Sites.Selected, no ACLs
Sites.Selected,仅限内容
API 权限 用途
Microsoft Graph Sites.Selected 仅访问你明确授权的网站(Microsoft Graph)。
SharePoint Sites.Selected 仅访问您明确授予的站点 (SharePoint REST)。在步骤 5 中为每个站点授予该read角色。
Sites.Selected, with ACLs
Sites.Selected,带有 ACL
API 权限 用途
Microsoft Graph Sites.Selected 仅访问你明确授权的网站(Microsoft Graph)。
Microsoft Graph User.Read.All 为用户解析文档级 ACL。
Microsoft Graph GroupMember.Read.All 解决文档级 ACL 的群组成员资格问题。
SharePoint Sites.Selected 仅访问您明确授权的网站。在步骤 5 中为每个站点授予fullcontrol角色(读取 ACL 的项目级权限所必需的)。
注意

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 中注册应用程序

  1. 登录 Microsoft Entra 管理中心

  2. 在左侧导航栏中,展开 Entra ID,然后选择应用程序注册

  3. 选择 “新注册”。

  4. 在 “名称” 中,输入描述性名称,例如。bedrock-sharepoint-connector

  5. 对于支持的帐户类型,请选择 “仅限此组织目录中的帐户(单租户)”。

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

  7. 选择注册

  8. 在应用程序概述页面上,记录应用程序(客户端)ID目录(租户)ID。稍后你需要两个。

第 2 步:添加 API 权限并授予管理员同意

从中为您的配置添加权限权限参考

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

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

  3. 再次选择 “添加权限”。选择 SharePoint(在 Microsoft API 下),然后选择 “应用程序权限”。为您的配置选择每项 SharePoint 权限,然后选择添加权限

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

注意

Microsoft Entra ID App-Only 身份验证使用证书(来自步骤 3)作为凭据,因此您无需为此应用程序创建客户端密钥。

步骤 3:生成身份验证证书

生成自签名证书并将其打包为 PKCS #12 (.p12) 捆绑包。该捆绑包包含证书及其受密码保护的私钥。您将公共证书上传到 Entra(步骤 4),将.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-sharepoint-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)。您在步骤 4 中将公共证书上传到 Entra,在步骤 6 中将.p12捆绑包上传到 Amazon S3。

Windows (PowerShell)

生成自签名证书

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

$cert = New-SelfSignedCertificate ` -Subject "CN=bedrock-sharepoint-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)。您在步骤 4 中将公共证书上传到 Entra,在步骤 6 中将.p12捆绑包上传到 Amazon S3。

重要

.p12捆绑包存储在 Amazon S3 中(不是.pem.cer文件)。该捆绑包包含 Amazon Bedrock 用于进行身份验证的私钥。 Document-level 访问控制 (ACL) 需要.p12格式。对于没有 ACL 的仅内容抓取,您可以改为存储 PEM-encoded 证书;由于.p12适用于每种配置,因此本指南自始至终都使用。.p12

注意

默认情况下,该证书的有效期为一年。证书过期会导致所有同步失败,因此请在证书到期之前轮换证书。要更改有效期,请调整-days选项 (openSSL) 或-NotAfter参数 (PowerShell)。有关轮换步骤,请参阅轮换证书

第 4 步:将公共证书上传到 Entra

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

  2. 选择上传证书,然后选择您在步骤 3 中生成的certificate.cer文件(仅限公共证书,切勿将.p12捆绑包或私钥上传到 Entra)。

  3. 选择添加

第 5 步(Sites.Selected 仅限):授予每个站点的访问权限

注意

仅当您在步骤 2 中选择了Sites.Selected权限范围时,此步骤才适用。如果您使用了所有站点作用域(Sites.Read.AllSites.FullControl.All),请跳至。第 6 步:将证书上传到 Amazon S3

使用Sites.Selected,您可以通过 Microsoft Graph API 单独授予连接器应用程序访问每个 SharePoint 站点的权限。这需要一份单独的临时申请Sites.FullControl.All,该申请只能用于执行补助金。Amazon Bedrock 从来没有看到这个临时应用程序或其证书。

  1. 创建临时授予者应用程序。在 Entra 管理中心,将第二个应用程序(例如bedrock-sharepoint-granter)注册为没有重定向 URI 的单租户。添加 Microsoft Graph Sites.FullControl.All 应用程序权限,授予管理员同意,然后创建客户端密钥。记录其客户端 ID 和密钥值。

  2. 获取授予者应用程序的访问令牌。将占位符替换为授予者应用程序的客户端 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。在接下来的命令中将其用作不记名令牌。

  3. 将每个网站的网址解析为一个站点 ID。使用网站的主机名和服务器相对路径。

    curl -s \ "https://graph.microsoft.com/v1.0/sites/contoso.sharepoint.com:/sites/engineering" \ -H "Authorization: Bearer ACCESS_TOKEN"

    响应中的id字段是站点 ID。

  4. 授予连接器应用程序访问该站点的权限。read用于仅限内容的爬网或 ACL 爬网fullcontrolCONNECTOR_CLIENT_ID替换为步骤 1 中的应用程序(客户端)ID。

    curl -s -X POST \ "https://graph.microsoft.com/v1.0/sites/SITE_ID/permissions" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "roles": ["fullcontrol"], "grantedToIdentities": [{ "application": { "id": "CONNECTOR_CLIENT_ID", "displayName": "bedrock-sharepoint-connector" } }] }'
  5. 对数据源中包含的每个站点重复解析和授权命令。完成后,您可以删除临时授予者应用程序;每个站点的授权仍然有效。

重要

Per-site 补助金不具有追溯力。如果您稍后向数据源添加站点,请在下次同步之前授予连接器应用程序访问该站点的权限,否则其内容不会被抓取。

第 6 步:将证书上传到 Amazon S3

将步骤 3 中的.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 密钥

将凭证存储在 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 \ --name bedrock-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 的数据源失败。