

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 存取其他 AWS 資源的許可
<a name="copy-usage_notes-access-permissions"></a>

 若要在叢集與其他 AWS 資源之間移動資料，例如 Amazon S3、Amazon DynamoDB、Amazon EMR 或 Amazon EC2，您的叢集必須具有存取資源和執行必要動作的許可。例如，若要從 Amazon S3 載入資料，COPY 必須具備儲存貯體的 LIST 存取權和儲存貯體物件的 GET 存取權。如需最低許可的相關資訊，請參閱 [COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可](#copy-usage_notes-iam-permissions)。

叢集必須經過驗證，才能獲得授權來存取資源。您可以選擇下列任一種身分驗證方法：
+ [角色類型存取控制](#copy-usage_notes-access-role-based) – 對於角色型存取控制，您可以指定叢集用於身分驗證和授權的 AWS Identity and Access Management (IAM) 角色。為了保護您的 AWS 登入資料和敏感資料，強烈建議使用角色型身分驗證。
+ [金鑰型存取控制](#copy-usage_notes-access-key-based) – 對於金鑰型存取控制，請以純文字形式提供使用者的 AWS 存取憑證 （存取金鑰 ID 和私密存取金鑰）。

## 角色類型存取控制
<a name="copy-usage_notes-access-role-based"></a>

使用<a name="copy-usage_notes-access-role-based.phrase"></a>角色型存取控制時，叢集會暫時代表您擔任 IAM 角色。然後，根據角色獲予的授權，叢集即可存取所需的 AWS 資源。

建立 IAM *角色*類似於授予許可給使用者，因為它是 AWS 身分，具有判定其在 AWS中可執行和不可執行的操作之許可政策。但是，角色可以由任何需要此角色的實體來擔任，而不必與一個使用者產生獨特的關聯。此外，角色沒有任何相關聯的登入資料 (密碼或存取金鑰)。反之，如果角色與叢集相關聯，則會動態建立存取金鑰並將該金鑰提供給叢集。

我們建議您使用角色型存取控制，因為它除了保護您的 AWS 登入資料之外，還提供更安全、更精細的資源 AWS 和敏感使用者資料的存取控制。

角色型身分驗證提供下列優點：
+ 您可以使用 AWS 標準 IAM 工具來定義 IAM 角色，並將角色與多個叢集建立關聯。修改角色的存取政策時，會將變更自動套用至所有使用該角色的叢集。
+ 您可以定義精細的 IAM 政策，授予特定叢集和資料庫使用者存取特定 AWS 資源和動作的許可。
+ 您的叢集會在執行時間取得臨時工作階段登入資料，並視需要重新整理登入資料，直到操作完成。如果您使用金鑰型臨時登入資料，萬一臨時登入資料在操作完成之前就過期，則操作會失敗。
+ 不會在 SQL 程式碼中儲存或傳輸存取金鑰 ID 和私密存取金鑰。

若要使用角色型存取控制，您必須先使用 Amazon Redshift 服務角色類型建立 IAM 角色，再將該角色連接至叢集。角色至少必須具備 [COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可](#copy-usage_notes-iam-permissions)中列出的許可。如需建立 IAM 角色並將其連接至叢集的步驟，請參閱《[Amazon Redshift 管理指南》中的授權 Amazon Redshift 代表您存取 AWS 其他服務](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html)。 **

您可以使用 Amazon Redshift 管理主控台、CLI 或 API 將角色新增至叢集，或檢視與叢集相關聯的角色。如需詳細資訊，請參閱《Amazon Redshift 管理指南》**中的[將 IAM 角色與叢集建立關聯](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html)。

建立 IAM 角色時，IAM 會傳回角色的 Amazon Resource Name (ARN)。若要指定 IAM 角色，請使用 [使用 IAM\_ROLE 參數](copy-parameters-authorization.md#copy-iam-role) 參數或 [使用 CREDENTIALS 參數](copy-parameters-authorization.md#copy-credentials) 參數來提供角色 ARN。

例如，假設下列角色已附加至叢集。

```
"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"
```

下列 COPY 命令範例使用 IAM\_ROLE 參數，搭配上一個範例中的 ARN，以驗證身分並存取 Amazon S3。

```
copy customer from 's3://amzn-s3-demo-bucket/mydata'  
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

下列 COPY 命令範例使用 CREDENTIALS 參數來指定 IAM 角色。

```
copy customer from 's3://amzn-s3-demo-bucket/mydata' 
credentials 
'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

此外，超級使用者可以將 ASSUMEROLE 權限授與資料庫使用者和群組，以提供 COPY 操作角色的存取權。如需相關資訊，請參閱[GRANT](r_GRANT.md)。

## 金鑰型存取控制
<a name="copy-usage_notes-access-key-based"></a>

使用<a name="copy-usage_notes-access-key-based.phrase"></a>金鑰型存取控制，您可以為有權存取包含資料的 AWS 資源的 IAM 使用者提供存取金鑰 ID 和私密存取金鑰。您可以將 [使用 ACCESS\_KEY\_ID 和 SECRET\_ACCESS\_KEY 參數](copy-parameters-authorization.md#copy-access-key-id) 參數一起使用，或使用 [使用 CREDENTIALS 參數](copy-parameters-authorization.md#copy-credentials) 參數。

**注意**  
強烈建議使用 IAM 角色來驗證身分，而不要提供純文字存取金鑰 ID 和私密存取金鑰。如果您選擇以金鑰為基礎的存取控制，則絕不要使用 AWS 您的帳戶 （根） 登入資料。請一律建立 IAM 使用者，並提供該使用者的存取金鑰 ID 和私密存取金鑰。關於建立 IAM 使用者的步驟，請參閱[在您的 AWS 帳戶中建立 IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)。

若要使用 ACCESS\_KEY\_ID 和 SECRET\_ACCESS\_KEY 來驗證身分，請以授權使用者的存取金鑰 ID 和完整私密存取金鑰，取代 {{<access-key-id>}} 和 {{<secret-access-key>}}，如下所示。

```
ACCESS_KEY_ID '{{<access-key-id>}}'
SECRET_ACCESS_KEY '{{<secret-access-key>}}';
```

若要使用 CREDENTIALS 參數來驗證身分，請以授權使用者的存取金鑰 ID 和完整私密存取金鑰，取代 {{<access-key-id>}} 和 {{<secret-access-key>}}，如下所示。

```
CREDENTIALS
'aws_access_key_id={{<access-key-id>}};aws_secret_access_key={{<secret-access-key>}}';
```

IAM 使用者至少必須具備[COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可](#copy-usage_notes-iam-permissions)中列出的許可。

### 暫時安全憑證
<a name="r_copy-temporary-security-credentials"></a>

 如果使用金鑰型存取控制，您可以利用臨時安全性登入資料，以進一步限制使用者有何權限存取您的資料。角色型身分驗證會自動使用臨時登入資料。

**注意**  
強烈建議使用[role-based access control](#copy-usage_notes-access-role-based.phrase)，而不要建立臨時登入資料並以純文字提供存取金鑰 ID 和私密存取金鑰。角色型存取控制會自動使用暫時憑證。

暫時安全憑證提供加強的安全性，因為有效期限較短，且過期之後不能重複使用。與字符一起產生的存取金鑰 ID 和私密存取金鑰一定要有字符才能使用，而具有這些暫時安全憑證的使用者只能在憑證到期之前存取您的資源。

若要授予使用者暫時存取 資源的權限，請呼叫 AWS Security Token Service (AWS STS) API 操作。 AWS STS API 操作會傳回暫時性安全登入資料，其中包含安全字符、存取金鑰 ID 和私密存取金鑰。如果某使用者需要暫時存取您的資源，您可以將臨時安全性登入資料發行給該使用者。這些使用者可以是現有的 IAM 使用者，或非AWS 使用者。如需建立暫時安全憑證的相關資訊，請參閱《IAM 使用者指南》中的[使用暫時安全憑證](https://docs.aws.amazon.com/STS/latest/UsingSTS/Welcome.html)。

您可以將 [使用 ACCESS\_KEY\_ID 和 SECRET\_ACCESS\_KEY 參數](copy-parameters-authorization.md#copy-access-key-id) 參數與 [SESSION\_TOKEN](copy-parameters-authorization.md#copy-token) 參數或 [使用 CREDENTIALS 參數](copy-parameters-authorization.md#copy-credentials) 參數一起使用。您也必須提供字符隨附的存取金鑰 ID 和私密存取金鑰。

若要使用 ACCESS\_KEY\_ID、SECRET\_ACCESS\_KEY 和 SESSION\_TOKEN 來驗證身分，請取代 {{<temporary-access-key-id>}}、{{<temporary-secret-access-key>}} 和 {{<temporary-token>}}，如下所示。

```
ACCESS_KEY_ID '{{<temporary-access-key-id>}}'
SECRET_ACCESS_KEY '{{<temporary-secret-access-key>}}'
SESSION_TOKEN '{{<temporary-token>}}';
```

若要使用 CREDENTIALS 來驗證身分，請在登入資料字串中包含 `session_token={{<temporary-token>}}`，如下所示。

```
CREDENTIALS
'aws_access_key_id={{<temporary-access-key-id>}};aws_secret_access_key={{<temporary-secret-access-key>}};session_token={{<temporary-token>}}';
```

下列範例顯示使用臨時安全性登入資料的 COPY 命令。

```
copy table-name
from 's3://objectpath'
access_key_id '{{<temporary-access-key-id>}}'
secret_access_key '{{<temporary-secret-access-key>}}'
session_token '{{<temporary-token>}}';
```

下列範例使用臨時登入資料和檔案加密來載入 LISTING 資料表。

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt'
access_key_id '{{<temporary-access-key-id>}}'
secret_access_key '{{<temporary-secret-access-key>}}'
session_token '{{<temporary-token>}}'
master_symmetric_key '{{<root-key>}}'
encrypted;
```

下列範例使用 CREDENTIALS 參數搭配臨時登入資料和檔案加密來載入 LISTING 資料表。

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt'
credentials 
'aws_access_key_id={{<temporary-access-key-id>}};aws_secret_access_key={{<temporary-secret-access-key>}};session_token={{<temporary-token>}};master_symmetric_key={{<root-key>}}'
encrypted;
```

**重要**  
臨時安全性登入資料在 COPY 或 UNLOAD 操作的整個期間內必須有效。如果臨時安全性登入資料在操作期間過期，則命令會失敗，而交易會回復。例如，假設臨時安全性登入資料在 15 分鐘之後過期，而 COPY 操作需要 1 小時，則 COPY 操作在完成之前就會失敗。如果您使用角色型存取，臨時安全性登入資料會自動重新整理，直到操作完成。

## COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可
<a name="copy-usage_notes-iam-permissions"></a>

CREDENTIALS 參數所參考的 IAM 角色或使用者至少必須具備下列許可：
+ 從 Amazon S3 COPY 時，具備許可來 LIST Amazon S3 儲存貯體及 GET 要載入的 Amazon S3 物件和資訊清單檔案 (如果使用)。
+ 從 Amazon S3、Amazon EMR 和遠端主機 (SSH) COPY JSON 格式的資料時，具備許可來 LIST 和 GET Amazon S3 上的 JSONPaths 檔案 (如果使用)。
+ 從 DynamoDB COPY 時，具備許可來 SCAN 和 DESCRIBE 要載入的 DynamoDB 資料表。
+ 從 Amazon EMR 叢集 COPY 時，具備許可在 Amazon EMR 叢集上執行 `ListInstances` 動作。
+ UNLOAD 到 Amazon S3 時，對於 Amazon S3 儲存貯體 (要將資料檔案卸載到此處)，具備 GET、LIST 和 PUT 許可。
+ 從 Amazon S3 CREATE LIBRARY 時，具備許可來 LIST Amazon S3 儲存貯體及 GET 要匯入的 Amazon S3 物件。

**注意**  
執行 COPY、UNLOAD 或 CREATE LIBRARY 命令時，如果出現錯誤訊息 `S3ServiceException: Access Denied`，表示叢集沒有 Amazon S3 的適當存取許可。

您可以將 IAM 政策附加至 IAM 角色，而該角色附加至叢集、使用者或使用者所屬的群組，以此來管理 IAM 許可。例如，`AmazonS3ReadOnlyAccess` 受管政策授予 Amazon S3 資源的 LIST 和 GET 許可。如需管理政策的相關資訊，請參閱《IAM 使用者指南》**中的[管理 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)。