

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 OneDrive 的 Microsoft Entra App ID 身分驗證
<a name="kb-managed-onedrive-entra-setup"></a>

Microsoft Entra App ID 身分驗證 (`ENTRA_APP_ID`) 是 OneDrive 資料來源的建議身分驗證方法。連接器會使用您應用程式的用戶端 ID 和秘密，以 OAuth 2.0 用戶端憑證 （僅限應用程式） 流程編目內容 - 不涉及使用者登入。這是唯一支援文件層級存取控制 (ACLs身分驗證方法。如需與替代`OAUTH2`方法的比較，請參閱 [身分驗證方法](kb-managed-ds-onedrive.md#kb-managed-onedrive-auth-methods)。

**注意**  
只有在您啟用文件層級存取控制時，才需要憑證。對於僅內容爬取，用戶端 ID 和秘密是連接器唯一需要的憑證。這與 SharePoint 資料來源不同，其中 Microsoft Entra ID 僅應用程式身分驗證一律需要憑證。

**需要管理存取權**  
此設定需要 Microsoft Entra ID 管理員 （全球管理員或特殊權限角色管理員） 來註冊應用程式、設定許可，以及授予管理員同意。以下**設定步驟和角色**資料表會識別每個步驟所需的存取權。

## 設定步驟和角色
<a name="kb-managed-onedrive-entra-roles"></a>

此程序同時涉及 Microsoft Entra ID 管理員和 AWS 管理員。視責任在組織中的分配方式而定，可能會有一個人或多人完成這些步驟。憑證步驟 （步驟 4–6 和 8) 僅適用於啟用文件層級存取控制時。使用下表來識別每個步驟所需的存取權。


**設定步驟和每個步驟都需要的存取權**  

| 步驟 | 您執行的動作 | 需要存取 | 
| --- | --- | --- | 
| 1. 註冊應用程式 | 建立 Entra 應用程式註冊，並記錄其用戶端和租用戶 IDs。 | Microsoft Entra ID 管理員 （全球管理員或特殊權限角色管理員） | 
| 2. 新增許可並授予同意 | 為您的組態指派應用程式許可，並授予管理員同意。 | Microsoft Entra ID 管理員 | 
| 3. 建立用戶端秘密 | 為應用程式建立用戶端秘密，並記錄其值。 | Microsoft Entra ID 管理員 | 
| 4. 產生憑證 （僅限 ACLs) | 使用 OpenSSL 建立自我簽署憑證和 PKCS\#12 (.p12) 套件。 | 具有本機終端機的任何人 （需要 OpenSSL) | 
| 5. 將公有憑證上傳至 Entra （僅限 ACLs) | 將公有憑證新增至應用程式註冊的金鑰。 | Microsoft Entra ID 管理員 | 
| 6. 將憑證上傳至 Amazon S3 （僅限 ACLs) | 將.p12套件存放在 Amazon S3 儲存貯體中。 | AWS 管理員 (Amazon S3) | 
| 7. 建立秘密 | 將登入資料存放在 AWS Secrets Manager 秘密中。 | AWS 管理員 (Secrets Manager) | 
| 8. 授予服務角色對憑證的存取權 (ACLs) | 將 Amazon S3 讀取許可新增至您的知識庫服務角色。 | AWS 管理員 (IAM) | 

## 許可參考
<a name="kb-managed-onedrive-entra-permissions"></a>

指派符合您組態的應用程式許可。所有許可都是**應用程式**許可 （未委派），而且每個許可都需要管理員同意。對於僅限內容爬取，連接器只會向 **Microsoft Graph **進行身分驗證。啟用文件層級存取控制時，連接器還會對 **SharePoint** REST API 進行身分驗證，以在查詢時驗證存取權，因為 OneDrive for Business 由 SharePoint 提供支援。

**重要**  
當您在 Entra 入口網站中新增這些許可時，請選擇**應用程式許可**索引標籤，而非**委派許可**。僅限應用程式身分驗證使用應用程式許可。

選取組態的索引標籤，以查看要指派的確切許可。

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


**僅限內容**  

| API | 權限 | 用途 | 
| --- | --- | --- | 
| Microsoft Graph | Files.Read.All | 讀取使用者磁碟機中的檔案。 | 
| Microsoft Graph | Sites.Read.All | 閱讀備份使用者磁碟機的 OneDrive 網站。 | 
| Microsoft Graph | User.Read.All | 列舉您爬取其磁碟機的使用者。 | 

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


**使用 ACLs**  

| API | 權限 | 用途 | 
| --- | --- | --- | 
| Microsoft Graph | Files.Read.All | 讀取使用者磁碟機中的檔案。 | 
| Microsoft Graph | Sites.Read.All | 閱讀備份使用者磁碟機的 OneDrive 網站。 | 
| Microsoft Graph | User.Read.All | 針對文件層級 ACLs 列舉使用者並加以解析。 | 
| Microsoft Graph | GroupMember.Read.All | 解決文件層級 ACLs群組成員資格。 | 
| SharePoint | Sites.FullControl.All | 驗證每個使用者在查詢時間對文件的存取權。 Sites.Read.All 不足以進行此檢查。 | 

------

**注意**  
SharePoint `Sites.FullControl.All`許可會授予連接器應用程式在您的租用戶中跨網站進行廣泛存取。僅將其授予此應用程式，並相應地保護應用程式的登入資料。

## 您在設定期間收集的值
<a name="kb-managed-onedrive-entra-values"></a>

您在執行這些步驟時建立或收集下列值。您可以在建立資料來源時使用它們。如需詳細資訊，請參閱[連接 OneDrive 資料來源](kb-managed-ds-onedrive-connect.md)。


**值參考**  

| Value | 在 中建立 | 用於 | 
| --- | --- | --- | 
| 應用程式 (用戶端) ID | 步驟 1 | 秘密 (clientId)。 | 
| 目錄 （租戶） ID | 步驟 1 | 資料來源 tenantId。 | 
| 用戶端秘密值 | 步驟 3 | 秘密 (clientSecret)。 | 
| 憑證 — PKCS\#12 套件 (.p12) 及其密碼 (ACLs) | 步驟 4 | 套件 （憑證加上私有金鑰） 會上傳至 Amazon S3 （步驟 6)；密碼會存放在秘密中 ()certificatePassword。 | 
| 憑證 — 公有憑證 (.cer) (ACLs) | 步驟 4 | 相同憑證的公有一半，上傳至 Entra 應用程式註冊 （步驟 5)。 | 
| Amazon S3 儲存貯體名稱和金鑰 (ACLs) | 步驟 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 APIs**下），然後選擇**應用程式許可**。選取 `Sites.FullControl.All`，然後選擇**新增許可**。

1. 在 **API 許可**頁面上，選擇**授予 【您的組織】 的管理員同意**並確認。未經管理員同意，應用程式無法存取 OneDrive 資料。

## 步驟 3：建立用戶端秘密
<a name="kb-managed-onedrive-entra-step3"></a>

OneDrive 爬取會使用應用程式的用戶端 ID 和秘密，因此僅限內容和啟用 ACL 的資料來源都需要用戶端秘密。啟用文件層級存取控制時，連接器會使用用戶端秘密來取得 Microsoft Graph 字符，以解析租戶的 OneDrive 主機，並使用憑證 （來自步驟 4) 來取得用於存取檢查的 SharePoint 字符。

1. 在您的應用程式註冊中，選擇**憑證和秘密**，然後選擇**用戶端秘密**，然後選擇**新用戶端秘密**。

1. 輸入描述，選擇過期，然後選擇**新增**。

1. 立即記錄秘密**值** — 只會顯示一次。記錄**值**，而不是**秘密 ID**。

## 步驟 4 (ACLs)：產生身分驗證憑證
<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`套件讀取私有金鑰以簽署身分驗證聲明，因此套件必須受到密碼保護。選擇強式隨機密碼 — 您會將它存放在秘密中，如步驟 7 `certificatePassword`所示。

------
#### [ 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}}"
```

**將憑證和金鑰封裝為 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 自我簽署憑證，並將其存放在目前使用者的憑證存放區中。使用強式隨機密碼取代{{您的密碼}} — 您可以將密碼存放在秘密中，如步驟 7 `certificatePassword`所示。

```
$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 驗證存取驗證的私有金鑰，因此請安全地存放它。文件層級存取控制需要 `.p12` 格式。

**注意**  
根據預設，憑證有效期為一年。過期的憑證會導致所有同步失敗，因此請在憑證過期之前輪換憑證。若要變更有效期間，請調整 `-days` 選項 (OpenSSL) 或 `-NotAfter`引數 (PowerShell)。如需輪換步驟，請參閱 [輪換憑證](kb-managed-ds-onedrive-troubleshooting.md#kb-managed-ds-onedrive-rotate-cert)。

## 步驟 5 （僅限 ACLs)：將公有憑證上傳至 Entra
<a name="kb-managed-onedrive-entra-step5"></a>

1. 在您的應用程式註冊中，選擇**憑證和秘密**，然後選擇**憑證**索引標籤。

1. 選擇**上傳憑證**，然後選取您在步驟 4 中產生的`certificate.cer`檔案 （僅限公有憑證 - 絕不可將`.p12`套件或私有金鑰上傳至 Entra)。

1. 選擇**新增**。

## 步驟 6 （僅限 ACLs)：上傳憑證至 Amazon S3
<a name="kb-managed-onedrive-entra-step6"></a>

從步驟 4 將`.p12`套件上傳至與知識庫位於相同區域中的 Amazon S3 儲存貯 AWS 體。記錄儲存貯體名稱和金鑰 - 您可以將它們用作資料來源 `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 App 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 （僅限 ACLs)：授予憑證的服務角色存取權
<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 （僅限 ACLs)：上傳憑證至 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 資料來源，請參閱 [連接 OneDrive 資料來源](kb-managed-ds-onedrive-connect.md)。