

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

# 連線至 Okta
<a name="connecting-to-okta"></a>

 Okta API 是 Okta 的程式設計介面，用於管理大型或複雜的 Okta 帳戶和行銷活動。如果您是 Okta 使用者，您可以 AWS Glue 連線到您的 Okta 帳戶。然後，您可以在 ETL 任務中使用 Okta 作為資料來源。執行這些任務以在 Okta AWS 和服務或其他支援的應用程式之間傳輸資料。

**Topics**
+ [AWS Glue 支援 Okta](okta-support.md)
+ [包含用於建立和使用連線的 API 操作的政策](okta-configuring-iam-permissions.md)
+ [設定 Okta](okta-configuring.md)
+ [設定 Okta 連線](okta-configuring-connections.md)
+ [從 Okta 實體中讀取](okta-reading-from-entities.md)
+ [Okta 連線選項參考](okta-connection-options.md)
+ [Okta 新帳戶和開發人員應用程式建立步驟](okta-create-account.md)
+ [限制](okta-connector-limitations.md)

# AWS Glue 支援 Okta
<a name="okta-support"></a>

AWS Glue 支援 Okta，如下所示：

**支援作為來源？**  
是。您可以使用 AWS Glue ETL 任務從 Okta 查詢資料。

**支援作為目標？**  
否。

**支援的 Okta API 版本**  
 v1。

# 包含用於建立和使用連線的 API 操作的政策
<a name="okta-configuring-iam-permissions"></a>

 下列範例政策說明建立和使用 連線所需的 AWS 許可。如果您要建立新角色，請建立包含下列項目的政策：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

也可使用下列受管 IAM 政策來允許存取權：
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – 准許存取各種 AWS Glue 程序代表您執行所需的資源。這些資源包括 AWS Glue Amazon S3、IAM、CloudWatch Logs 和 Amazon EC2。如果您遵循此政策中指定資源的命名慣例，則 AWS Glue 程序具有必要的許可。此政策通常會連接至定義編目程式、工作和開發端點時所指定的角色。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) – 當政策連接到的身分使用 AWS 管理主控台時，授予 AWS Glue 資源的完整存取權。如果您依照此政策中指定的資源命名慣例，使用者就能擁有完整的主控台功能。此政策通常連接到 AWS Glue 主控台的使用者。

# 設定 Okta
<a name="okta-configuring"></a>

您必須先符合下列要求，才能使用 AWS Glue 往返 Okta 傳輸資料：

## 最低需求
<a name="okta-configuring-min-requirements"></a>
+  您擁有一個 Okta 帳戶。如需有關建立帳戶的詳細資訊，請參閱[Okta 新帳戶和開發人員應用程式建立步驟](okta-create-account.md)。
+  您的 Okta 帳戶已啟用 API 存取。
+  您已在 Okta 帳戶中建立 OAuth2 API 整合。此整合提供用戶端登入資料，在對您的帳戶進行驗證呼叫時， AWS Glue 會使用 安全地存取您的資料。如需詳細資訊，請參閱建立用戶端應用程式和 OAuth2.0 憑證的步驟：Okta 新帳戶和開發人員應用程式建立步驟 
+  您擁有一個具有 OktaApiToken 的 Okta 帳戶。請參閱 [Okta 文件](https://developer.okta.com/docs/guides/create-an-api-token/main/#create-the-token)。

 如果您符合這些要求，就可以 AWS Glue 連線到 Okta 帳戶。對於一般連線，不需要在 Okta 中執行任何其他操作。

# 設定 Okta 連線
<a name="okta-configuring-connections"></a>

 Okta 支援兩種類型的身分驗證機制：
+  OAuth 驗證：Okta 支援 `AUTHORIZATION_CODE` 授權類型。
  +  此授權類型被視為「三條腿的」OAuth，因為其依賴將使用者重新導向至第三方授權伺服器來驗證使用者。在透過 AWS Glue 主控台建立連線時使用。 AWS Glue 主控台會將使用者重新導向至 Okta，使用者必須在其中登入 AWS Glue ，並允許請求的許可存取其 Okta 執行個體。
  +  使用者可以選擇在 Okta 中建立自己的連線應用程式，並在透過 AWS Glue 主控台建立連線時提供自己的用戶端 ID 和用戶端秘密。在此案例中，它們仍會重新導向至 Okta 以登入並授權 AWS Glue 存取其資源。
  +  此授權類型會產生重新整理字符和存取字符。存取字符是短期存留的，可以使用重新整理字符自動重新整理，而無需使用者互動。
  +  如需詳細資訊，請參閱[有關為授權碼 OAuth 流程建立連線應用程式的公有 Okta 文件](https://developers.google.com/workspace/guides/create-credentials)。
+  自訂驗證：
  +  如需有關產生自訂授權所需 API 金鑰的公有 Okta 文件，請參閱 [Okta 文件](https://developer.okta.com/docs/guides/create-an-api-token/main/#create-the-token)。

若要設定 Okta 連線：

1.  在 AWS Secrets Manager 中，使用下列詳細資訊建立秘密。必須為 AWS Glue中的每個連線建立機密。

   1.  對於 OAuth 驗證：
      +  對於客戶管理的連線應用程式，機密應包含以 `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` 作為金鑰的連線應用程式消費者機密。

   1.  對於自訂身分驗證：
      +  對於客戶管理的連線應用程式，機密應包含以 `OktaApiToken` 作為金鑰的連線應用程式消費者機密。

1. 在 中 AWS Glue Studio，依照下列步驟在 **Data Connections** 下建立連線：

   1.  在**連線**下，選擇建立連線。

   1. 選取**資料來源**時，請選取 Okta。

   1. 提供 Okta 子網域。

   1. 選取 Okta 帳戶的 Okta 網域 URL。

   1.  選取 AWS Glue 可以擔任並具有下列動作許可的 IAM 角色：

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  選取身分驗證類型以連線至資料來源。

   1.  對於 OAuth2 身分驗證類型，請提供 Okta 應用程式的**使用者管理的用戶端應用程式 ClientId**。

   1.  選取您要用於此連線`secretName`的 AWS Glue ，以放置字符。

   1.  如果想要使用您的網路，請選取網路選項。

1.  授予與您的 AWS Glue 任務相關聯的 IAM 角色讀取 的許可`secretName`。

1.  在您的 AWS Glue 任務組態中，提供 `connectionName`做為**其他網路連線**。

# 從 Okta 實體中讀取
<a name="okta-reading-from-entities"></a>

 **先決條件** 
+  您要從中讀取的 Okta 物件。請參閱以下支援的實體表格，以檢查可用實體。

 **支援的實體** 


| 實體 | 可以篩選 | 支援限制 | 支援排序依據 | 支援選取 \$1 | 支援分區 | 
| --- | --- | --- | --- | --- | --- | 
| 應用程式 | 是 | 是 | 否 | 是 | 否 | 
| Devices | 是 | 是 | 否 | 是 | 是 | 
| Groups (群組) | 是 | 是 | 是 | 是 | 是 | 
| 使用者 | 是 | 是 | 是 | 是 | 是 | 
| 使用者類型 | 否 | 否 | 否 | 是 | 否 | 

 **範例** 

```
okta_read = glueContext.create_dynamic_frame.from_options(
    connection_type="Okta",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "applications",
        "API_VERSION": "v1"
    }
```

 **Okta 實體和欄位詳細資訊** 

 實體清單：
+  應用程式：[https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Application/](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Application/) 
+  裝置：[https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Device/](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Device/) 
+  群組：[https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Group/](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Group/) 
+  使用者：[https://developer.okta.com/docs/api/openapi/okta-management/management/tag/User/](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/User/) 
+  使用者類型：[https://developer.okta.com/docs/api/openapi/okta-management/management/tag/UserType/](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/UserType/) 

 **分區查詢** 

 如果想要在 Spark 中使用並行，可以提供其他 Spark 選項 `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、`NUM_PARTITIONS`。使用這些參數，原始查詢會分區為可由 Spark 任務並行執行的子查詢的 `NUM_PARTITIONS` 數目。
+  `PARTITION_FIELD`：用來分區查詢的欄位名稱。
+  `LOWER_BOUND`：所選分區欄位的包含下限值。

   對於日期，我們接受 Spark SQL 查詢中使用的 Spark 日期格式。有效值的範例：`"2024-02-06"`。
+  `UPPER_BOUND`：所選分區欄位的唯一上限值。
+  `NUM_PARTITIONS`：分區數目。

 **範例** 

```
okta_read = glueContext.create_dynamic_frame.from_options(
    connection_type="okta",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "lastUpdated",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "lastMembershipUpdated"
        "LOWER_BOUND": "2022-08-10T10:28:46.000Z"
        "UPPER_BOUND": "2024-08-10T10:28:46.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Okta 連線選項參考
<a name="okta-connection-options"></a>

以下是 Okta 的連線選項：
+  `ENTITY_NAME`(String) - (必要) 用於讀取/寫入。Okta 中的物件名稱。
+  `API_VERSION`(String) - (必要) 用於讀取/寫入。您要使用的 Okta Rest API 版本。範例：v1。
+  `SELECTED_FIELDS`(List<String>) - 預設：empty(SELECT \$1)。用於讀取。您要為物件選取的資料欄。
+  `FILTER_PREDICATE`(String) - 預設：空白。用於讀取。其應該為 Spark SQL 格式。
+  `QUERY`(String) - 預設：空白。用於讀取。完整的 Spark SQL 查詢。
+  `PARTITION_FIELD`(String) - 用於讀取。用於分區查詢的欄位。
+  `LOWER_BOUND`(String) - 用於讀取。所選分區欄位的包含下限值。
+  `UPPER_BOUND`(String) - 用於讀取。所選分區欄位的唯一上限值。
+  `NUM_PARTITIONS`(Integer) - 預設：1。用於讀取。要讀取的分區數目。

# Okta 新帳戶和開發人員應用程式建立步驟
<a name="okta-create-account"></a>

 在 Okta 上建立開發人員帳戶，以存取 Okta API。免費 Okta 開發人員帳戶可提供存取權，讓您存取 Okt API 所需的大多數關鍵開發人員功能。

**若要在 Okta 上建立開發人員帳戶**

1.  導覽至 [https://developer.okta.com/signup/](https://console.cloud.google.com)。

1.  輸入帳戶資訊電子郵件、名字、姓氏和國家/區域。選擇**我不是機器人**，然後選擇**註冊**。

1.  驗證郵件會傳送到您註冊的郵件 ID。您將在電子郵件中收到用來啟用 Okta 開發人員帳戶的連結。選擇 **Activate (啟用)**。

1.  系統會將您重新導向至密碼重設頁面。輸入兩次新密碼，然後選擇**重設密碼**。

1.  系統會將您重新導向至 Okta 開發人員帳戶儀表板。

**若要建立用戶端應用程式和 OAuth 2.0 憑證**

1.  在開發人員儀表板中，選擇建立應用程式整合。  
![\[螢幕擷取畫面會顯示「建立 OAuth 用戶端 ID」頁面和「已授權的重新導向 URI」區段。可在此新增 URI，並在需要時選擇「新增 URI」。完成後，選擇「建立」。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/create-client-app-step-1.png)

1.  **建立新的應用程式整合**視窗隨即出現，並顯示各種登入方法。選取 **OIDC –OpenID Connect**。

1.  向下捲動至「應用程式類型」區段。選取為 **Web 應用程式**，然後選擇**下一步**。

1.  在「新 Web 應用程式整合」畫面中，填入下列資訊：
   + 應用程式整合名稱 - 輸入應用程式的名稱。
   + 授權類型 - 從清單中選擇**授權碼**和**重新整理字符**。
   + 登入重新導向 URI - 選擇**新增 URI** 並新增 `https://{regioncode}.console.aws.amazon.com/appflow/oauth`。例如，如果您使用的是 `us-west-2 (Oregon)` ，則可以新增 `https://us-east-1.console.aws.amazon.com/appflow/oauth`。
   + 受控存取 - 視需要將應用程式指派給使用者群組，然後選擇**儲存**。

1. 會產生用戶端 ID 和用戶端機密。

# 限制
<a name="okta-connector-limitations"></a>

以下是 Okta 連接器的限制：
+  對於「應用程式」實體，只能套用一個篩選條件。如果套用的篩選條件超過 1 個，則會傳回 400 Bad Request 錯誤，並附上錯誤摘要 –「無效的搜尋條件」。
+  只有搜尋查詢才支援排序依據。例如 ` http://dev-15940405.okta.com/api/v1/groups?search=type e.q. "OKTA_GROUP"&sortBy=lastUpdated&sortOrder=asc ` 