

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

# SQL 延伸模組資料來源連線
<a name="sagemaker-sql-extension-datasources-connection"></a>

在 JupyterLab 筆記本中使用 SQL 擴充功能之前，管理員或使用者必須建立與其資料來源的 AWS Glue 連線。SQL 延伸模組允許連線至資料來源，例如 Amazon Redshift Amazon Athena 或 Snowflake。

若要設定連線，管理員必須先確保其網路組態允許 Studio 與資料來源之間的通訊，然後授予必要的 IAM 許可，以允許 Studio 存取資料來源。如需管理員如何設定聯網的相關資訊，請參閱[設定 Studio 與資料來源之間的網路存取 (適用於管理員)](sagemaker-sql-extension-networking.md)。如需必須設定哪些政策的相關資訊，請參閱[設定 IAM 許可以存取資料來源 (適用於管理員)](sagemaker-sql-extension-datasources-connection-permissions.md)。一旦設定了連線，資料科學家就可以在其 JupyterLab 筆記本中使用 SQL 延伸模組，來瀏覽和查詢連線的資料來源。

**注意**  
我們建議您將資料庫存取憑證儲存為 Secrets Manager 中的秘密。若要了解如何建立用於儲存 Amazon Redshift 或 Snowflake 存取憑證的秘密，請參閱[在 Secrets Manager 中建立資料庫存取憑證的秘密](sagemaker-sql-extension-glue-connection-secrets.md)。

本節說明如何設定 AWS Glue 連線，並列出 Studio JupyterLab 應用程式透過連線存取資料所需的 IAM 許可。

**注意**  
[Amazon SageMaker Assets](sm-assets.md) 將 [Amazon DataZone](https://docs.aws.amazon.com/datazone/latest/userguide/what-is-datazone.html) 與 Studio 整合。它包含 SageMaker AI 藍圖，其中可讓管理員從 Amazon DataZone 網域內的 Amazon DataZone 專案建立 Studio 環境。  
使用 SQL 延伸模組時，從使用藍圖建立的 Studio 網域啟動的 JupyterLab 應用程式使用者可以自動存取與其 Amazon DataZone 目錄中資料資產的 AWS Glue 連線。這允許查詢這些資料來源，而無需手動設定連線。

**Topics**
+ [在 Secrets Manager 中建立資料庫存取憑證的秘密](sagemaker-sql-extension-glue-connection-secrets.md)
+ [建立 AWS Glue 連線 （適用於管理員）](sagemaker-sql-extension-datasources-glue-connection.md)
+ [建立使用者定義的 AWS Glue 連線](sagemaker-sql-extension-datasources-glue-connection-user-defined.md)
+ [設定 IAM 許可以存取資料來源 (適用於管理員)](sagemaker-sql-extension-datasources-connection-permissions.md)

# 在 Secrets Manager 中建立資料庫存取憑證的秘密
<a name="sagemaker-sql-extension-glue-connection-secrets"></a>

建立連線之前，建議您將資料庫存取憑證儲存為 中的秘密 AWS Secrets Manager。或者，您可以根據透過 AWS Identity and Access Management (IAM) 許可政策授予的許可來產生臨時資料庫登入資料，以管理使用者對資料庫的存取。如需詳細資訊，請參閱[使用 IAM 驗證來產生資料庫使用者憑證](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html)。

## 建立 Amazon Redshift 存取憑證的機密
<a name="sagemaker-sql-extension-redshift-secret"></a>

**在 AWS Secrets Manager 中存放 Amazon Redshift 資訊**

1. 從 AWS 管理主控台導覽至 Secrets Manager。

1. 選擇**儲存新機密**。

1. 在**機密類型**下，選擇 **Amazon Redshift 的憑證**。

1. 輸入啟動 Amazon Redshift 叢集時設定的管理員使用者名稱和密碼。

1. 選取與機密相關聯的 Amazon Redshift 叢集。

1. 為您的機密命名。

1. 其餘設定可保留為初始建立秘密時的預設值，或視需要自訂。

1. 建立機密並擷取其 ARN。

## 建立 Amazon Redshift Serverless 存取憑證的秘密
<a name="sagemaker-sql-extension-redshift-serverless-secret"></a>

**如果您需要連線至 Amazon Redshift Serverless，請遵循下列步驟**

1. 從 AWS 管理主控台導覽至 Secrets Manager。

1. 選擇**儲存新機密**。

1. 在**機密類型**下，選擇**其他類型的機密**。

1. 在**金鑰/值對**中，選擇**純文字**，然後複製下列 JSON 內容。將使用者和密碼取代為其實際值：

   ```
   {
     "user": "redshift_user",
     "password": "redshift_password"
   }
   ```

1. 建立秘密並擷取其 ARN。

1. 在 JupyterLab 的 SQL 延伸模組中建立新的連線時，請視需要提供所有其他 Amazon Redshift 連線參數。

## 建立 Snowflake 存取憑證的機密
<a name="sagemaker-sql-extension-snowflake-secret"></a>

本節提供有關 Snowflake 特定 JSON 定義檔案中秘密和連線屬性的詳細資訊。建立您的連線之前，建議您將 Snowflake 存取憑證儲存為 Secrets Manager 中的秘密。

**在 Secrets Manager 中存放 Amazon Redshift 資訊**

1. 從 AWS 管理主控台導覽至 Secrets Manager。

1. 選擇**儲存新機密**。

1. 在**機密類型**下，選擇**其他類型的機密**。

1. 在金鑰/值對中，選擇**純文字**，然後複製下列 JSON 內容。將 `user`、`password` 和 `account` 取代為其值。

   ```
   {
       "user":"snowflake_user",
       "password":"snowflake_password",
       "account":"account_id"
   }
   ```

1. 為機密命名。

1. 其餘設定可保留為初始建立秘密時的預設值，或視需要自訂。

1. 建立機密並擷取其 ARN。

# 建立 AWS Glue 連線 （適用於管理員）
<a name="sagemaker-sql-extension-datasources-glue-connection"></a>

若要搭配 SQL 擴充功能使用資料來源，管理員可以為每個資料來源設定 AWS Glue 連線。這些連線會存放必要的組態詳細資訊，以存取資料來源並與其互動。一旦建立了連線並授予[適當的許可](sagemaker-sql-extension-datasources-connection-permissions.md)，共用相同執行角色的 [Amazon SageMaker Studio 空間](studio-updated-spaces.md) 的所有使用者都可看見連線。

若要建立這些連線：
+ 首先，建立一個 JSON 檔案，定義每個資料來源的連線屬性。JSON 檔案包含詳細資訊，例如資料來源識別符、存取登入資料和其他相關的組態參數，以透過 AWS Glue 連線存取資料來源。
+ 然後使用 AWS Command Line Interface (AWS CLI) 建立 AWS Glue 連線，並將 JSON 檔案做為參數傳遞。 AWS CLI 命令會從 JSON 檔案讀取連線詳細資訊，並建立適當的連線。
**注意**  
SQL 延伸模組僅支援使用 AWS CLI 建立連線。

建立 AWS Glue 連線之前，請確定您完成下列步驟：
+ 安裝和設定 AWS Command Line Interface (AWS CLI)。如需如何安裝和設定 的詳細資訊 AWS CLI，請參閱[關於第 2 AWS CLI 版](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)。確保用於設定 之 IAM 使用者或角色的存取金鑰和字符 AWS CLI 具有建立 AWS Glue 連線所需的許可。否則，新增一個允許 `glue:CreateConnection` 動作的政策。
+ 了解如何使用 AWS Secrets Manager。我們建議您使用 Secrets Manager 為資料存放區提供連線憑證和任何其他敏感資訊。如需使用 Secrets Manager 存放登入資料的詳細資訊，請參閱在 [AWS Secrets Manager 中存放連線登入](https://docs.aws.amazon.com/glue/latest/dg/connection-properties-secrets-manager.html)資料。

## 建立連線定義 JSON 檔案
<a name="sagemaker-sql-extension-glue-connection-config"></a>

若要建立 AWS Glue 連線定義檔案，請建立 JSON 檔案來定義已安裝和設定 之機器上的連線詳細資訊 AWS CLI。針對此範例，將檔案命名為 `sagemaker-sql-connection.json`。

連線定義檔案應遵循下列一般格式：
+ **Name** 是連線的名稱。
+ **Description** 是連線的文字描述。
+ **ConnectionType** 是連線的類型。選擇 `REDSHIFT`、`ATHENA` 或 `SNOWFLAKE`。
+ **ConnectionProperties** 是連線屬性的鍵值對映射，例如 AWS 秘密的 ARN 或資料庫的名稱。

```
{
    "ConnectionInput": {
        "Name": <GLUE_CONNECTION_NAME>,
        "Description": <GLUE_CONNECTION_DESCRIPTION>,
        "ConnectionType": "REDSHIFT | ATHENA | SNOWFLAKE",
        "ConnectionProperties": {
            "PythonProperties": "{\"aws_secret_arn\": <SECRET_ARN>, \"database\": <...>}"
        }
    }
}
```

**注意**  
`ConnectionProperties` 金鑰內的屬性由字串化金鑰/值對組成。以反斜線 (`\`) 字元逸出金鑰或值中使用的任何雙引號。
Secrets Manager 中可用的所有屬性也可以直接透過 `PythonProperties` 提供。不過，不建議在 `PythonProperties` 中包含密碼等敏感欄位。反之，偏好的方法是使用 Secrets Manager。

您可以在下列各節中找到不同資料存放區特有的連線定義檔案。

每個資料來源的連線定義檔案都包含從 SQL 延伸模組連線至這些資料存放區所需的特定屬性和組態。如需定義與該來源連線的詳細資訊，請參閱適當的一節。
+ 若要建立 Amazon Redshift 的 AWS Glue 連線，請參閱 中的範例定義檔案[設定 Amazon Redshift 的 AWS Glue 連線](#sagemaker-sql-extension-redshift-glue-connection-config)。
+ 若要建立 Amazon Athena 的 AWS Glue 連線，請參閱 中的範例定義檔案[設定 Athena 的 AWS Glue 連線](#sagemaker-sql-extension-athena-glue-connection-config)。
+ 若要建立 Snowflake 的 AWS Glue 連線，請參閱 中的範例定義檔案[設定 Snowflake 的 AWS Glue 連線](#sagemaker-sql-extension-snowflake-glue-connection-config)。

### 設定 Amazon Redshift 的 AWS Glue 連線
<a name="sagemaker-sql-extension-redshift-glue-connection-config"></a>

本節提供有關 Amazon Redshift 特定 JSON 定義檔案中秘密和連線屬性的詳細資訊。在建立您的連線組態檔案之前，建議您將 Amazon Redshift 存取憑證儲存為 Secrets Manager 中的秘密。或者，您可以根據透過 AWS Identity and Access Management (IAM) 許可政策授予的許可來產生臨時資料庫登入資料，以管理使用者對 Amazon Redshift 資料庫的存取。如需詳細資訊，請參閱[使用 IAM 身分驗證產生資料庫使用者登入資料](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html)。

#### 建立 Amazon Redshift 存取憑證的機密
<a name="sagemaker-sql-extension-redshift-secret"></a>

**在 AWS Secrets Manager 中存放 Amazon Redshift 資訊**

1. 從 AWS 主控台導覽至 Secrets Manager。

1. 選擇**儲存新機密**。

1. 在**機密類型**下，選擇 **Amazon Redshift 的憑證**。

1. 輸入啟動 Amazon Redshift 叢集時設定的管理員使用者名稱和密碼。

1. 選取與機密相關聯的 Amazon Redshift 叢集。

1. 為您的機密命名。

1. 其餘設定可保留為初始建立秘密時的預設值，或視需要自訂。

1. 建立機密並擷取其 ARN。

#### 設定 Amazon Redshift 的 AWS Glue 連線
<a name="sagemaker-sql-extension-redshift-glue-connection-creation"></a>

SQL 擴充功能會使用自訂連線連線至資料來源 AWS Glue 。如需建立 AWS Glue 連線以連接資料來源的一般資訊，請參閱 [建立 AWS Glue 連線 （適用於管理員）](#sagemaker-sql-extension-datasources-glue-connection)。下列範例是連線至 Amazon Redshift 的範例 AWS Glue 連線定義。

在建立新連線之前，請謹記下列建議：
+ `PythonProperties` 金鑰內的屬性由字串化金鑰/值對組成。以反斜線 (`\`) 字元逸出金鑰或值中使用的任何雙引號。
+ 在連線定義檔案中，輸入連線的名稱和描述，將 `aws_secret_arn` 中秘密的 ARN 取代為先前所建立秘密的 ARN。
+ 確定上述連線定義中透過其名稱宣告的資料庫符合叢集資料庫。您可以驗證這一點，方法是前往 [Amazon Redshift 主控台](https://console.aws.amazon.com/redshiftv2/)上的叢集詳細資訊頁面，並在**屬性**區段中的**資料庫組態**下驗證資料庫名稱。
+ 如需其他參數，請參閱 [Amazon Redshift 連線參數](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-redshift)中 Amazon Redshift 支援的連線屬性清單。
**注意**  
根據預設，除非連線屬性中的 `auto_commit` 設定為 `true`，否則 Python 的 SQL 延伸模組連接器會在交易中執行所有查詢。
您可以將包括 `database` 名稱在內的所有連線參數新增至秘密。

```
{
  "ConnectionInput": {
      "Name": "Redshift connection name",
      "Description": "Redshift connection description",
      "ConnectionType": "REDSHIFT",
      "ConnectionProperties": {
          "PythonProperties":"{\"aws_secret_arn\": \"arn:aws:secretsmanager:region:account_id:secret:secret_name\", \"database\":\"database_name\", \"database_metadata_current_db_only\": false}"
      }
  }
}
```

更新定義檔案後，請依照 中的步驟[建立 AWS Glue 連線](#sagemaker-sql-extension-datasources-glue-connection-creation)建立 AWS Glue 連線。

### 設定 Athena 的 AWS Glue 連線
<a name="sagemaker-sql-extension-athena-glue-connection-config"></a>

本節提供有關 Athena 特定 JSON 定義檔案中連線屬性的詳細資訊。

#### 設定 Athena 的 AWS Glue 連線
<a name="sagemaker-sql-extension-athena-glue-connection-creation"></a>

SQL 擴充功能會使用自訂連線連線至資料來源 AWS Glue 。如需建立 AWS Glue 連線以連接資料來源的一般資訊，請參閱 [建立 AWS Glue 連線 （適用於管理員）](#sagemaker-sql-extension-datasources-glue-connection)。下列範例是連線至 Athena 的範例 AWS Glue 連線定義。

在建立新連線之前，請謹記下列建議：
+ `ConnectionProperties` 金鑰內的屬性由字串化金鑰/值對組成。以反斜線 (`\`) 字元逸出金鑰或值中使用的任何雙引號。
+ 在連線定義檔案中，輸入連線的名稱和描述、將 `catalog_name` 取代為目錄的名稱、將 `s3_staging_dir` 取代為 Amazon S3 儲存貯體中輸出目錄的 Amazon S3 URI (統一資源識別碼)，並將 `region_name` 取代為 Amazon S3 儲存貯體的區域。
+ 如需其他參數，請參閱 [Athena 連線參數](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-athena)中 Athena 支援的連線屬性清單。
**注意**  
您可以將包括 `catalog_name` 或 `s3_staging_dir` 在內的所有連線參數新增至秘密。
如果您指定 `workgroup`，則不需要指定 `s3_staging_dir`。

```
{
    "ConnectionInput": {
        "Name": "Athena connection name",
        "Description": "Athena connection description",
        "ConnectionType": "ATHENA",
        "ConnectionProperties": {
            "PythonProperties": "{\"catalog_name\": \"catalog_name\",\"s3_staging_dir\": \"s3://amzn-s3-demo-bucket_in_same_region/output_query_results_dir/\", \"region_name\": \"region\"}"
        }
    }
}
```

更新定義檔案後，請依照 中的步驟[建立 AWS Glue 連線](#sagemaker-sql-extension-datasources-glue-connection-creation)建立 AWS Glue 連線。

### 設定 Snowflake 的 AWS Glue 連線
<a name="sagemaker-sql-extension-snowflake-glue-connection-config"></a>

本節提供有關 Snowflake 特定 JSON 定義檔案中秘密和連線屬性的詳細資訊。在建立您的連線組態檔案之前，建議您將 Snowflake 存取憑證儲存為 Secrets Manager 中的秘密。

#### 建立 Snowflake 存取憑證的機密
<a name="sagemaker-sql-extension-snowflake-secret"></a>

**在 Secrets Manager 中存放 Amazon Redshift 資訊**

1. 從 AWS 主控台導覽至 AWS Secrets Manager。

1. 選擇**儲存新機密**。

1. 在**機密類型**下，選擇**其他類型的機密**。

1. 在金鑰/值對中，選擇**純文字**，然後複製下列 JSON 內容。將 `user`、`password` 和 `account` 取代為其值。

   ```
   {
       "user":"snowflake_user",
       "password":"snowflake_password",
       "account":"account_id"
   }
   ```

1. 為機密命名。

1. 其餘設定可保留為初始建立秘密時的預設值，或視需要自訂。

1. 建立機密並擷取其 ARN。

#### 設定 Snowflake 的 AWS Glue 連線
<a name="sagemaker-sql-extension-snowflake-glue-connection-creation"></a>

SQL 擴充功能會使用自訂連線連線至資料來源 AWS Glue 。如需建立 AWS Glue 連線以連接資料來源的一般資訊，請參閱 [建立 AWS Glue 連線 （適用於管理員）](#sagemaker-sql-extension-datasources-glue-connection)。下列範例是連線至 Snowflake 的範例 AWS Glue 連線定義。

在建立新連線之前，請謹記下列建議：
+ `ConnectionProperties` 金鑰內的屬性由字串化金鑰/值對組成。以反斜線 (`\`) 字元逸出金鑰或值中使用的任何雙引號。
+ 在連線定義檔案中，輸入連線的名稱和描述，然後將 `aws_secret_arn` 中秘密的 ARN 取代為先前所建立秘密的 ARN，以及 `account` 中您的帳戶 ID。
+ 如需其他參數，請參閱 [Snowflake 連線參數](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-snowflake)中 Snowflake 支援的連線屬性清單。
**注意**  
您可以將包括 `account` 在內的所有連線參數新增至秘密。

```
{
    "ConnectionInput": {
        "Name": "Snowflake connection name",
        "Description": "Snowflake connection description",
        "ConnectionType": "SNOWFLAKE",
        "ConnectionProperties": {
            "PythonProperties":  "{\"aws_secret_arn\": \"arn:aws:secretsmanager:region:account_id:secret:secret_name\", \"account\":\"account_id\"}"}"
        }
    }
}
```

更新定義檔案後，請依照 中的步驟[建立 AWS Glue 連線](#sagemaker-sql-extension-datasources-glue-connection-creation)建立 AWS Glue 連線。

## 建立 AWS Glue 連線
<a name="sagemaker-sql-extension-datasources-glue-connection-creation"></a>

若要透過 建立 AWS Glue 連線 AWS CLI，請使用您的連線定義檔案並執行此 AWS CLI 命令。將`region`預留位置取代為您的 AWS 區域名稱，並提供定義檔案的本機路徑。

**注意**  
組態定義檔案的路徑前面必須有 `file://`。

```
aws --region region glue create-connection --cli-input-json file://path_to_file/sagemaker-sql-connection.json
```

執行下列命令，確認 AWS Glue 已建立連線，並檢查您的連線名稱。

```
aws --region region glue get-connections
```

或者，您可以更新現有的 AWS Glue 連線，如下所示：
+ 視需要修改 AWS Glue 連線定義檔案。
+ 執行下列命令來更新連線。

  ```
  aws --region region glue update-connection --name glue_connection_name --cli-input-json file://path_to_file/sagemaker-sql-connection.json
  ```

# 建立使用者定義的 AWS Glue 連線
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined"></a>

**注意**  
使用者透過 SQL 延伸 UI 建立的所有 AWS Glue 連線都會自動標記下列項目：  
`UserProfile: user-profile-name`
`AppType: "JL"`
這些標籤套用到透過 SQL 延伸 UI 建立的 AWS Glue 連線有兩個用途。`"UserProfile": user-profile-name` 標籤允許識別建立 AWS Glue 連線的特定使用者設定檔，提供負責連線的使用者可見性。`"AppType": "JL"` 標籤會分類連線的來源，將其與 JupyterLab 應用程式建立關聯。這可讓這些連線與可能已透過其他方式建立的連線有所區別，例如 AWS CLI。

## 先決條件
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined-prerequisites"></a>

使用 SQL 擴充功能 UI 建立 AWS Glue 連線之前，請確定您已完成下列任務：
+ 請您的管理員：
  + 啟用 Studio 網域與您要連線的資料來源之間的網路通訊。若要了解聯網要求，請參閱 [設定 Studio 與資料來源之間的網路存取 (適用於管理員)](sagemaker-sql-extension-networking.md)。
  + 確保已設定必要的 IAM 許可，用於管理 AWS Glue 連線和對 Secrets Manager 的存取。若要了解必要的許可，請參閱[設定 IAM 許可以存取資料來源 (適用於管理員)](sagemaker-sql-extension-datasources-connection-permissions.md)。
**注意**  
管理員可以限制使用者只能存取使用者在 JupyterLab 應用程式內建立的連線。這可以透過設定範圍縮小至使用者設定檔的[標籤型存取控制](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-sql-extension-datasources-connection-permissions.html#user-defined-connections-permissions)來完成此操作。
+ 檢查連線屬性和指示，以在[在 Secrets Manager 中建立資料庫存取憑證的秘密](sagemaker-sql-extension-glue-connection-secrets.md)中為您的資料來源建立秘密。

## 使用者工作流程
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined-steps"></a>

下列步驟會在建立使用者連線時提供使用者工作流程：

1. **選取資料來源類型**：選擇*新增連線*圖示時，會開啟表單，提示使用者選取要連線的資料來源類型，例如 Amazon Redshift、Athena 或 Snowflake。

1. **提供連線屬性**：根據選取的資料來源，動態載入相關的連線屬性。表單會指出所選資料來源的必要或選用欄位。若要了解資料來源的可用屬性，請參閱[連線參數](sagemaker-sql-extension-connection-properties.md)。

1. **選取您的 AWS Secrets Manager ARN**：對於 Amazon Redshift 和 Snowflake 資料來源，系統會提示使用者選取儲存敏感資訊的 AWS Secrets Manager ARN，例如使用者名稱和密碼。若要了解如何為您的資料來源建立秘密，請參閱[在 Secrets Manager 中建立資料庫存取憑證的秘密](sagemaker-sql-extension-glue-connection-secrets.md)。

1. **儲存您的連線詳細資訊**：按一下**建立**時，提供的連線屬性會儲存為 AWS Glue 。連線。

1. **測試您的連線**：如果連線成功，則相關聯的資料庫和資料表會在瀏覽器中變成可見的。如果連線失敗，則會顯示一則錯誤訊息，提示使用者檢閱和更正連線詳細資訊。

1. **熟悉 SQL 延伸模組功能**：若要了解延伸模組的功能，請參閱 [SQL 延伸功能和用法](sagemaker-sql-extension-features.md)。

1. **(選用) 更新或刪除使用者建立的連線**：如果使用者已獲授予必要的許可，他們可以更新或刪除他們已建立的連線。若要進一步了解必要的許可，請參閱[使用者定義的連線需要 IAM 許可](sagemaker-sql-extension-datasources-connection-permissions.md#user-defined-connections-permissions)。

# 設定 IAM 許可以存取資料來源 (適用於管理員)
<a name="sagemaker-sql-extension-datasources-connection-permissions"></a>

管理員應確保 JupyterLab 應用程式使用的執行角色具有必要的 AWS IAM 許可，以透過設定的 AWS Glue 連線存取資料。
+ **管理員使用 建立的連線 AWS CLI**：若要檢視[管理員建立的](sagemaker-sql-extension-datasources-glue-connection.md) AWS Glue 連線並存取其資料，使用者需要讓管理員將特定許可連接到 Studio 中 JupyterLab 應用程式所使用的 SageMaker AI 執行角色。這包括對 AWS Glue的存取、Secrets Manager 和資料庫特定的許可。共用執行角色的所有應用程式都可以看到管理員建立的連線，因為此執行角色獲授予檢視特定 AWS Glue 目錄或資料庫的許可。若要了解每種資料來源類型的必要許可清單，請參閱[管理員定義的連線需要 IAM 許可](#admin-defined-connections-permissions)中管理員定義的連線許可。
+ **使用者在 JupyterLab 中使用 SQL 延伸模組 UI 建立的連線**：除非連線的可見性範圍縮小至使用者建立的連線，否則也會列出共用相同執行角色的[使用者設定檔建立的](sagemaker-sql-extension-datasources-glue-connection-user-defined.md)連線。使用者建立的連線會透過建立它們的使用者設定檔加以標記。若要限制僅建立連線的使用者才能檢視、更新或刪除這些使用者建立的連線，管理員可以將其他標籤型存取控制限制新增至執行角色 IAM 許可。若要了解所需的其他標籤型存取控制，請參閱[使用者定義的連線需要 IAM 許可](#user-defined-connections-permissions)。

## 管理員定義的連線需要 IAM 許可
<a name="admin-defined-connections-permissions"></a>

若要授予 Studio 中 JupyterLab 應用程式使用的 SageMaker AI 執行角色透過 AWS Glue 連線存取資料來源，請將下列內嵌政策連接至角色。

若要檢視每個資料來源或驗證方法的特定許可和政策詳細資訊，請選擇下面的相關連線類型。

**注意**  
建議您將政策的許可限制為僅必要的資源和動作。  
若要縮小政策範圍並授予最低權限存取，請將政策中的 `"Resource": ["*"]` 萬用字元取代為需要存取的確切資源的特定 ARN。如需如何控制資源存取的詳細資訊，請參閱[使用精細 ARN 許可微調 AWS 資源存取](#resource-access-control)。

### 所有連線類型
<a name="datasources-connection-permissions-all"></a>

**注意**  
我們強烈建議將此政策範圍縮小到僅限必要的動作和資源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3AndDataSourcesMetadata",
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabases",
                "glue:GetSchema",
                "glue:GetTables",
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation",
                "glue:GetDatabase",
                "glue:GetTable",
                "glue:ListSchemas",
                "glue:GetPartitions"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:glue:us-east-1:111122223333:catalog",
    "arn:aws:glue:us-east-1:111122223333:connection/*"
            ]
        },
        {
            "Sid": "ExecuteQueries",
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:ListTableMetadata",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:RunQuery",
                "athena:StartSession",
                "athena:GetQueryResults",
                "athena:ListWorkGroups",
                "s3:ListMultipartUploadParts",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "athena:GetDataCatalog",
                "s3:AbortMultipartUpload",
                "s3:GetObject",
                "s3:PutObject",
                "athena:GetWorkGroup"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:athena:us-east-1:111122223333:workgroup/workgroup-name"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name"
            ]
        },
        {
            "Sid": "GetClusterCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:cluster:cluster-name"
            ]
        }
    ]
}
```

------

### Athena
<a name="datasources-connection-permissions-athena"></a>

**注意**  
我們強烈建議將此政策的範圍縮小到僅所需的資源。

如需詳細資訊，請參閱 [Athena 文件](https://docs.aws.amazon.com/athena/latest/ug/federated-query-iam-access.html)中的*範例 IAM 許可政策*。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3AndDataSourcesMetadata",
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabases",
                "glue:GetSchema",
                "glue:GetTables",
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation",
                "glue:GetDatabase",
                "glue:GetTable",
                "glue:ListSchemas",
                "glue:GetPartitions"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",                
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "ExecuteAthenaQueries",
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:ListTableMetadata",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:RunQuery",
                "athena:StartSession",
                "athena:GetQueryResults",
                "athena:ListWorkGroups",
                "s3:ListMultipartUploadParts",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "athena:GetDataCatalog",
                "s3:AbortMultipartUpload",
                "s3:GetObject",
                "s3:PutObject",
                "athena:GetWorkGroup"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:athena:us-east-2:111122223333:workgroup/workgroup-name"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"       
            ]
        }
    ]
}
```

------

### Amazon Redshift 和 Amazon Redshift Serverless (使用者名稱和密碼驗證) / Snowflake
<a name="datasources-connection-permissions-snowflake-redshift-user-password"></a>

**注意**  
我們強烈建議將此政策的範圍縮小到僅所需的資源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"            
            ]
        }
    ]
}
```

------

### Amazon Redshift (IAM 驗證)
<a name="datasources-connection-permissions-redshift-iam"></a>

**注意**  
我們強烈建議將此政策的範圍縮小到僅所需的資源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:connection/*",
                "arn:aws:glue:us-east-1:111122223333:connection/connection-name"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name",
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name-with-suffix"
            ]
        },
        {
            "Sid": "GetClusterCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:cluster:cluster-name",
                "arn:aws:redshift:us-east-1:111122223333:dbuser:cluster-name/db-user-name"
            ]
        }
    ]
}
```

------

### Amazon Redshift Serverless (IAM 驗證)
<a name="datasources-connection-permissions-redshift-serverless-iam"></a>

**注意**  
我們強烈建議將此政策的範圍縮小到僅所需的資源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"         
            ]
        },
        {
            "Sid": "GetRedshiftServerlessCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift-serverless:GetCredentials"
            ],
            "Resource": [
                "arn:aws:redshift-serverless:us-east-2:111122223333:namespace/namespace-id"           
            ]
        }
    ]
}
```

------

## 使用者定義的連線需要 IAM 許可
<a name="user-defined-connections-permissions"></a>

使用者的 IAM 政策許可可以考慮 AWS Glue 連線資源上是否存在`UserProfile`標籤。
+ **若要檢視 AWS Glue 連線**：
  + 使用者可以檢視沒有 `UserProfile` 標籤的所有連線 (由管理員建立)。
  + 使用者可以檢視其具有的 `UserProfile` 標籤含有與其使用者設定檔相同值的連線。
  + 使用者無法檢視其具有的 `UserProfile` 標籤含有與其使用者設定檔不同值的連線。
+ **若要更新或刪除 AWS Glue 連線**：
  + 使用者可以更新或刪除其具有的 `UserProfile` 標籤含有與其使用者設定檔相同值的連線。
  + 使用者無法更新或刪除其具有的 `UserProfile` 標籤含有與其使用者設定檔不同值的連線。
  + 使用者無法更新或刪除沒有 `UserProfile` 標籤的連線。

若要達成此目的，管理員必須授予使用者設定檔的 JupyterLab 應用程式所使用的執行角色，超出其現有[管理員定義連線許可](#admin-defined-connections-permissions)的額外許可。具體而言，除了存取管理員定義 AWS Glue 連線所需的許可之外，還必須授予以下兩個額外的 IAM 許可給使用者的執行角色：
+ 建立 AWS Glue 連線並將`UserProfile`標籤與使用者設定檔名稱的值建立關聯的許可。
+ 檢視、更新和刪除標籤`UserProfile`符合使用者設定檔名稱之 AWS Glue 連線的許可。

此許可會根據特定使用者設定檔標籤值，限制對 AWS Glue 連線的存取。使用您要設為目標之使用者的設定檔名稱更新 `UserProfile` 標籤值。

```
"Action": [
    "glue:GetConnection",
    "glue:GetConnections"    
],
"Resource": [
    "arn:aws:glue:region:account_id:connection/*"
],
"Condition": {
    "StringEqualsIfExists": {
        "aws:ResourceTag/UserProfile": "user_profile_name"
    }
}
```

此許可將建立、更新和刪除使用者所建立連線的能力限制為僅限具有指定 `UserProfile` 標籤值的使用者設定檔案所建立的連線。

```
"Action": [
    "glue:DeleteConnection",
    "glue:UpdateConnection",
    "glue:CreateConnection",
    "glue:TagResource"
],
"Resource": [
    "arn:aws:glue:region:account_id:connection/*"
],
"Condition": {
    "StringEquals": {
        "aws:ResourceTag/UserProfile": "user_profile"
    }
}
```

## 使用精細 ARN 許可微調 AWS 資源存取
<a name="resource-access-control"></a>

若要更精細地控制對 AWS 資源的存取，請將政策`"Resource": ["*"]`中的萬用字元資源取代為僅需要存取之資源的特定 Amazon Resource Name (ARNs)。使用確切 ARN 而非萬用字元可限制對預期資源的存取。
+ **使用特定的 Amazon S3 儲存貯體 ARN**

  例如，儲存貯體層級或物件層級操作的 ` "arn:aws:s3:::bucket-name/*"` 或 `"arn:aws:s3:::bucket-name"`。

  如需 Amazon S3 中所有資源類型的相關資訊，請參閱 [Amazon S3 定義的資源類型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-resources-for-iam-policies)。
+ **使用特定 AWS Glue 資料庫 ARNs**

  例如 ` "arn:aws:glue:region:account-id:catalog"` 或 ` "arn:aws:glue:region:account-id:database/db-name"`。如需 中所有資源類型的資訊 AWS Glue，請參閱 [定義的資源類型 AWS Glue](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-resources-for-iam-policies)。
+ **使用特定的 Athena 工作群組 ARN**

  例如 `"arn:aws:athena:region:account-id:workgroup/workgroup-name"`。如需 Athena 中所有資源類型的相關資訊，請參閱 [Athena 定義的資源類型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html#amazonathena-resources-for-iam-policies)。
+ **使用特定的 AWS Secrets Manager 秘密 ARNs**

  例如 `"arn:aws:secretsmanager:region:account-id:secret:secret-name"`。如需 AWS Secrets Manager 中所有資源類型的資訊，請參閱 [AWS Secrets Manager 定義的資源類型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssecretsmanager.html#awssecretsmanager-resources-for-iam-policies)
+ **使用特定的 Amazon Redshift 叢集 ARN**

  例如 `"arn:aws:redshift:region:account-id:cluster:cluster-name"`。如需 Amazon Redshift 中所有資源類型的相關資訊，請參閱 [Amazon Redshift 定義的資源類型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html#amazonredshift-resources-for-iam-policies)。如需 Redshift Serverless 中所有資源類型的相關資訊，請參閱 [Redshift Serverless 定義的資源類型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftserverless.html#amazonredshiftserverless-resources-for-iam-policies)。