

 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/)。

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

# 建立 IAM 角色做為 Amazon Redshift 的預設角色
<a name="default-iam-role"></a>

 當您透過 Redshift 主控台建立 IAM 角色時，Amazon Redshift 會以程式設計方式在您的 中建立角色， AWS 帳戶 並自動將現有的 AWS 受管政策連接到這些角色。此方法意味著您可以保留在 Redshift 主控台內，而不必切換到 IAM 主控台來建立角色。若要對在 Amazon Redshift 主控台中建立的現有 IAM 角色進行更精細的許可控制，您可以將自訂的受管政策連接到 IAM 角色。

## 在主控台中建立的 IAM 角色
<a name="default-iam-role-overview"></a>

當您使用 Amazon Redshift 主控台建立 IAM 角色時，Amazon Redshift 會追蹤透過主控台建立的所有 IAM 角色。Amazon Redshift 會預先選取最新的預設 IAM 角色，以建立所有新叢集和從快照還原叢集。

您可以透過主控台建立 IAM 角色，該角色有權執行 SQL 命令的政策。這些命令包括 COPY、UNLOAD、CREATE EXTERNAL FUNCTION、CREATE EXTERNAL TABLE、CREATE EXTERNAL SCHEMA、CREATE MODEL 或 CREATE LIBRARY。或者，您可以透過建立自訂政策並將其連接到 IAM 角色，進而更精細地控制使用者對 AWS 資源的存取權限。

使用主控台建立 IAM 角色並將其設定為叢集預設值時，您不必提供 IAM 角色的 Amazon Resource Name (ARN) 即可執行驗證和授權。

您透過主控台為叢集建立的 IAM 角色會自動附加 `AmazonRedshiftAllCommandsFullAccess` 受管政策。此 IAM 角色可讓 Amazon Redshift 複製、卸載、查詢和分析 IAM 帳戶中 AWS 資源的資料。受管政策可讓您存取 [COPY](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-authorization.html)、[UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html)、[CREATE EXTERNAL FUNCTION](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html)、[CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)、[CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html) 和 [CREATE LIBRARY](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_LIBRARY.html) 操作。此政策也會授予許可，以執行相關 AWS 服務的 SELECT 陳述式，例如 Amazon S3、Amazon CloudWatch Logs、Amazon SageMaker AI 和 AWS Glue。

CREATE EXTERNAL FUNCTION、CREATE EXTERNAL SCHEMA、CREATE MODEL 和 CREATE LIBRARY 命令有 `default` 關鍵字。對於這些命令的這個關鍵字，Amazon Redshift 會使用設定為預設值且在命令執行時與叢集關聯的 IAM 角色。您可以執行 [DEFAULT\$1IAM\$1ROLE](https://docs.aws.amazon.com/redshift/latest/dg/r_DEFAULT_IAM_ROLE.html) 命令來檢查目前已連接到叢集的 IAM 角色。

若要控制建立的 IAM 角色的存取權限，並將其設定為 Redshift 叢集的預設值，請使用 ASSUMEROLE 權限。此存取控制適用於資料庫使用者和群組執行命令 (例如前面列出的命令)。將 ASSUMEROLE 權限授予 IAM 角色的使用者或群組之後，使用者或群組就可以在執行這些命令時擔任該角色。透過使用 ASSUMEROLE 權限，您可以視需要授予適當命令的存取權。

使用 Amazon Redshift 主控台，您可以執行以下操作：
+ [建立 IAM 角色做為預設角色](#create-iam)
+ [從叢集移除 IAM 角色](#remove-iam)
+ [將 IAM 角色與叢集建立關聯](#associate-iam)
+ [將 IAM 角色設定為預設角色](#set-default-iam)
+ [讓 IAM 角色不再是叢集的預設角色](#clear-default-iam)

## AmazonRedshiftAllCommandsFullAccess 受管政策的許可
<a name="default-iam-role-permissions"></a>

下列範例顯示 `AmazonRedshiftAllCommandsFullAccess` 受管政策中的許可，這些許可允許針對設定為叢集預設的 IAM 角色執行某些動作。連接了許可政策的 IAM 角色授權使用者或群組可以執行和不能執行的操作。有了這些許可，您可以從 Amazon S3 執行 COPY 命令、執行 UNLOAD，然後使用 CREATE MODEL 命令。

```
{
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetBucketAcl",
                "s3:GetBucketCors",
                "s3:GetEncryptionConfiguration",
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListAllMyBuckets",
                "s3:ListMultipartUploadParts",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject",
                "s3:PutBucketAcl",
                "s3:PutBucketCors",
                "s3:DeleteObject",
                "s3:AbortMultipartUpload",
                "s3:CreateBucket"
            ],
            "Resource": [
                "arn:aws:s3:::redshift-downloads",
                "arn:aws:s3:::redshift-downloads/*",
                "arn:aws:s3:::*redshift*",
                "arn:aws:s3:::*redshift*/*"
            ]
}
```

下列範例顯示 `AmazonRedshiftAllCommandsFullAccess` 受管政策中的許可，這些許可允許針對設定為叢集預設的 IAM 角色執行某些動作。連接了許可政策的 IAM 角色授權使用者或群組可以執行和不能執行的操作。根據下列許可，您可以執行 CREATE EXTERNAL FUNCTION 命令。

```
{
    "Action": [
        "lambda:InvokeFunction"
    ],
    "Resource": "arn:aws:lambda:*:*:function:*redshift*"
}
```

下列範例顯示 `AmazonRedshiftAllCommandsFullAccess` 受管政策中的許可，這些許可允許針對設定為叢集預設的 IAM 角色執行某些動作。連接了許可政策的 IAM 角色授權使用者或群組可以執行和不能執行的操作。有了下列許可，您就可以執行 Amazon Redshift Spectrum 所需的 CREATE EXTERNAL SCHEMA 和 CREATE EXTERNAL TABLE 命令。

```
{
            "Effect": "Allow",
            "Action": [
                "glue:CreateDatabase",
                "glue:DeleteDatabase",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:UpdateDatabase",
                "glue:CreateTable",
                "glue:DeleteTable",
                "glue:BatchDeleteTable",
                "glue:UpdateTable",
                "glue:GetTable",
                "glue:GetTables",
                "glue:BatchCreatePartition",
                "glue:CreatePartition",
                "glue:DeletePartition",
                "glue:BatchDeletePartition",
                "glue:UpdatePartition",
                "glue:GetPartition",
                "glue:GetPartitions",
                "glue:BatchGetPartition"
            ],
            "Resource": [
                "arn:aws:glue:*:*:table/*redshift*/*",
                "arn:aws:glue:*:*:catalog",
                "arn:aws:glue:*:*:database/*redshift*"
            ]
}
```

下列範例顯示 `AmazonRedshiftAllCommandsFullAccess` 受管政策中的許可，這些許可允許針對設定為叢集預設的 IAM 角色執行某些動作。連接了許可政策的 IAM 角色授權使用者或群組可以執行和不能執行的操作。有了下列許可，您就可以使用聯合查詢執行 CREATE EXTERNAL SCHEMA 命令。

```
{
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": [
                "arn:aws:secretsmanager:*:*:secret:*Redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "secretsmanager:ResourceTag/Redshift": "true"
                }
            }
},
```

## 使用主控台管理為叢集建立的 IAM 角色
<a name="managing-iam-role-console"></a>

若要建立、修改和移除從 Amazon Redshift 主控台建立的 IAM 角色，請使用主控台中的**叢集**區段。

### 建立 IAM 角色做為預設角色
<a name="create-iam"></a>

在主控台上，您可以為叢集建立自動連接 `AmazonRedshiftAllCommandsFullAccess` 政策的 IAM 角色。您建立的新 IAM 角色可讓 Amazon Redshift 複製、載入、查詢和分析 IAM 帳戶中 Amazon 資源中的資料。

只能將一個 IAM 角色設定為叢集的預設角色。如果在目前將現有 IAM 角色指派為預設值時，建立另一個 IAM 角色做為叢集預設角色，則新的 IAM 角色會取代另一個角色作為預設角色。

**建立新叢集和設定為新叢集預設值的 IAM 角色**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)：// 開啟 Amazon Redshift 主控台。

1. 在導覽選單上，選擇**叢集**。 AWS 區域 系統會列出目前 中您帳戶的叢集。每個叢集的屬性子集會在清單中分欄顯示。

1. 選擇 **Create cluster (建立叢集)** 以建立叢集。

1. 遵循主控台頁面說明以輸入 **Cluster configuration (叢集組態)** 的屬性。如需此步驟的相關資訊，請參閱 [建立叢集](create-cluster.md)。

1. (選用) 選擇**載入範例資料**將範例資料集載入 Amazon Redshift 叢集，以開始使用查詢編輯器查詢資料。

   如果您在防火牆後，則資料庫連接埠必須是接受傳入連線的開放連接埠。

1. 遵循主控台頁面說明以輸入**資料庫組態**的屬性。

1. 在**叢集許可**下，從**管理 IAM 角色**中選擇**建立 IAM 角色**。

1. 選擇下列其中一種方法來指定 IAM 角色要存取的 Amazon S3 儲存貯體：
   + 選擇**不使用其他 Amazon S3 儲存貯體**來建立 IAM 角色，而無需指定特定的 Amazon S3 儲存貯體。
   + 選擇**任何 Amazon S3 儲存貯體**，允許擁有 Amazon Redshift 叢集存取權的使用者也可以存取您的任何 Amazon S3 儲存貯體及其中的 AWS 帳戶內容。
   + 選擇**特定的 Amazon S3 儲存貯體**，以指定要建立的 IAM 角色具有存取許可的一或多個 Amazon S3 儲存貯體。然後從資料表中選擇一或多個 Amazon S3 儲存貯體。

1. 選擇**建立 IAM 角色作為預設值**。Amazon Redshift 會自動建立 IAM 角色，並將其設定為叢集的預設角色。

1. 選擇 **Create cluster (建立叢集)** 以建立叢集。該叢集可能需要幾分鐘方可使用。

### 從叢集移除 IAM 角色
<a name="remove-iam"></a>

您可以從叢集移除一或多個 IAM 角色。

**從叢集移除 IAM 角色**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)：// 開啟 Amazon Redshift 主控台。

1. 在導覽選單上，選擇**叢集**。 AWS 區域 系統會列出目前 中您帳戶的叢集。每個叢集的屬性子集會在清單中分欄顯示。

1. 選擇您要從中移除 IAM 角色的叢集。

1. 在**叢集許可**下，選擇一或多個要從叢集移除的 IAM 角色。

1. 在**管理 IAM 角色**中，選擇**移除 IAM 角色**。

### 將 IAM 角色與叢集建立關聯
<a name="associate-iam"></a>

您可以將一或多個 IAM 角色與叢集建立關聯。

**將 IAM 角色與叢集產生關聯**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)：// 開啟 Amazon Redshift 主控台。

1. 在導覽選單上，選擇**叢集**。 AWS 區域 系統會列出目前 中您帳戶的叢集。每個叢集的屬性子集會在清單中分欄顯示。

1. 選擇您要與 IAM 角色建立關聯的叢集。

1. 在**叢集許可**下，選擇一或多個要與叢集建立關聯的 IAM 角色。

1. 從**管理 IAM 角色**中，選擇**關聯 IAM 角色**。

1. 選擇一個或多個 IAM 角色來與您的叢集建立關聯。

1. 選擇**關聯 IAM 角色**。

### 將 IAM 角色設定為預設角色
<a name="set-default-iam"></a>

您可以將 IAM 角色設定為叢集的預設角色。

**將 IAM 角色設為叢集的預設角色**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)：// 開啟 Amazon Redshift 主控台。

1. 在導覽選單上，選擇**叢集**。 AWS 區域 系統會列出目前 中您帳戶的叢集。每個叢集的屬性子集會在清單中分欄顯示。

1. 選擇您要設定預設 IAM 角色的叢集。

1. 在**叢集許可**下，從**關聯的 IAM 角色**中，選擇要設為叢集預設的 IAM 角色。

1. 在**設定預設值**下，選擇**設為預設**。

1. 出現提示時，選擇**設定預設值**以確認將指定的 IAM 角色設為預設角色。

### 讓 IAM 角色不再是叢集的預設角色
<a name="clear-default-iam"></a>

您可以讓 IAM 角色不再做為叢集的預設角色。

**清除 IAM 角色不再做為叢集預設的預設角色**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)：// 開啟 Amazon Redshift 主控台。

1. 在導覽選單上，選擇**叢集**。 AWS 區域 系統會列出目前 中您帳戶的叢集。每個叢集的屬性子集會在清單中分欄顯示。

1. 選擇您要與 IAM 角色建立關聯的叢集。

1. 在**叢集許可**下，從**關聯的 IAM 角色**中選擇預設 IAM 角色。

1. 在**設定預設值**下，選擇**清除預設值**

1. 出現提示時，選擇**清除預設值**以確認清除指定的 IAM 角色不再做為預設角色。

## 使用 管理在叢集上建立的 IAM 角色 AWS CLI
<a name="managing-iam-role-association-with-cluster-cli"></a>

您可以使用 AWS CLI管理在叢集上建立的 IAM 角色。

### 建立 Amazon Redshift 叢集並將 IAM 角色設定為預設角色
<a name="create-cluster-iam"></a>

若要使用 IAM 角色建立 Amazon Redshift 叢集，將其設定為叢集的預設值，請使用 `aws redshift create-cluster` AWS CLI 命令。

下列 AWS CLI 命令會建立 Amazon Redshift 叢集和名為 myrole1 的 IAM 角色。 AWS CLI 命令也會將 myrole1 設定為叢集的預設值。

```
aws redshift create-cluster \
    --node-type dc2.large \
    --number-of-nodes 2 \
    --master-username adminuser \
    --master-user-password TopSecret1 \
    --cluster-identifier mycluster \
    --iam-roles 'arn:aws:iam::012345678910:role/myrole1' 'arn:aws:iam::012345678910:role/myrole2' \
    --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole1'
```

下列程式碼片段為回應範例。

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",      
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "adding"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "adding"
            }
        ]
        ...
    }
}
```

### 將一或多個 IAM 角色新增至 Amazon Redshift 叢集
<a name="modify-cluster-add-iam"></a>

若要新增與叢集相關聯的一或多個 IAM 角色，請使用 `aws redshift modify-cluster-iam-roles` AWS CLI 命令。

下列 AWS CLI 命令會將 `myrole3`和 `myrole4` 新增至叢集。

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier mycluster \
    --add-iam-roles 'arn:aws:iam::012345678910:role/myrole3' 'arn:aws:iam::012345678910:role/myrole4'
```

下列程式碼片段為回應範例。

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3",
                "ApplyStatus": "adding"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole4",
                "ApplyStatus": "adding"
            }
        ],
        ...
    }
}
```

### 從 Amazon Redshift 叢集移除一或多個 IAM 角色
<a name="modify-cluster-remove-iam"></a>

若要移除與叢集相關聯的一或多個 IAM 角色，請使用 `aws redshift modify-cluster-iam-roles` AWS CLI 命令。

下列 AWS CLI 命令會從叢集移除 `myrole3`和 `myrole4` 。

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier mycluster \
    --remove-iam-roles 'arn:aws:iam::012345678910:role/myrole3' 'arn:aws:iam::012345678910:role/myrole4'
```

下列程式碼片段為回應範例。

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3",
                "ApplyStatus": "removing"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole4",
                "ApplyStatus": "removing"
            }
        ],
        ...
    }
}
```

### 將關聯的 IAM 角色設定為叢集的預設角色
<a name="modify-cluster-default-iam-associated"></a>

若要將關聯的 IAM 角色設定為叢集的預設值，請使用 `aws redshift modify-cluster-iam-roles` AWS CLI 命令。

下列 AWS CLI 命令會將 `myrole2`設定為叢集的預設值。

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier mycluster \
    --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole2'
```

下列程式碼片段為回應範例。

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "in-sync"
            }
        ],
        ...
    }
}
```

### 將未關聯的 IAM 角色設定為叢集的預設角色
<a name="modify-cluster-default-iam-not-associated"></a>

若要將未關聯的 IAM 角色設定為叢集的預設值，請使用 `aws redshift modify-cluster-iam-roles` AWS CLI 命令。

下列 AWS CLI 命令會`myrole2`新增至 Amazon Redshift 叢集，並將其設定為叢集的預設值。

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier mycluster \
    --add-iam-roles 'arn:aws:iam::012345678910:role/myrole3' \
    --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole3'
```

下列程式碼片段為回應範例。

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole3",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3",
                "ApplyStatus": "adding"
            }
        ],
        ...
    }
}
```

### 從快照還原叢集並將 IAM 角色設定為其預設值
<a name="restore-cluster-iam"></a>

從快照還原叢集時，您可以關聯現有的 IAM 角色，也可以建立新的 IAM 角色並將其設定為叢集的預設角色。

若要從快照還原 Amazon Redshift 叢集，並將 IAM 角色設定為叢集預設值，請使用 `aws redshift restore-from-cluster-snapshot` AWS CLI 命令。

下列 AWS CLI 命令會從快照還原叢集，並將 `myrole2`設定為叢集的預設值。

```
aws redshift restore-from-cluster-snapshot \
    --cluster-identifier mycluster-clone \
    --snapshot-identifier my-snapshot-id
    --iam-roles 'arn:aws:iam::012345678910:role/myrole1' 'arn:aws:iam::012345678910:role/myrole2' \
    --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole1'
```

下列程式碼片段為回應範例。

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster-clone",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "adding"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "adding"
            }
        ],
        ...
    }
}
```