本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 SharePoint 的 Microsoft Entra ID 僅限應用程式身分驗證
Microsoft Entra ID 僅限應用程式身分驗證 (ENTRA_ID_APP_ONLY) 是 SharePoint 資料來源的建議身分驗證方法。它使用 OAuth 2.0 client-credentials (僅限應用程式) 流程:Microsoft Entra 應用程式使用憑證進行驗證,因此在網路爬取時間或查詢時間不會涉及使用者登入。這是唯一支援文件層級存取控制 (ACLs身分驗證方法。如需與替代OAUTH2_APP方法的比較,請參閱 身分驗證方法。
此設定跨越兩個系統:Microsoft Entra ID 和 AWS 您的帳戶,而憑證是將這些系統連結在一起的憑證。連接器會將憑證 (包含私有金鑰) 儲存為 Amazon S3 中的 PKCS#12 (.p12) 檔案,並使用它來簽署身分驗證聲明給 Microsoft;相符的公有憑證會上傳至 Entra 應用程式註冊,以便 Microsoft 驗證這些聲明。
需要管理存取權
此設定需要 Microsoft Entra ID 管理員 (全球管理員或特殊權限角色管理員) 來註冊應用程式、設定許可,以及授予管理員同意。如果您使用Sites.Selected許可範圍,您也需要 SharePoint 管理員來授予每個站台的存取權。下面的設定步驟和角色資料表會識別每個步驟所需的存取權。
設定步驟和角色
此程序同時涉及 Microsoft Entra ID 管理員和 AWS 管理員。視責任在組織中的分配方式而定,可能會有一個人或多人完成這些步驟。使用下表來識別每個步驟所需的存取權。
| 步驟 | 您執行的動作 | 需要存取 |
|---|---|---|
| 1. 註冊應用程式 | 建立 Entra 應用程式註冊並記錄其用戶端和租用戶 IDs。 | Microsoft Entra ID 管理員 (全球管理員或特殊權限角色管理員) |
| 2. 新增許可並授予同意 | 為您的組態指派應用程式許可,並授予管理員同意。 | Microsoft Entra ID 管理員 |
| 3. 產生憑證 | 使用 OpenSSL 建立自我簽署憑證和 PKCS#12 (.p12) 套件。 |
具有本機終端機的任何人 (需要 OpenSSL) |
| 4. 將公有憑證上傳至 Entra | 將公有憑證新增至應用程式註冊的金鑰。 | Microsoft Entra ID 管理員 |
5. 授予每個站台存取權 (Sites.Selected僅限 ) |
透過 Microsoft Graph API 授予應用程式存取每個 SharePoint 網站的權限。 | Microsoft Entra ID 管理員 |
| 6. 將憑證上傳至 Amazon S3 | 將.p12套件存放在 Amazon S3 儲存貯體中。 |
AWS 管理員 (Amazon S3) |
| 7. 建立秘密 | 將登入資料存放在 AWS Secrets Manager 秘密中。 | AWS 管理員 (Secrets Manager) |
| 8. 授予服務角色對憑證的存取權 | 將 Amazon S3 讀取許可新增至您的知識庫服務角色。 | AWS 管理員 (IAM) |
選擇您的組態
開始之前,請做出兩個決策。它們決定您在步驟 2 中指派的許可,以及如何授予網站存取權。
-
文件層級存取控制 (ACLs) — 決定資料來源是否依每個使用者的 SharePoint 許可篩選查詢結果。ACL 爬取需要額外的 Microsoft Graph 和 SharePoint 許可。您無法在建立資料來源後變更此設定。如需詳細資訊,請參閱文件層級存取控制。
-
許可範圍 — 決定應用程式是否可以讀取租用戶中的所有 SharePoint 網站 (所有網站,最簡單的選項) 或僅您明確授予的網站 (
Sites.Selected最低權限選項)。透過Sites.Selected您在步驟 5 中完成每個網站的額外授予,之後新增的任何網站都需要自己的授予。
這兩個選項的組合會在下一節中選取其中一個許可集。
許可參考
指派符合您組態的應用程式許可。所有許可都是應用程式許可 (未委派),而且每個許可都需要管理員同意。連接器會驗證兩個 Microsoft 資源:Microsoft Graph (列舉網站,以及針對 ACLs 解析使用者和群組) 和 SharePoint REST API (讀取網站內容,以及針對 ACLs 的項目層級許可)。
重要
當您在 Entra 入口網站中新增這些許可時,請選擇應用程式許可索引標籤,而非委派許可。僅應用程式身分驗證使用應用程式許可。
選取組態的索引標籤,以查看要指派的確切 Microsoft Graph 和 SharePoint 許可。
注意
Sites.FullControl.All 授予租用戶中每個網站的廣泛存取權。如果您的組織需要最低權限,請在步驟 5 中使用Sites.Selected並授予每個站台的存取權。
您在設定期間收集的值
您在執行這些步驟時建立或收集下列值。您可以在建立資料來源時使用它們。如需詳細資訊,請參閱連接 SharePoint 資料來源。
| Value | 在 中建立 | 用於 |
|---|---|---|
| 應用程式 (用戶端) ID | 步驟 1 | 秘密 (clientId)。 |
| 目錄 (租戶) ID | 步驟 1 | 資料來源 tenantId。 |
憑證 — PKCS#12 套件 (.p12) 及其密碼 |
步驟 3 | 套件 (憑證加上私有金鑰) 會上傳至 Amazon S3 (步驟 6);密碼會存放在秘密中 (certificatePassword)。 |
憑證 — 公有憑證 (.cer) |
步驟 3 | 相同憑證的公有一半,上傳至 Entra 應用程式註冊 (步驟 4)。 |
| Amazon 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 APIs下),然後選擇應用程式許可。為您的組態選取每個 SharePoint 許可,然後選擇新增許可。
-
在 API 許可頁面上,選擇授予 【您的組織】 的管理員同意並確認。未經管理員同意,應用程式無法存取 SharePoint 資料。
注意
Microsoft Entra ID 僅應用程式身分驗證使用憑證 (來自步驟 3) 做為登入資料,因此您不會為此應用程式建立用戶端秘密。
步驟 3:產生身分驗證憑證
產生自我簽署憑證並將其封裝為 PKCS#12 (.p12) 套件。套件同時包含憑證及其私有金鑰,並受密碼保護。您可以將公有憑證上傳到 Entra (步驟 4),並將.p12套件上傳到 Amazon S3 (步驟 6)。選取作業系統的索引標籤以查看命令。
注意
Amazon Bedrock 會從.p12套件讀取私有金鑰以簽署身分驗證聲明,因此套件必須受到密碼保護並安全地存放。選擇強式隨機密碼 — 您會將它存放在秘密中,如步驟 7 certificatePassword所示。
重要
將.p12套件存放在 Amazon S3 中 (而非 .pem或 .cer 檔案)。套件包含 Amazon Bedrock 用來驗證的私有金鑰。文件層級存取控制 ACLs) 需要 .p12 格式。對於沒有 ACLs 的純內容爬取,您可以改為存放 PEM 編碼的憑證;因為 .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。在下一個命令中使用它做為承載字符。 -
將每個網站 URL 解析為網站 ID。使用網站的主機名稱和伺服器相對路徑。
curl -s \ "https://graph.microsoft.com/v1.0/sites/contoso.sharepoint.com:/sites/engineering" \ -H "Authorization: BearerACCESS_TOKEN"回應中的
id欄位是網站 ID。 -
授予連接器應用程式對網站的存取權。將
read用於僅限內容的爬取,或將fullcontrol用於 ACL 爬取。將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" } }] }' -
對資料來源中包含的每個網站重複resolve-and-grant命令。完成後,您可以刪除暫時授予者應用程式;每個站台的授予仍然有效。
重要
每個網站授予不會追溯。如果您稍後將網站新增至資料來源,請在下一次同步之前授予連接器應用程式對該網站的存取權,否則不會編目其內容。
步驟 6:將憑證上傳至 Amazon S3
從步驟 3 上傳.p12套件到與知識庫位於相同區域中的 Amazon S3 儲存貯 AWS 體。記錄儲存貯體名稱和金鑰 — 您可以使用它們做為資料來源 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 僅限應用程式身分驗證,請包含下列鍵值對:
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 資料來源,請參閱 連接 SharePoint 資料來源。
重要
針對ENTRA_ID_APP_ONLY身分驗證,您必須在建立資料來源certificateS3Path時提供 ,即使 ACLs已停用也一樣。使用此身分驗證類型建立且沒有憑證的 SharePoint 資料來源失敗。