

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

# 設定 ServiceNow 的 OAuth 2.0 用戶端登入資料驗證
<a name="kb-managed-servicenow-oauth2-setup"></a>

使用 ServiceNow Table API 搭配 OAuth 2.0 用戶端登入資料 (2LO) 進行身分驗證。在 Amazon Bedrock 中設定資料來源之前，請先完成 ServiceNow 執行個體中的所有下列步驟。

## 步驟 1：啟用用戶端憑證授予類型
<a name="kb-managed-servicenow-oauth2-step1"></a>

1. 在 ServiceNow 中，`sys_properties.list`使用篩選條件導覽器導覽至 。

1. 使用下列值建立新的系統屬性：
   + **名稱** – `glide.oauth.inbound.client.credential.grant_type.enabled`
   + **類型** – `true | false`
   + **值**：`true`

## 步驟 2：建立專用服務帳戶
<a name="kb-managed-servicenow-oauth2-step2"></a>

1. 導覽至**使用者管理** > **使用者**。

1. 選擇**新增**並完成表單：
   + **使用者 ID** – 描述性名稱 （例如 `svc.amazon.quick.kb`)。
   + **僅限 Web 服務存取** – 已檢查。這可防止互動式登入。
   + **密碼** – 設定高強度密碼。連接器使用 OAuth，但需要密碼才能建立帳戶。

1. 選擇**提交**。

## 步驟 3：指派服務帳戶角色
<a name="kb-managed-servicenow-oauth2-step3"></a>

1. 開啟服務帳戶 (**使用者管理** > **使用者** > 您的服務帳戶）。

1. 在**角色**索引標籤下，選擇**編輯**並新增下列角色：
   + `knowledge_admin` – 所有知識庫文章的完整讀取存取權。略過每 KB 使用者條件限制。
   + `catalog_admin` – 所有服務目錄項目的完整讀取存取權。略過每個目錄的限制。

1. 選擇**儲存**。

**注意**  
儲存後，您會看到總共約 14 個角色。ServiceNow 自動繼承包含來自`_admin`父角色的角色。您只能手動指派步驟 2 中列出的兩個角色 (`knowledge_admin` 和 `catalog_admin`)。請勿指派 `admin`、 `itil`或 `snc_read_only`角色。

## 步驟 4：註冊 OAuth 應用程式
<a name="kb-managed-servicenow-oauth2-step4"></a>

1. 導覽至**系統 OAuth** > **應用程式登錄**檔。

1. 選擇**新增** > **為外部用戶端建立 OAuth API 端點**。

1. 填寫表單：
   + **名稱** – 描述性名稱 （例如 `Amazon-Quick-KB-Client`)。
   + **重新導向 URL** – 保留空白。用戶端登入資料流程不需要。

1. 選擇**提交**。

1. 立即複製**用戶端 ID** 和**用戶端秘密**。Client Secret 只會顯示一次。

**重要**  
您必須使用攔截器頁面來建立應用程式。請勿直接插入`oauth_entity`資料表來建立記錄。

## 步驟 5：設定 OAuth 應用程式
<a name="kb-managed-servicenow-oauth2-step5"></a>

1. 從應用程式登錄清單中重新開啟應用程式記錄。

1. 如果看不到 **OAuth 應用程式使用者**欄位，請使用**設定** > **表單建置器**新增它。

1. 設定下列欄位：
   + **OAuth 應用程式使用者** – 您的服務帳戶 （例如 `svc.amazon.quick.kb`)。
   + **範圍限制** – `Broadly scoped`。
   + **用戶端類型** – `integration_as_a_service`。

1. 選擇**更新**。

## 步驟 6：設定 API 存取政策
<a name="kb-managed-servicenow-oauth2-step6"></a>

如果沒有 API 存取政策，權杖會進行身分驗證，但資料表 API 會傳回 HTTP 401。完成以下兩個子步驟。

**建立傳入身分驗證設定檔**

1. 導覽至**系統 Web 服務** > **API 存取政策** > **傳入身分驗證設定檔**。

1. 選擇**新增**並設定：
   + **名稱** – 例如，`Amazon-Quick-KB-Client-Profile`。
   + **類型** – `OAuth`.
   + **OAuth 實體** – 選取您的 OAuth 應用程式。

1. 選擇**提交**。

1. 重新開啟設定檔。在**身分驗證政策**相關清單中，選擇**編輯**並新增**允許存取政策**。選擇**儲存**。

**建立 REST API 存取政策**

1. 導覽至**系統 Web 服務** > **API 存取政策** > **REST API 存取政策**。

1. 選擇**新增**並設定：
   + **名稱** – 例如，`Table API Oauth access policy`。
   + **REST API** – `Table API`。
   + **REST API 路徑** – `now/table`。
   + **套用至所有方法** – 已檢查。
   + **套用至所有資源** – 已檢查。
   + **套用至所有資料表** – 已檢查。
   + **套用至所有版本** – 已檢查。

1. 選擇**提交**。

1. 重新開啟政策。在**傳入身分驗證設定檔**相關清單中，選擇**編輯**並新增傳入身分驗證設定檔。選擇**儲存**。

## 步驟 7：驗證 OAuth 流程
<a name="kb-managed-servicenow-oauth2-step7"></a>

設定資料來源之前，請確認 OAuth 流程可end-to-end運作。

**請求權杖：**

```
curl -s -X POST "https://{{INSTANCE}}.service-now.com/oauth_token.do" \
  -d "grant_type=client_credentials" \
  -d "client_id={{CLIENT_ID}}" \
  -d "client_secret={{CLIENT_SECRET}}"
```

**驗證資料表 API 存取：**

```
curl -s "https://{{INSTANCE}}.service-now.com/api/now/table/kb_knowledge?sysparm_limit=1" \
  -H "Authorization: Bearer {{ACCESS_TOKEN}}"
```

下表說明每個驗證結果和要採取的動作。


**驗證結果**  

| 結果 | 意義 | Action | 
| --- | --- | --- | 
| HTTP 200 與資料 | 正常運作 | 繼續建立 Secrets Manager 秘密。 | 
| HTTP 200 搭配空白陣列 | 缺少knowledge\_admin角色 | 將knowledge\_admin角色指派給服務帳戶。 | 
| HTTP 401 | 未設定 API 存取政策 | 驗證傳入身分驗證設定檔和 REST API 存取政策組態。 | 

## 步驟 8：建立 Secrets Manager 秘密
<a name="kb-managed-servicenow-oauth2-step8"></a>

使用下列鍵/值對，將登入資料存放在 AWS 區域 與知識庫相同的 AWS Secrets Manager 秘密中：

```
{
    "clientId": "{{your-client-id}}",
    "clientSecret": "{{your-client-secret}}",
    "instanceUrl": "https://{{YOUR_INSTANCE}}.service-now.com"
}
```


**秘密欄位**  

| 欄位 | 說明 | 
| --- | --- | 
| clientId | 步驟 4 中的應用程式用戶端 ID。 | 
| clientSecret | 在步驟 4 的建立時間顯示應用程式用戶端秘密。 | 
| instanceUrl | 完整的 ServiceNow 執行個體 URL （包含 https://，不含尾斜線）。 | 

**重要**  
`instanceUrl` 不得有斜線。

使用 建立秘密 AWS Command Line Interface：

```
aws secretsmanager create-secret \
  --name {{bedrock-servicenow-creds}} \
  --secret-string file://secret.json
```

從回應記錄秘密 ARN。您可以使用它做為資料來源 `secretArn`。

## 後續步驟
<a name="kb-managed-servicenow-oauth2-next"></a>

儲存秘密之後，請建立資料來源。請參閱[連接 ServiceNow 資料來源](kb-managed-ds-servicenow-connect.md)。