

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

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

# Amazon Redshift 中的身分和存取管理
<a name="redshift-iam-authentication-access-control"></a>

存取 Amazon Redshift 需要 AWS 登入資料，可用來驗證您的請求。這些登入資料必須具有存取 AWS 資源的許可，例如 Amazon Redshift 叢集。以下章節提供關於如何使用 [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 與 Amazon Redshift 的詳細資訊，藉由控制可存取的人員，協助保護您資源的安全：
+ [使用身分進行身分驗證](#security_iam_authentication)
+ [存取控制](#redshift-iam-accesscontrol)

**重要**  
本主題集合了用於管理許可、身分和安全存取的最佳實務。建議您熟悉將 IAM 與 Amazon Redshift 搭配使用的最佳實務。這些實務包括使用用於套用許可的 IAM 角色。充分了解這些部分會可助您保持更安全的 Amazon Redshift 資料倉儲。

## 使用身分進行身分驗證
<a name="security_iam_authentication"></a>

身分驗證是您 AWS 使用身分憑證登入 的方式。您必須以 AWS 帳戶根使用者、IAM 使用者或擔任 IAM 角色進行身分驗證。

您可以使用身分來源的登入資料，例如 AWS IAM Identity Center (IAM Identity Center)、單一登入身分驗證或 Google/Facebook 登入資料，以聯合身分的形式登入。如需有關登入的詳細資訊，請參閱《AWS 登入 使用者指南》**中的[如何登入您的 AWS 帳戶](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

對於程式設計存取， AWS 提供 SDK 和 CLI 以密碼編譯方式簽署請求。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [API 請求的AWS 第 4 版簽署程序](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 帳戶 根使用者
<a name="security_iam_authentication-rootuser"></a>

 當您建立 時 AWS 帳戶，您會從一個名為 AWS 帳戶 *theroot 使用者的*登入身分開始，該身分具有對所有 AWS 服務 和 資源的完整存取權。強烈建議不要使用根使用者來執行日常任務。有關需要根使用者憑證的任務，請參閱《IAM 使用者指南》**中的[需要根使用者憑證的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### IAM 使用者和群組
<a name="security_iam_authentication-iamuser"></a>

*IAM 使用者*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)是一種身分具備單人或應用程式的特定許可權。建議以臨時憑證取代具備長期憑證的 IAM 使用者。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[要求人類使用者使用聯合身分提供者來 AWS 使用臨時憑證存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) 。

[IAM 群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)**會指定 IAM 使用者集合，使管理大量使用者的許可權更加輕鬆。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 使用者的使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*IAM 角色*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)的身分具有特定許可權，其可以提供臨時憑證。您可以透過[從使用者切換到 IAM 角色 （主控台） ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或呼叫 AWS CLI 或 AWS API 操作來擔任角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的[擔任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色適用於聯合身分使用者存取、臨時 IAM 使用者許可、跨帳戶存取權與跨服務存取，以及在 Amazon EC2 執行的應用程式。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的快帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

**注意**  
Redshift 中的轉送存取工作階段 (FAS) 的有效期僅 12 個小時。此期間過後，任何使用 FAS 與其他服務整合的連線工作階段都必須重新建立。

# 預防跨服務混淆代理人
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理人問題屬於安全性問題，其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。在 中 AWS，跨服務模擬可能會導致混淆代理人問題。在某個服務 (*呼叫服務*) 呼叫另一個服務 (*被呼叫服務*) 時，可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可，以其不應有存取許可的方式對其他客戶的資源採取動作。為了預防這種情況， AWS 提供的工具可協助您保護所有服務的資料，而這些服務主體已獲得您帳戶中資源的存取權。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[預防跨服務混淆代理人](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html#cross-service-confused-deputy-prevention)。

我們建議在資源型政策中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)全域條件內容金鑰，以限制 Amazon Redshift 為資源提供其他服務的許可。如果 `aws:SourceArn` 值不包含帳戶 ID (例如 Amazon Simple Storage Service (Amazon S3) 儲存貯體 ARN)，則必須使用這兩個全域條件內容索引鍵來限制許可。如果同時使用這兩個全域條件內容索引鍵，且 `aws:SourceArn` 值包含帳戶 ID，則在相同政策陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 值中的帳戶時，必須使用相同的帳戶 ID。

下列範例顯示您可以套用的政策，以限制 Amazon Redshift 的混淆代理人問題。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": {
    "Sid": "ConfusedDeputyPreventionForRedshift",
    "Effect": "Allow",
    "Principal": {
      "Service": "redshift.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "ArnLike": {
        "aws:SourceArn": "arn:aws:redshift:us-east-1:123456789012:cluster:my-cluster"
      },
      "StringEquals": {
        "aws:SourceAccount": "123456789012"
      }
    }
  }
}
```

## 存取控制
<a name="redshift-iam-accesscontrol"></a>

您可以持有效憑證來驗證請求，但還須具備許可，才能建立或存取 Amazon Redshift 資源。例如，您必須具備許可，才能建立 Amazon Redshift 叢集、建立快照、新增事件訂閱及其他動作。

以下章節描述如何管理 Amazon Redshift 的許可。我們建議您先閱讀概觀。
+ [管理 Amazon Redshift 資源存取許可的概觀](redshift-iam-access-control-overview.md)
+  [將以身分為基礎的政策 (IAM 政策) 用於 Amazon Redshift](redshift-iam-access-control-identity-based.md) 

# 管理 Amazon Redshift 資源存取許可的概觀
<a name="redshift-iam-access-control-overview"></a>

每個 AWS 資源都由 AWS 帳戶擁有，而建立或存取資源的許可是由許可政策管理。帳戶管理員可以將許可政策連接到 IAM 身分 （即使用者、群組和角色），某些服務 （例如 AWS Lambda) 也支援將許可政策連接到 資源。

**注意**  
*帳戶管理員* (或管理員使用者) 是具有管理員權限的使用者。如需詳細資訊，請參閱《[IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)》中的 *IAM 最佳實務*。

授予許可時，您會決定誰取得這些許可、取得哪些資源的許可，以及可以對那些資源進行的特定動作。

## Amazon Redshift 資源和操作
<a name="redshift-iam-accesscontrol.actions-and-resources"></a>

Amazon Redshift 提供服務特有的資源、動作和條件內容索引鍵，可用於 IAM 許可政策。

### Amazon Redshift、Amazon Redshift Serverless、Amazon Redshift 資料 API 和 Amazon Redshift 查詢編輯器 v2 的存取許可
<a name="redshift-policy-resources.resource-permissions"></a>

當設定 [存取控制](redshift-iam-authentication-access-control.md#redshift-iam-accesscontrol) 時，您要編寫可附加到 IAM 身分的許可政策 (身分型政策)。如需詳細的參考資訊，請參閱《服務授權參考》**中的下列主題：
+ 若為 Amazon Redshift，請參閱使用 `redshift:` 前置詞的 [Amazon Redshift 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html)。
+ 若為 Amazon Redshift Serverless，請參閱使用 `redshift-serverless:` 前置詞的 [Amazon Redshift Serverless 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftserverless.html)。
+ 若為 Amazon Redshift 資料 API，請參閱使用 `redshift-data:` 前置詞的 [Amazon Redshift 資料 API 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftdataapi.html)。
+ 對於 Amazon Redshift 查詢編輯器 v2，請參閱使用 `sqlworkbench:`字首[的 AWS SQL Workbench (Amazon Redshift 查詢編輯器 v2) 的動作、資源和條件索引](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssqlworkbench.html)鍵。

  查詢編輯器 v2 包含非直接對應至 API 操作的僅限許可動作。《服務授權參考》**中會使用 `[permission only]` 指出這些動作。

《服務授權參考》**包含了可在 IAM 政策中使用哪些 API 操作的相關資訊。它還包含您可以授予許可 AWS 的資源，以及您可以包含用於精細存取控制的條件索引鍵。如需條件的相關資訊，請參閱[使用 IAM 政策條件進行精細定義存取控制](#redshift-policy-resources.conditions)。

您可以在政策的 `Action` 欄位中指定動作、在政策的 `Resource` 欄位中指定資源值，以及在政策的 `Condition` 欄位中指定條件。若要指定 Amazon Redshift 的動作，請使用後接 API 操作名稱的 `redshift:` 前置詞 (例如，`redshift:CreateCluster`)。

## 了解資源所有權
<a name="redshift-iam-access-control-resource-ownership"></a>

*資源擁有者*是建立資源 AWS 的帳戶。也就是說，資源擁有者是驗證建立資源之請求的*委託人實體* （根帳戶、IAM 使用者或 IAM 角色） AWS 的帳戶。下列範例說明其如何運作：
+ 如果您使用 AWS 帳戶的根帳戶登入資料來建立資料庫叢集， AWS 您的帳戶就是 Amazon Redshift 資源的擁有者。
+ 如果您在 AWS 帳戶中建立具有建立 Amazon Redshift 資源許可的 IAM 角色，則任何可以擔任該角色的人都可以建立 Amazon Redshift 資源。您的 AWS 帳戶 (即角色所屬帳戶) 會擁有 Amazon Redshift 資源。
+ 如果您在 AWS 帳戶中建立 IAM 使用者，並將建立 Amazon Redshift 資源的許可授予該使用者，則使用者可以建立 Amazon Redshift 資源。但是您的 AWS 帳戶 (即使用者所屬帳戶) 會擁有 Amazon Redshift 資源。在大多數情況下，不建議您使用此方法。建議您建立 IAM 角色並將許可附加到該角色，然後將角色指派給使用者。

## 管理 資源的存取
<a name="redshift-iam-accesscontrol-managingaccess"></a>

*許可政策*描述誰可以存取哪些資源。下一節說明可用來建立許可政策的選項。

**注意**  
本節著重討論如何在 Amazon Redshift 的環境中使用 IAM。它不提供 IAM 服務的詳細資訊。如需完整的 IAM 文件，請參閱《IAM 使用者指南》**中的[什麼是 IAM？](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。如需有關 IAM 政策語法和說明的資訊，請參閱《IAM 使用者指南》**中的 [AWS IAM 政策參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

連接到 IAM 身分的政策稱為*身分類型*政策 (IAM 政策)，而連接到資源的政策參考*資源類型政策*。Amazon Redshift 僅支援以身分為基礎的政策 (IAM 政策)。

### 身分類型政策 (IAM 政策)
<a name="redshift-iam-manage-access-identity-based"></a>

您可以透過將政策附加到 IAM 角色，然後將該角色指派給使用者或群組來指派許可。下面的範例政策包含用來為您的 AWS 帳戶建立、刪除、修改 Amazon Redshift 叢集和將叢集重新開機的許可。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowManageClusters",
      "Effect":"Allow",
      "Action": [
        "redshift:CreateCluster",
        "redshift:DeleteCluster",
        "redshift:ModifyCluster",
        "redshift:RebootCluster"
      ],
      "Resource":"*"
    }
  ]
}
```

------

如需將以身分為基礎的政策與 Amazon Redshift 搭配使用的相關資訊，請參閱[將以身分為基礎的政策 (IAM 政策) 用於 Amazon Redshift](redshift-iam-access-control-identity-based.md)。如需使用者、群組、角色和許可的相關資訊，請參閱《IAM 使用者指南》**中的[身分 (使用者、群組和角色)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。

### 資源型政策
<a name="redshift-iam-access-control-resource-based"></a>

其他服務 (例如 Amazon S3) 也支援以資源為基礎的許可政策。例如，您可以將政策連接至 S3 儲存貯體，以管理該儲存貯體的存取許可。Amazon Redshift 不支援資源型政策。

## 指定政策元素：動作、效果、資源和主體
<a name="redshift-iam-access-control-specify-actions"></a>

針對每一個 Amazon Redshift 資源 (請參閱 [Amazon Redshift 資源和操作](#redshift-iam-accesscontrol.actions-and-resources))，服務會定義一組 API 操作 (請參閱[動作](https://docs.aws.amazon.com/redshift/latest/APIReference/API_Operations.html))。Amazon Redshift 會定義一組您可在政策中指定的動作，以授予這些 API 操作的許可。執行一項 API 操作可能需要多個動作的許可。

以下是基本的政策元素：
+ **資源** – 在政策中，您可以使用 Amazon Resource Name (ARN) 來識別要套用政策的資源。如需詳細資訊，請參閱[Amazon Redshift 資源和操作](#redshift-iam-accesscontrol.actions-and-resources)。
+ **動作**：使用動作關鍵字識別您要允許或拒絕的資源操作。例如，`redshift:DescribeClusters` 許可會讓使用者獲得執行 Amazon Redshift `DescribeClusters` 操作的許可。
+ **效果** - 您可以指定使用者要求特定動作時會有什麼效果；可為允許或拒絕。如果您未明確授予存取 (允許) 資源，則隱含地拒絕存取。您也可以明確拒絕資源存取，這樣做可確保使用者無法存取資源，即使不同政策授予存取也是一樣。
+ **委託人**：在以身分為基礎的政策 (IAM 政策) 中，政策所連接的使用者就是隱含委託人。對於資源型政策，您可以指定想要收到許可的使用者、帳戶、服務或其他實體 (僅適用於資源型政策)。Amazon Redshift 不支援資源型政策。

如需進一步了解有關 IAM 政策語法和說明的詳細資訊，請參閱《IAM 使用者指南》**中的 [AWS IAM 政策參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

如需詳列所有 Amazon Redshift API 動作及適用資源的表格，請參閱 [Amazon Redshift、Amazon Redshift Serverless、Amazon Redshift 資料 API 和 Amazon Redshift 查詢編輯器 v2 的存取許可](#redshift-policy-resources.resource-permissions)。



## 在政策中指定條件
<a name="redshift-policy-resources.specifying-conditions"></a>

當您授予許可時，可以使用存取政策語言來指定政策應該何時生效的條件。例如，建議只在特定日期之後套用政策。如需以存取政策語言指定條件的相關資訊，請參閱《IAM 使用者指南》**中的 [IAM JSON 政策元素：條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。

若要識別許可政策適用的條件，請在您的 IAM 許可政策中包含 `Condition` 元素。例如，您可以建立允許使用者使用 `redshift:CreateCluster` 動作來建立叢集的政策，並且可以新增 `Condition` 元素，將該使用者限制在僅限於特定區域中建立叢集。如需詳細資訊，請參閱[使用 IAM 政策條件進行精細定義存取控制](#redshift-policy-resources.conditions)。如需呈現所有條件索引鍵值以及 Amazon Redshift 動作和其套用之資源的清單，請參閱 [Amazon Redshift、Amazon Redshift Serverless、Amazon Redshift 資料 API 和 Amazon Redshift 查詢編輯器 v2 的存取許可](#redshift-policy-resources.resource-permissions)。

### 使用 IAM 政策條件進行精細定義存取控制
<a name="redshift-policy-resources.conditions"></a>

在 Amazon Redshift 中，您可以使用兩個條件索引鍵，根據那些資源的標籤來限制對資源的存取權限。下列是常見的 Amazon Redshift 條件索引鍵。


| 條件金鑰 | Description | 
| --- | --- | 
| `aws:RequestTag` | 每當使用者建立資源時，都會要求使用者包括標籤索引鍵 (名稱) 和值。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [aws:RequestTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)。 | 
| `aws:ResourceTag` | 根據特定標籤索引鍵和值，限制使用者對資源的存取。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [aws:ResourceTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag)。 | 
| `aws:TagKeys` | 使用此鍵來將請求中的標籤鍵與您在政策中所指定的鍵進行比較。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys)。 | 

如需標籤的詳細資訊，請參閱[在 Amazon Redshift 中標記資源](amazon-redshift-tagging.md)。

如需支援 `redshift:RequestTag` 和 `redshift:ResourceTag` 條件索引鍵的 API 動作清單，請參閱[Amazon Redshift、Amazon Redshift Serverless、Amazon Redshift 資料 API 和 Amazon Redshift 查詢編輯器 v2 的存取許可](#redshift-policy-resources.resource-permissions)。

下列條件索引鍵可以與 Amazon Redshift GetClusterCredentials 動作搭配使用。


| 條件金鑰 | Description | 
| --- | --- | 
| `redshift:DurationSeconds` | 限制可為持續時間指定的秒數。 | 
| `redshift:DbName` | 限制可以指定的資料庫名稱。 | 
| `redshift:DbUser` | 限制可以指定的資料庫使用者名稱。 | 

#### 範例 1：透過使用 aws:ResourceTag 條件金鑰限制存取
<a name="redshift-policy-resources.resource-permissions-example1"></a>

使用下列 IAM 政策，讓使用者僅針對 `us-west-2` 區域中具有標籤值為 `environment`之標籤的特定 AWS 帳戶修改 Amazon Redshift 叢集`test`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid":"AllowModifyTestCluster",
        "Effect": "Allow",
        "Action": "redshift:ModifyCluster",
        "Resource": "arn:aws:redshift:us-west-2:123456789012:cluster:*",
        "Condition": {
            "StringEquals": {
                "aws:ResourceTag/environment": "test"
            }
        }
    }
}
```

------

#### 範例 2：透過使用 aws:RequestTag 條件金鑰限制存取
<a name="redshift-policy-resources.resource-permissions-example2"></a>

使用下列 IAM 政策可讓使用者僅在建立叢集的命令包含名為 `usage` 的標籤和標籤值為 `production` 時建立 Amazon Redshift 叢集。`aws:TagKeys` 和 `ForAllValues` 修飾符的條件指定您在請求中只能指定金鑰 `costcenter` 和 `usage`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid":"AllowCreateProductionCluster",
        "Effect": "Allow",
        "Action": [
            "redshift:CreateCluster",
            "redshift:CreateTags"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:RequestTag/usage": "production"
            },
            "ForAllValues:StringEquals": {
                "aws:TagKeys": [
                    "costcenter",
                    "usage"
                ]
            }
        }
    }
}
```

------

# 將以身分為基礎的政策 (IAM 政策) 用於 Amazon Redshift
<a name="redshift-iam-access-control-identity-based"></a>

這個主題提供以身分為基礎的政策範例，在該政策中帳戶管理員可以將許可政策連接至 IAM 身分 (即使用者、群組和角色)。

**重要**  
建議您先檢閱簡介主題，其中說明基本概念及有何選項可供您管理對 Amazon Redshift 資源的存取。如需詳細資訊，請參閱[管理 Amazon Redshift 資源存取許可的概觀](redshift-iam-access-control-overview.md)。

以下顯示許可政策範例。此政策允許使用者建立、刪除、修改和重新啟動所有叢集，然後拒絕刪除或修改叢集識別符在 AWS 區域 `us-west-2`和 AWS 帳戶 `production`中以 開頭的任何叢集的許可`123456789012`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowClusterManagement",
      "Action": [
        "redshift:CreateCluster",
        "redshift:DeleteCluster",
        "redshift:ModifyCluster",
        "redshift:RebootCluster"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"DenyDeleteModifyProtected",
      "Action": [
        "redshift:DeleteCluster",
        "redshift:ModifyCluster"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:cluster:production*"
      ],
      "Effect": "Deny"
    }
  ]
}
```

------

此政策具有兩個陳述式：
+ 第一個陳述式會將某使用者的許可授予給另一位使用者，讓該使用者得以建立、刪除、修改叢集和將它們重新開機。陳述式指定萬用字元 (\$1) 做為`Resource`值，以便政策套用至根 AWS 帳戶擁有的所有 Amazon Redshift 資源。
+ 第二個陳述式會拒絕對叢集的刪除或修改許可。此陳述式會為包含萬用字元 (\$1) 的 `Resource` 值指定叢集 Amazon Resource Name (ARN)。因此，此陳述式適用於叢集識別符開頭為 的根 AWS 帳戶擁有的所有 Amazon Redshift 叢集`production`。

## AWS Amazon Redshift 的 受管政策
<a name="redshift-policy-resources.managed-policies"></a>

AWS 提供由 建立和管理的獨立 IAM 政策，以解決許多常見的使用案例 AWS。受管政策授與常見使用案例中必要的許可，讓您免於查詢需要哪些許可。如需詳細資訊，請參閱 *IAM 使用者指南*中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

您也能建立專屬的自訂 IAM 政策，以允許 Amazon Redshift API 操作與資源的相關許可。您可以將這些自訂政策附加至需要這些許可的 IAM 角色或群組。

下列各節說明 AWS 受管政策，您可以將這些政策連接到您帳戶中的使用者，並且專屬於 Amazon Redshift。

## AWS 受管政策的 Amazon Redshift 更新
<a name="security-iam-awsmanpol-updates"></a>



檢視自此服務開始追蹤 Amazon Redshift AWS 受管政策更新以來的詳細資訊。如需有關此頁面變更的自動提醒，請訂閱 Amazon Redshift 文件歷史記錄頁面上的 RSS 摘要。




| 變更 | 描述 | Date | 
| --- | --- | --- | 
|  [AmazonRedshiftFederatedAuthorization](#redshift-policy-managed-policies-federated-authorization) – 新政策  |   Amazon Redshift 新增了使用 Amazon Redshift 聯合授權執行查詢的新ease-of-use政策。  | 2025 年 11 月 21 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 更新現有政策  |   `lakeformation:GetDataAccess` 動作的許可已新增至受管政策。新增它可授予從中取得聯合目錄資訊的許可 AWS Lake Formation。 `glue:GetCatalog` 和 `glue:GetCatalogs` 動作的其他條件已新增至受管政策。  | 2025 年 3 月 13 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 更新現有政策  |   `glue:GetCatalog` 和 `glue:GetCatalogs` 動作的許可已新增至受管政策。新增這些項目會授予許可，以從 AWS Glue取得目錄資訊。  | 2024 年 12 月 3 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 更新現有政策  |  `servicequotas:GetServiceQuota` 動作的許可已新增至受管政策。這會提供存取配額或限制的許可。  | 2024 年 3 月 8 日 | 
|  [AmazonRedshiftQueryEditorV2FullAccess](#redshift-policy-managed-policies-query-editor-V2) – 更新現有政策  |  `redshift-serverless:ListNamespaces` 和 `redshift-serverless:ListWorkgroups` 動作的許可已新增至受管政策。新增這些項目會授予許可，以在 Amazon Redshift 資料倉儲中列出無伺服器命名空間和無伺服器工作群組。  | 2024 年 2 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) – 更新現有政策  |  `redshift-serverless:ListNamespaces` 和 `redshift-serverless:ListWorkgroups` 動作的許可已新增至受管政策。新增這些項目會授予許可，以在 Amazon Redshift 資料倉儲中列出無伺服器命名空間和無伺服器工作群組。  | 2024 年 2 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) – 更新現有政策  |  `redshift-serverless:ListNamespaces` 和 `redshift-serverless:ListWorkgroups` 動作的許可已新增至受管政策。新增這些項目會授予許可，以在 Amazon Redshift 資料倉儲中列出無伺服器命名空間和無伺服器工作群組。  | 2024 年 2 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) – 更新現有政策  |  `redshift-serverless:ListNamespaces` 和 `redshift-serverless:ListWorkgroups` 動作的許可已新增至受管政策。新增這些項目會授予許可，以在 Amazon Redshift 資料倉儲中列出無伺服器命名空間和無伺服器工作群組。  | 2024 年 2 月 21 日 | 
|  [AmazonRedshiftReadOnlyAccess](#redshift-policy-managed-policies-read-only) – 更新現有政策  |  `redshift:ListRecommendations` 動作的許可已新增至受管政策。這會授予許可，以列出 Amazon Redshift Advisor 建議。  | 2024 年 2 月 7 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 更新現有政策  |  `ec2:AssignIpv6Addresses` 和 `ec2:UnassignIpv6Addresses` 動作的許可已新增至受管政策。新增這兩個動作可准許指派和取消指派 IP 地址。  | 2023 年 10 月 31 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) – 更新現有政策  |  `sqlworkbench:GetAutocompletionMetadata` 和 `sqlworkbench:GetAutocompletionResource` 動作的許可已新增至受管政策。新增這兩個動作可准許產生和擷取資料庫資訊，以便在編輯查詢時自動完成 SQL。  | 2023 年 8 月 16 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) – 更新現有政策  |  `sqlworkbench:GetAutocompletionMetadata` 和 `sqlworkbench:GetAutocompletionResource` 動作的許可已新增至受管政策。新增這兩個動作可准許產生和擷取資料庫資訊，以便在編輯查詢時自動完成 SQL。  | 2023 年 8 月 16 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) – 更新現有政策  |  `sqlworkbench:GetAutocompletionMetadata` 和 `sqlworkbench:GetAutocompletionResource` 動作的許可已新增至受管政策。新增這兩個動作可准許產生和擷取資料庫資訊，以便在編輯查詢時自動完成 SQL。  | 2023 年 8 月 16 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 更新現有政策  |  在 上 AWS Secrets Manager 建立和管理秘密的動作許可會新增至 受管政策。已新增的許可如下： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2023 年 8 月 14 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 更新現有政策  |  Amazon EC2 上用來建立和管理安全群組與路由規則的動作許可已從受管政策中移除。這些許可與建立子網路和 VPC 有關。已移除的許可如下： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html) 這些許可與 Purpose:RedshiftMigrateToVpc 資源標籤相關聯。這個標籤將許可的適用範圍限制在 Amazon EC2 Classic 到 Amazon EC2 VPC 的遷移任務。如需資源標籤的詳細資訊，請參閱[使用標籤控制 AWS 資源的存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。 | 2023 年 5 月 8 日 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) – 更新現有政策  |  `redshift:GetClusterCredentialsWithIAM` 動作的許可已新增至受管政策。新增此項目可准許取得增強型臨時憑證，讓指定的 AWS 帳戶存取 Amazon Redshift 資料庫。  | 2023 年 4 月 7 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 更新現有政策  |  Amazon EC2 上用於建立和管理安全群組規則的動作許可已新增至受管政策。這些安全群組和規則特別與 Amazon Redshift `aws:RequestTag/Redshift` 資源標籤相關聯。這會將許可的適用範圍限制在特定的 Amazon Redshift 資源。  | 2023 年 4 月 6 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) – 更新現有政策  |  `sqlworkbench:GetSchemaInference` 動作的許可已新增至受管政策。新增此項目可准許取得從檔案中推斷出的資料欄和資料類型。  | 2023 年 3 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) – 更新現有政策  |  `sqlworkbench:GetSchemaInference` 動作的許可已新增至受管政策。新增此項目可准許取得從檔案中推斷出的資料欄和資料類型。  | 2023 年 3 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) – 更新現有政策  |  `sqlworkbench:GetSchemaInference` 動作的許可已新增至受管政策。新增此項目可准許取得從檔案中推斷出的資料欄和資料類型。  | 2023 年 3 月 21 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) – 更新現有政策  |  `sqlworkbench:AssociateNotebookWithTab` 動作的許可已新增至受管政策。新增此項目可准許建立和更新連結至使用者自有筆記本的標籤。  | 2023 年 2 月 2 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) – 更新現有政策  |  `sqlworkbench:AssociateNotebookWithTab` 動作的許可已新增至受管政策。新增此項目可准許建立和更新連結至使用者自有筆記本或連結至與其共用之筆記本的標籤。  | 2023 年 2 月 2 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) – 更新現有政策  |  `sqlworkbench:AssociateNotebookWithTab` 動作的許可已新增至受管政策。新增此項目可准許建立和更新連結至使用者自有筆記本或連結至與其共用之筆記本的標籤。  | 2023 年 2 月 2 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) – 更新現有政策  |  為了授予使用筆記本的許可，Amazon Redshift 已新增下列動作的許可： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2022 年 10 月 17 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) – 更新現有政策  |  為了授予使用筆記本的許可，Amazon Redshift 已新增下列動作的許可： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2022 年 10 月 17 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) – 更新現有政策  |  為了授予使用筆記本的許可，Amazon Redshift 已新增下列動作的許可： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2022 年 10 月 17 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 更新現有政策  |  Amazon Redshift 已新增命名空間 `AWS/Redshift` 以允許將指標發佈到 CloudWatch。  | 2022 年 9 月 7 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) – 更新現有政策  |  Amazon Redshift 已新增動作 `sqlworkbench:ListQueryExecutionHistory` 和 `sqlworkbench:GetQueryExecutionHistory` 的許可。這可准許查看查詢歷史記錄。  | 2022 年 8 月 30 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) – 更新現有政策  |  Amazon Redshift 已新增動作 `sqlworkbench:ListQueryExecutionHistory` 和 `sqlworkbench:GetQueryExecutionHistory` 的許可。這可准許查看查詢歷史記錄。  | 2022 年 8 月 30 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) – 更新現有政策  |  Amazon Redshift 已新增動作 `sqlworkbench:ListQueryExecutionHistory` 和 `sqlworkbench:GetQueryExecutionHistory` 的許可。這可准許查看查詢歷史記錄。  | 2022 年 8 月 30 日 | 
|  [AmazonRedshiftFullAccess](#redshift-policy-managed-policies-full-access) – 更新現有政策  |  Amazon Redshift Serverless 的許可已新增至現有的 AmazonRedshiftFullAccess 受管政策。  | 2022 年 7 月 22 日 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) – 更新現有政策  |  Amazon Redshift 已將標籤 aws:ResourceTag/RedshiftDataFullAccess 許可的 redshift-serverless:GetCredentials 預設範圍條件從 StringEquals 更新為 StringLike，以授予標記了標籤索引鍵 RedshiftDataFullAccess 和任何標籤值之資源的存取權。 | 2022 年 7 月 11 日 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) – 更新現有政策  |  Amazon Redshift 已新增新的許可，以允許使用 redshift-serverless:GetCredentials 獲得 Amazon Redshift Serverless 的臨時憑證。 | 2022 年 7 月 8 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) – 更新現有政策  |  Amazon Redshift 已增加動作 `sqlworkbench:GetAccountSettings` 的許可。這可准許取得帳戶設定。  | 2022 年 6 月 15 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) – 更新現有政策  |  Amazon Redshift 已增加動作 `sqlworkbench:GetAccountSettings` 的許可。這可准許取得帳戶設定。  | 2022 年 6 月 15 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) – 更新現有政策  |  Amazon Redshift 已增加動作 `sqlworkbench:GetAccountSettings` 的許可。這可准許取得帳戶設定。  | 2022 年 6 月 15 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 更新現有政策  |  為了能夠公開存取新的 Amazon Redshift Serverless 端點，Amazon Redshift 會將彈性 IP 地址配置並關聯到客戶帳戶中 VPC 端點的彈性網路介面。其會透過服務連結角色所提供的許可來執行此操作。為了實現這個使用案例，用來配置和釋放彈性 IP 地址的動作已新增至 Amazon Redshift Serverless 服務連結角色。  | 2022 年 5 月 26 日 | 
|  [AmazonRedshiftQueryEditorV2FullAccess](#redshift-policy-managed-policies-query-editor-V2) – 更新現有政策  |  動作 `sqlworkbench:ListTaggedResources` 的許可。其具體的適用範圍是 Amazon Redshift 查詢編輯器 v2 資源。此政策更新提供了只能透過查詢編輯器 v2 呼叫 `tag:GetResources` 的權利。  | 2022 年 2 月 22 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) – 更新現有政策  |  動作 `sqlworkbench:ListTaggedResources` 的許可。其具體的適用範圍是 Amazon Redshift 查詢編輯器 v2 資源。此政策更新提供了只能透過查詢編輯器 v2 呼叫 `tag:GetResources` 的權利。  | 2022 年 2 月 22 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) – 更新現有政策  |  動作 `sqlworkbench:ListTaggedResources` 的許可。其具體的適用範圍是 Amazon Redshift 查詢編輯器 v2 資源。此政策更新提供了只能透過查詢編輯器 v2 呼叫 `tag:GetResources` 的權利。  | 2022 年 2 月 22 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) – 更新現有政策  |  動作 `sqlworkbench:ListTaggedResources` 的許可。其具體的適用範圍是 Amazon Redshift 查詢編輯器 v2 資源。此政策更新提供了只能透過查詢編輯器 v2 呼叫 `tag:GetResources` 的權利。  | 2022 年 2 月 22 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) – 更新現有政策  |  `sqlworkbench:AssociateQueryWithTab` 動作的許可已新增至受管政策。新增此項目讓客戶得以建立會連結至與其共用之查詢的編輯器標籤。  | 2022 年 2 月 22 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 更新現有政策  |  Amazon Redshift 已新增新動作的許可，以允許管理 Amazon Redshift 網路和 VPC 資源。  | 2021 年 11 月 22 日 | 
|  [AmazonRedshiftAllCommandsFullAccess](#redshift-policy-managed-policies-service-linked-role-commands) – 新政策  |  Amazon Redshift 已新增一項新政策，以允許使用從 Amazon Redshift 主控台建立的 IAM 角色，並將其設定為叢集的預設值，以便執行 COPY (從 Amazon S3)、UNLOAD、CREATE EXTERNAL SCHEMA、CREATE EXTERNAL FUNCTION、CREATE MODEL 或 CREATE LIBRARY 命令。  | 2021 年 11 月 18 日 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) – 更新現有政策  |  Amazon Redshift 已經為新動作新增了許可，以允許管理 Amazon Redshift CloudWatch 日誌群組和日誌串流，包括稽核日誌匯出。  | 2021 年 11 月 15 日 | 
|  [AmazonRedshiftFullAccess](#redshift-policy-managed-policies-full-access) – 更新現有政策  |  Amazon Redshift 已新增新的許可，以允許模型可解釋性、DynamoDB、Redshift Spectrum 和 Amazon RDS 聯合。 | 2021 年 10 月 7 日 | 
|  [AmazonRedshiftQueryEditorV2FullAccess](#redshift-policy-managed-policies-query-editor-V2) – 新政策  |  Amazon Redshift 已新增一項新政策，以允許 Amazon Redshift 查詢編輯器 v2 的完整存取權。  | 2021 年 9 月 24 日 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) – 新政策  |  Amazon Redshift 已新增一項新政策，以允許在不共用資源的情況下使用 Amazon Redshift 查詢編輯器 v2。  | 2021 年 9 月 24 日 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) – 新政策  |  Amazon Redshift 已新增一項新政策，以允許在 Amazon Redshift 查詢編輯器 v2 內進行讀取共用。  | 2021 年 9 月 24 日 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) – 新政策  |  Amazon Redshift 已新增一項新政策，以允許在 Amazon Redshift 查詢編輯器 v2 內進行讀取和更新共用。  | 2021 年 9 月 24 日 | 
|  [AmazonRedshiftFullAccess](#redshift-policy-managed-policies-full-access) – 更新現有政策  |  Amazon Redshift 已新增新的許可，以允許 `sagemaker:*Job*`。  | 2021 年 8 月 18 日 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) – 更新現有政策  |  Amazon Redshift 已新增新的許可，以允許 `AuthorizeDataShare`。  | 2021 年 8 月 12 日 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) – 更新現有政策  |  Amazon Redshift 已新增新的許可，以允許 `BatchExecuteStatement`。  | 2021 年 7 月 27 日 | 
|  Amazon Redshift 已開始追蹤變更  |  Amazon Redshift 開始追蹤其 AWS 受管政策的變更。  | 2021 年 7 月 27 日 | 

## AmazonRedshiftReadOnlyAccess
<a name="redshift-policy-managed-policies-read-only"></a>

授予 AWS 帳戶所有 Amazon Redshift 資源的唯讀存取權。

您可以在 IAM 主控台上找到 [AmazonRedshiftReadOnlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftReadOnlyAccess) 政策，並在《AWS 受管政策參考指南》**中找到 [AmazonRedshiftReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftReadOnlyAccess.html)。

## AmazonRedshiftFullAccess
<a name="redshift-policy-managed-policies-full-access"></a>

授予 AWS 帳戶所有 Amazon Redshift 資源的完整存取權。此外，這個政策還會授予所有 Amazon Redshift Serverless 資源的完整存取權。

您可以在 IAM 主控台上找到 [AmazonRedshiftFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftFullAccess) 政策，並在《AWS 受管政策參考指南》**中找到 [AmazonRedshiftFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftFullAccess.html)。

## AmazonRedshiftQueryEditor
<a name="redshift-policy-managed-policies-query-editor"></a>

授予 Amazon Redshift 主控台上查詢編輯器的完整存取權。

您可以在 IAM 主控台上找到 [AmazonRedshiftQueryEditor](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditor) 政策，並在《AWS 受管政策參考指南》**中找到 [AmazonRedshiftQueryEditor](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditor.html)。

## AmazonRedshiftDataFullAccess
<a name="redshift-policy-managed-policies-data-full-access"></a>

授予 AWS 帳戶 Amazon Redshift Data API 操作和資源的完整存取權。

您可以在 IAM 主控台上找到 [AmazonRedshiftDataFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftDataFullAccess) 政策，並在《AWS 受管政策參考指南》**中找到 [AmazonRedshiftDataFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftDataFullAccess.html)。

## AmazonRedshiftQueryEditorV2FullAccess
<a name="redshift-policy-managed-policies-query-editor-V2"></a>

授予 Amazon Redshift 查詢編輯器 v2 操作和資源的完整存取權。此政策也會授予其他必要服務的存取權。

您可以在 IAM 主控台上找到 [AmazonRedshiftQueryEditorV2FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2FullAccess) 政策，並在《AWS 受管政策參考指南》**中找到 [AmazonRedshiftQueryEditorV2FullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2FullAccess.html)。

## AmazonRedshiftQueryEditorV2NoSharing
<a name="redshift-policy-managed-policies-query-editor-V2-no-sharing"></a>

授予使用 Amazon Redshift 查詢編輯器 v2 的能力，而不共用資源。此政策也會授予其他必要服務的存取權。使用此政策的主體無法標記其資源 (例如查詢)，以便與相同 AWS 帳戶中的其他主體共用。

您可以在 IAM 主控台上找到 [AmazonRedshiftQueryEditorV2NoSharing](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2NoSharing) 政策，並在《AWS 受管政策參考指南》**中找到 [AmazonRedshiftQueryEditorV2NoSharing](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2NoSharing.html)。

## AmazonRedshiftQueryEditorV2ReadSharing
<a name="redshift-policy-managed-policies-query-editor-V2-read-sharing"></a>

授予使用 Amazon Redshift 查詢編輯器 v2 的能力，並可有限度地共用資源。此政策也會授予其他必要服務的存取權。使用此政策的主體可以標記其資源 (例如查詢)，以便與相同 AWS 帳戶中的其他主體共用。獲得授予的主體可以讀取與其團隊共用的資源，但無法更新這些資源。

您可以在 IAM 主控台上找到 [AmazonRedshiftQueryEditorV2ReadSharing](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2ReadSharing) 政策，並在《AWS 受管政策參考指南》**中找到 [AmazonRedshiftQueryEditorV2ReadSharing](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2ReadSharing.html)。

## AmazonRedshiftQueryEditorV2ReadWriteSharing
<a name="redshift-policy-managed-policies-query-editor-V2-write-sharing"></a>

授予使用 Amazon Redshift 查詢編輯器 v2 的能力，並可共用資源。此政策也會授予其他必要服務的存取權。使用此政策的主體可以標記其資源 (例如查詢)，以便與相同 AWS 帳戶中的其他主體共用。獲得授予的主體可以讀取和更新與其團隊共用的資源。

您可以在 IAM 主控台上找到 [AmazonRedshiftQueryEditorV2ReadWriteSharing](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2ReadWriteSharing) 政策，並在《AWS 受管政策參考指南》**中找到 [AmazonRedshiftQueryEditorV2ReadWriteSharing](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2ReadWriteSharing.html)。

## AmazonRedshiftServiceLinkedRolePolicy
<a name="redshift-policy-managed-policies-service-linked-role-policy"></a>

您無法將 AmazonRedshiftServiceLinkedRolePolicy 附加至您的 IAM 實體。此政策會附加至服務連結角色，可讓 Amazon Redshift 存取帳戶資源。如需詳細資訊，請參閱[為 Amazon Redshift 使用服務連結角色](https://docs.aws.amazon.com/redshift/latest/mgmt/using-service-linked-roles.html)。

您可以在 IAM 主控台上找到 [AmazonRedshiftServiceLinkedRolePolicy](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftServiceLinkedRolePolicy) 政策，並在《AWS 受管政策參考指南》**中找到 [AmazonRedshiftServiceLinkedRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftServiceLinkedRolePolicy.html)。

## AmazonRedshiftAllCommandsFullAccess
<a name="redshift-policy-managed-policies-service-linked-role-commands"></a>

授予相關能力，而能夠使用從 Amazon Redshift 主控台建立的 IAM 角色，並將其設定為叢集的預設值，以便執行 COPY (從 Amazon S3)、UNLOAD、CREATE EXTERNAL SCHEMA、CREATE EXTERNAL FUNCTION 和 CREATE MODEL 命令。此政策還會授予許可，以便為相關服務 (例如 Amazon S3、CloudWatch Logs、Amazon SageMaker AI 或 AWS Glue) 執行 SELECT 陳述式。

您可以在 IAM 主控台上找到 [AmazonRedshiftAllCommandsFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftAllCommandsFullAccess) 政策，並在《AWS 受管政策參考指南》**中找到 [AmazonRedshiftAllCommandsFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftAllCommandsFullAccess.html)。

## AmazonRedshiftFederatedAuthorization
<a name="redshift-policy-managed-policies-federated-authorization"></a>

 此政策會合併使用 Amazon Redshift 聯合許可對 Glue Data Catalog 資料庫執行查詢所需的 IAM 動作。這類查詢會經過 AWS Glue，因此需要取得目錄物件的動作來探索物件，以及建立、更新、重新命名和刪除動作來修改物件。請注意，資源是由 Amazon Redshift 管理，因此委託人還需要 Redshift 許可才能完成查詢。 `glue:FederateAuthorization`動作可讓 AWS Glue 將目錄物件的授權決策委派給 Amazon Redshift。

 此政策允許主體使用 Amazon Redshift 聯合許可對目錄執行查詢，但不允許向 Glue 註冊和取消註冊 Amazon Redshift AWS 命名空間。請參閱 Amazon Redshift 聯合許可設定的 IAM 政策要求文件。

您可以在 IAM 主控台上找到 [AmazonRedshiftFederatedAuthorization](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftFederatedAuthorization) 政策，並在 *AWS 受管政策參考指南*中找到 [AmazonRedshiftFederatedAuthorization](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftFederatedAuthorization.html)。

您也能建立專屬的自訂 IAM 政策，以允許 Amazon Redshift API 操作與資源的相關許可。您可以將這些自訂政策附加至需要這些許可的 IAM 角色或群組。





## 要使用 Redshift Spectrum 所需的許可
<a name="redshift-spectrum-policy-resources"></a>

Amazon Redshift Spectrum 需要其他 AWS 服務的許可才能存取資源。如需有關 Redshift Spectrum IAM 政策中許可的詳細資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的 [Amazon Redshift Spectrum 的 IAM 政策](https://docs.aws.amazon.com/redshift/latest/dg/c-spectrum-iam-policies.html)。

## 要使用 Amazon Redshift 主控台所需的許可
<a name="redshift-policy-resources.required-permissions.console"></a>

若要讓使用者使用 Amazon Redshift 主控台，該使用者必須擁有一組最低許可，允許使用者描述其 AWS 帳戶的 Amazon Redshift 資源。這些許可也必須允許使用者描述其他相關資訊，包括 Amazon EC2 安全、Amazon CloudWatch、Amazon SNS 和網路資訊。

如果您建立比最基本必要許可更嚴格的 IAM 政策，則對於採取該 IAM 政策的使用者而言，主控台就無法如預期運作。為確保這些使用者仍可使用 Amazon Redshift 主控台，也請將 `AmazonRedshiftReadOnlyAccess` 受管政策附加至使用者。若要了解如何執行這項操作，請參閱 [AWS Amazon Redshift 的 受管政策](#redshift-policy-resources.managed-policies)。

如需有關向使用者提供 Amazon Redshift 主控台上查詢編輯器存取權的資訊，請參閱[要使用 Amazon Redshift 主控台查詢編輯器所需的許可](#redshift-policy-resources.required-permissions.query-editor)。

對於僅呼叫 AWS CLI 或 Amazon Redshift API 的使用者，您不需要允許最低主控台許可。

## 要使用 Amazon Redshift 主控台查詢編輯器所需的許可
<a name="redshift-policy-resources.required-permissions.query-editor"></a>

使用者若要使用 Amazon Redshift 查詢編輯器，就必須擁有一組包含 Amazon Redshift 和 Amazon Redshift 資料 API 操作的最基本許可。若要使用機密連線到資料庫，您也必須擁有 Secrets Manager 許可。

若要讓使用者存取 Amazon Redshift 主控台上的查詢編輯器，請連接 `AmazonRedshiftQueryEditor`和 `AmazonRedshiftReadOnlyAccess` AWS 受管政策。`AmazonRedshiftQueryEditor` 政策會讓使用者獲得僅擷取自己 SQL 陳述式結果的許可。也就是說，由`aws:userid`相同 提交的陳述式，如 `AmazonRedshiftQueryEditor` AWS 受管政策的本節所示。

```
{
    "Sid":"DataAPIIAMStatementPermissionsRestriction",
    "Action": [
        "redshift-data:GetStatementResult",
        "redshift-data:CancelStatement",
        "redshift-data:DescribeStatement",
        "redshift-data:ListStatements"
    ],
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "redshift-data:statement-owner-iam-userid": "${aws:userid}"
        }
    }
}
```

若要允許使用者擷取有相同 IAM 角色之其他人的 SQL 陳述式結果，請建立您自己的政策，但不要有用來限制目前使用者存取權的條件。同時，請限制只有管理員能獲得變更政策的存取權。

## 要使用查詢編輯器 v2 所需的許可
<a name="redshift-policy-resources.required-permissions.query-editor-v2"></a>

若要讓使用者使用 Amazon Redshift 查詢編輯器 v2，該使用者必須擁有 Amazon Redshift、查詢編輯器 v2 操作和其他 AWS 服務的一組最低許可 AWS Key Management Service，例如 AWS Secrets Manager和標記服務。

若要讓使用者完整存取查詢編輯器 v2，請連接 `AmazonRedshiftQueryEditorV2FullAccess` AWS 受管政策。`AmazonRedshiftQueryEditorV2FullAccess` 政策會讓使用者獲得與同一團隊中的其他成員共用查詢編輯器 v2 資源 (例如查詢) 的許可。如需查詢編輯器 v2 資源存取權控制方式的詳細資訊，請參閱 IAM 主控台中查詢編輯器 v2 特定受管政策的定義。

有些 Amazon Redshift 查詢編輯器 v2 AWS 受管政策會在條件內使用 AWS 標籤來限制對 資源的存取。在查詢編輯器 v2 內，會以附加至主體 (IAM 角色) 的 IAM 政策中的標籤索引鍵和值 `"aws:ResourceTag/sqlworkbench-team": "${aws:PrincipalTag/sqlworkbench-team}"` 為基礎來共用查詢。相同 AWS 帳戶 中具有相同標籤值 (例如 `accounting-team`) 的主體，在查詢編輯器 v2 中會位於相同團隊。您一次只能與一個團隊相關聯。具有管理許可的使用者可以透過為所有團隊成員提供相同的 `sqlworkbench-team` 標籤值，以在 IAM 主控台中設定團隊。如果 IAM 使用者或 IAM 角色的 `sqlworkbench-team` 標籤值發生變更，則可能要等一段時間，共用資源才會反映此變更。如果資源 (例如查詢) 的標籤值發生變更，則一樣可能要等一段時間才會反映此變更。團隊成員還必須擁有 `tag:GetResources` 許可才能共用。

**範例：新增 IAM 角色的 `accounting-team` 標籤**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

1. 在主控台導覽窗格中，選擇 **Roles** (角色)，然後選擇您要編輯的角色名稱。

1. 選擇**標籤**索引標籤，然後選擇**新增標籤**。

1. 新增標籤索引鍵 **sqlworkbench-team** 和值 `accounting-team`。

1. 選擇**儲存變更**。

   現在，當 IAM 主體 (附加了此 IAM 角色) 與團隊共用查詢時，具有相同 `accounting-team` 標籤值的其他主體都可以檢視該查詢。

如需如何將標籤附加到主體 (包括 IAM 角色和 IAM 使用者) 的相關資訊，請參閱《IAM 使用者指南》**中的[標記 IAM 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)。

您也可以使用身分提供者 (IdP) 在工作階段層級設定團隊。這可讓使用相同 IAM 角色的多個使用者擁有不同的團隊。IAM 角色的信任政策必須允許 `sts:TagSession` 操作。如需詳細資訊，請參閱《IAM 使用者指南》**中的[新增工作階段標籤所需的許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_permissions-required)。將主體標籤屬性新增至 IdP 提供的 SAML 聲明。

```
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:sqlworkbench-team">
    <AttributeValue>accounting-team</AttributeValue>
</Attribute>
```

遵循身分提供者 (IdP) 的指示，將來自目錄的內容填入到 SAML 屬性。如需身分提供者 (IdP) 和 Amazon Redshift 的相關資訊，請參閱《IAM 使用者指南》**中的[使用 IAM 身分驗證產生資料庫使用者憑證](generating-user-credentials.md)和[身分提供者和聯合](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。

`sqlworkbench:CreateNotebookVersion` 可准許在帳戶上取得筆記本儲存格的目前內容並建立筆記本版本。這意味著，在建立版本時，筆記本的目前內容會與版本的內容相同。之後，當目前的筆記本更新時，版本中的儲存格內容會保持不變。`sqlworkbench:GetNotebookVersion` 可准許取得筆記本的版本。在筆記本上沒有 `sqlworkbench:BatchGetNotebookCell` 許可但有 `sqlworkbench:CreateNotebookVersion` 和 `sqlworkbench:GetNotebookVersion` 許可的使用者可以存取版本中的筆記本儲存格。這位沒有 `sqlworkbench:BatchGetNotebookCell` 許可的使用者仍然可以透過先建立版本，然後取得所建立的這個版本，以擷取筆記本儲存格的內容。

## 要使用 Amazon Redshift 排程器所需的許可
<a name="iam-permission-scheduler"></a>

使用 Amazon Redshift 排程器時，您要設定與 Amazon Redshift 排程器 (**scheduler.redshift.amazonaws.com**) 有信任關係的 IAM 角色，讓排程器代您取得許可。您也要將政策 (許可) 附加到您想排程之 Amazon Redshift API 操作的角色。

以下範例示範 JSON 格式的政策文件，以設定與 Amazon Redshift 排程器和 Amazon Redshift 的信任關係。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "scheduler.redshift.amazonaws.com",
                    "redshift.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

如需信任實體的詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

您也必須新增要排程之 Amazon Redshift 操作的許可。

為使用 `ResizeCluster` 操作的排程器，在您的 IAM 政策中新增類似以下的許可。是否需要加強政策限制，視環境而定。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "redshift:ResizeCluster",
            "Resource": "*"
        }
    ]
}
```

------

如需為 Amazon Redshift 排程器建立角色的步驟，請參閱《*IAM 使用者指南*》中的[為 AWS 服務建立角色 （主控台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)。在 IAM 主控台中建立角色時，選擇以下項目：
+ 針對 **Choose the service that will use this role (選擇將使用此角色的服務)**：選擇 **Redshift**。
+ 針對 **Select your use case (選取您的使用案例)**：選擇 **Redshift - Scheduler (Redshift - 排程器)**。
+ 建立政策，或將政策附加到允許排程 Amazon Redshift 操作的角色。選擇 **Create policy (建立政策)** 或修改角色以連接政策。輸入要排程之操作的 JSON 政策。
+ 建立角色之後，編輯 IAM 角色的 **Trust Relationship (信任關係)** 以納入服務 `redshift.amazonaws.com`。

您建立的 IAM 角色有信任的 `scheduler.redshift.amazonaws.com` 和 `redshift.amazonaws.com` 實體。且附加了允許受支援 Amazon Redshift API 動作的政策，例如 `"redshift:ResizeCluster"`。

## 要使用 Amazon EventBridge 排程器所需的許可
<a name="iam-permission-eventbridge-scheduler"></a>

使用 Amazon EventBridge 排程器時，您要設定與 EventBridge 排程器 (**events.amazonaws.com**) 有信任關係的 IAM 角色，讓排程器代您取得許可。您也要將政策 (許可) 附加到您想排程之 Amazon Redshift 資料 API 操作的角色，以及附加 Amazon EventBridge 操作的政策。

當您使用主控台上的 Amazon Redshift 查詢編輯器建立已排程的查詢時，您會使用 EventBridge 排程器。

您可以建立 IAM 角色，以便在 IAM 主控台上執行已排程的查詢。在此 IAM 角色中，請附加 `AmazonEventBridgeFullAccess` 和 `AmazonRedshiftDataFullAccess`。

以下範例示範 JSON 格式的政策文件，以設定與 EventBridge 排程器的信任關係。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "events.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

如需信任實體的詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

如需為 EventBridge 排程器建立角色的步驟，請參閱《*IAM 使用者指南*》中的[為 AWS 服務建立角色 （主控台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)。在 IAM 主控台中建立角色時，選擇以下項目：
+ 針對**選擇將使用此角色的服務**：選擇 **CloudWatch 事件**。
+ 針對**選取您的使用案例**：選擇 **CloudWatch 事件**。
+ 附加以下許可政策：`AmazonEventBridgeFullAccess` 和 `AmazonRedshiftDataFullAccess`。

您建立的 IAM 角色有信任的 `events.amazonaws.com` 實體。且附加了允許受支援 Amazon Redshift 資料 API 動作的政策，例如 `"redshift-data:*"`。

## 要使用 Amazon Redshift 機器學習 (ML) 所需的許可
<a name="iam-permission-ml"></a>

接下來，您可以找到要針對不同使用案例使用 Amazon Redshift 機器學習 (ML) 所需之許可的描述。

若要讓使用者能夠搭配 Amazon SageMaker AI 使用 Amazon Redshift ML，請使用比預設政策更嚴格的政策來建立 IAM 角色。您可以使用下列政策。您也可以修改此政策以因應您的需求。

下列政策顯示要使用 Amazon Redshift 的模型可解釋性來執行 SageMaker AI Autopilot 所需的許可。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreateTrainingJob",
                "sagemaker:CreateAutoMLJob",
                "sagemaker:CreateCompilationJob",
                "sagemaker:CreateEndpoint",
                "sagemaker:DescribeAutoMLJob",
                "sagemaker:DescribeTrainingJob",
                "sagemaker:DescribeCompilationJob",
                "sagemaker:DescribeProcessingJob",
                "sagemaker:DescribeTransformJob",
                "sagemaker:ListCandidatesForAutoMLJob",
                "sagemaker:StopAutoMLJob",
                "sagemaker:StopCompilationJob",
                "sagemaker:StopTrainingJob",
                "sagemaker:DescribeEndpoint",
                "sagemaker:InvokeEndpoint",
                "sagemaker:StopProcessingJob",
                "sagemaker:CreateModel",
                "sagemaker:CreateProcessingJob"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:model/*redshift*",
                "arn:aws:sagemaker:*:*:training-job/*redshift*",
                "arn:aws:sagemaker:*:*:automl-job/*redshift*",
                "arn:aws:sagemaker:*:*:compilation-job/*redshift*",
                "arn:aws:sagemaker:*:*:processing-job/*redshift*",
                "arn:aws:sagemaker:*:*:transform-job/*redshift*",
                "arn:aws:sagemaker:*:*:endpoint/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/Endpoints/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/ProcessingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TrainingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TransformJobs/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": [
                        "SageMaker",
                        "/aws/sagemaker/Endpoints",
                        "/aws/sagemaker/ProcessingJobs",
                        "/aws/sagemaker/TrainingJobs",
                        "/aws/sagemaker/TransformJobs"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetAuthorizationToken",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        },
        {
            "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*/*"
            ]
        },
        {
            "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": "*",
            "Condition": {
                "StringEqualsIgnoreCase": {
                    "s3:ExistingObjectTag/Redshift": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "redshift.amazonaws.com",
                        "sagemaker.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

下列政策顯示可允許存取 Amazon DynamoDB、Redshift Spectrum 和 Amazon RDS 聯合的完整最基本許可。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreateTrainingJob",
                "sagemaker:CreateAutoMLJob",
                "sagemaker:CreateCompilationJob",
                "sagemaker:CreateEndpoint",
                "sagemaker:DescribeAutoMLJob",
                "sagemaker:DescribeTrainingJob",
                "sagemaker:DescribeCompilationJob",
                "sagemaker:DescribeProcessingJob",
                "sagemaker:DescribeTransformJob",
                "sagemaker:ListCandidatesForAutoMLJob",
                "sagemaker:StopAutoMLJob",
                "sagemaker:StopCompilationJob",
                "sagemaker:StopTrainingJob",
                "sagemaker:DescribeEndpoint",
                "sagemaker:InvokeEndpoint",
                "sagemaker:StopProcessingJob",
                "sagemaker:CreateModel",
                "sagemaker:CreateProcessingJob"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:model/*redshift*",
                "arn:aws:sagemaker:*:*:training-job/*redshift*",
                "arn:aws:sagemaker:*:*:automl-job/*redshift*",
                "arn:aws:sagemaker:*:*:compilation-job/*redshift*",
                "arn:aws:sagemaker:*:*:processing-job/*redshift*",
                "arn:aws:sagemaker:*:*:transform-job/*redshift*",
                "arn:aws:sagemaker:*:*:endpoint/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/Endpoints/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/ProcessingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TrainingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TransformJobs/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": [
                        "SageMaker",
                        "/aws/sagemaker/Endpoints",
                        "/aws/sagemaker/ProcessingJobs",
                        "/aws/sagemaker/TrainingJobs",
                        "/aws/sagemaker/TransformJobs"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetAuthorizationToken",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        },
        {
            "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*/*"
            ]
        },
        {
            "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": "*",
            "Condition": {
                "StringEqualsIgnoreCase": {
                    "s3:ExistingObjectTag/Redshift": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:Scan",
                "dynamodb:DescribeTable",
                "dynamodb:Getitem"
            ],
            "Resource": [
                "arn:aws:dynamodb:*:*:table/*redshift*",
                "arn:aws:dynamodb:*:*:table/*redshift*/index/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ListInstances"
            ],
            "Resource": [
                "arn:aws:elasticmapreduce:*:*:cluster/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ListInstances"
            ],
            "Resource": "*",
            "Condition": {
                "StringEqualsIgnoreCase": {
                    "elasticmapreduce:ResourceTag/Redshift": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": "arn:aws:lambda:*:*:function:*redshift*"
        },
        {
            "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*"
            ]
        },
        {
            "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"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "redshift.amazonaws.com",
                        "glue.amazonaws.com",
                        "sagemaker.amazonaws.com",
                        "athena.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

或者，若要使用 AWS KMS 金鑰進行加密，請將下列許可新增至政策。

```
{
    "Effect": "Allow",
    "Action": [
        "kms:CreateGrant",
        "kms:Decrypt",
        "kms:DescribeKey",
        "kms:Encrypt",
        "kms:GenerateDataKey*"
    ],
    "Resource": [
        "arn:aws:kms:<your-region>:<your-account-id>:key/<your-kms-key>"
    ]
}
```

若要允許 Amazon Redshift 和 SageMaker AI 擔任先前與其他服務互動的 IAM 角色，請將下列信任政策新增至該角色。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "redshift.amazonaws.com",
          "sagemaker.amazonaws.com",
          "forecast.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

在上文中，Amazon S3 儲存貯體 `redshift-downloads/redshift-ml/` 是用於其他步驟和範例之範例資料的儲存所在位置。如果您不需要從 Amazon S3 載入資料，則可以移除此儲存貯體。或者，也可以將其取代為您用來將資料載入 Amazon Redshift 的其他 Amazon S3 儲存貯體。

**your-account-id**、**your-role** 和 **your-s3-bucket** 值是您在 CREATE MODEL 命令中所指定的帳戶 ID、角色和儲存貯體。

或者，如果您指定要與 Amazon Redshift ML 搭配使用的 AWS KMS 金鑰，則可以使用範例政策的 AWS KMS 金鑰區段。**your-kms-key** 值是您用來作為 CREATE MODEL 命令一部分的金鑰。

當您為 hyperparameter 調校任務指定私有虛擬私有雲端 (VPC) 時，請新增下列許可。

```
{
            "Effect": "Allow",
            "Action": [
            "ec2:CreateNetworkInterface",
            "ec2:CreateNetworkInterfacePermission",
            "ec2:DeleteNetworkInterface",
            "ec2:DeleteNetworkInterfacePermission",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DescribeVpcs",
            "ec2:DescribeDhcpOptions",
            "ec2:DescribeSubnets",
            "ec2:DescribeSecurityGroups"
            ]
}
```

若要使用模型解釋，請確定您有呼叫 SageMaker AI API 操作的許可。建議您使用 `AmazonSageMakerFullAccess` 受管政策。如果您想要建立具有更嚴格政策的 IAM 角色，請使用以下政策。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateEndpoint",
        "sagemaker:CreateEndpointConfig",
        "sagemaker:DeleteEndpoint",
        "sagemaker:DeleteEndpointConfig",
        "sagemaker:DescribeEndpoint",
        "sagemaker:DescribeEndpointConfig",
        "sagemaker:DescribeModel",
        "sagemaker:InvokeEndpoint",
        "sagemaker:ListTags"
      ],
      "Resource": "*"
    }
  ]
}
```

------

如需 `AmazonSageMakerFullAccess` 受管政策的相關資訊，請參閱《Amazon SageMaker AI 開發人員指南》**中的 [AmazonSageMakerFullAccess](https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonSageMakerFullAccess)。

如果您想要建立 Forecast 模型，建議您使用 `AmazonForecastFullAccess` 受管政策。如果您想要使用更嚴格的政策，請新增以下政策至 IAM 角色。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "forecast:CreateAutoPredictor",
                "forecast:CreateDataset",
                "forecast:CreateDatasetGroup",
                "forecast:CreateDatasetImportJob",
                "forecast:CreateForecast",
                "forecast:CreateForecastExportJob",
                "forecast:DeleteResourceTree",
                "forecast:DescribeAutoPredictor",
                "forecast:DescribeDataset",
                "forecast:DescribeDatasetGroup",
                "forecast:DescribeDatasetImportJob",
                "forecast:DescribeForecast",
                "forecast:DescribeForecastExportJob",
                "forecast:StopResource",
                "forecast:TagResource",
                "forecast:UpdateDatasetGroup"
             ],
             "Resource": "*"
         }
    ]
}
```

------

如果您想要建立 Amazon Bedrock 模型，建議您使用 `AmazonBedrockFullAccess` 受管政策。如果您想要使用更嚴格的政策，請新增以下政策至 IAM 角色。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "bedrock:InvokeModel",
            "Resource": [
                "*",
                "arn:aws:bedrock:us-east-1::foundation-model/*"
            ]
        }
    ]
}
```

------

如需 Amazon Redshift ML 的詳細資訊，請參閱[在 Amazon Redshift 中使用機器學習](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning.html)、[CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html) 或 [CREATE EXTERNAL MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_create_external_model.html)。

## 串流擷取的許可
<a name="iam-permission-streaming-ingestion"></a>

串流擷取可與兩個服務搭配運作。這兩個服務是 Kinesis Data Streams 和 Amazon MSK。

### 要搭配 Kinesis Data Streams 使用串流擷取所需的許可
<a name="iam-permission-streaming-ingestion-kinesis"></a>

您可以在[開始從 Amazon Kinesis Data Streams 擷取串流](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started.html)中找到包含受管政策範例的程序。

### 要搭配 Amazon MSK 使用串流擷取所需的許可
<a name="iam-permission-streaming-ingestion-kafka"></a>

您可以在[開始從 Amazon Managed Streaming for Apache Kafka 擷取串流](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started-MSK.html)中找到包含受管政策範例的程序。

## 要使用資料共用 API 操作所需的許可
<a name="iam-permission-datasharing"></a>

若要控制資料共用 API 操作的存取權，請使用 IAM 動作型政策。如需有關如何管理 IAM 政策的資訊，請參閱《IAM 使用者指南》**中的[管理 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)。

具體而言，假設生產者叢集管理員需要使用 `AuthorizeDataShare` 呼叫來為 AWS 帳戶外部的資料共用授權輸出。在此情況下，您需要設定 IAM 動作型政策以授予此許可。使用 `DeauthorizeDataShare` 呼叫以撤銷輸出。

使用 IAM 動作型政策時，您也可以在政策中指定 IAM 資源，例如 `DataShareARN`。以下內容會顯示 `DataShareARN` 的格式和範例。

```
arn:aws:redshift:region:account-id:datashare:namespace-guid/datashare-name
arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/SalesShare
```

您可以在 IAM 政策中指定資料共用名稱，以限制特定資料共用的 `AuthorizeDataShare` 存取權。

```
{
  "Statement": [
    {
      "Action": [
        "redshift:AuthorizeDataShare",
      ],
      "Resource": [
        "arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/SalesShare"
      ],
      "Effect": "Deny"
    }
  ]
}
```

您也可以將 IAM 政策的範圍限制在特定生產者叢集擁有的所有資料共用。若要這麼做，請使用萬用字元或星號來取代政策中的 **datashare-name** 值。保留叢集的 `namespace-guid` 值。

```
arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/*
```

以下是可防止實體呼叫特定生產者叢集所擁有資料共用上 `AuthorizeDataShare` 的 IAM 政策。

```
{
  "Statement": [
    {
      "Action": [
        "redshift:AuthorizeDataShare",
      ],
      "Resource": [
        "arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/*"
      ],
      "Effect": "Deny"
    }
  ]
}
```

`DataShareARN` 會根據資料共用名稱和擁有端叢集命名空間的全域唯一 ID (GUID) 來限制存取權。其會透過將名稱指定為星號來進行此操作。

## GetClusterCredentials 的資源政策
<a name="redshift-policy-resources.getclustercredentials-resources"></a>

若要使用具有 IAM 資料庫憑證的 JDBC 或 ODBC 連線連線到叢集資料庫，或以程式設計方式呼叫 `GetClusterCredentials`動作，您需要許可來呼叫可存取 `dbuser` 資源`redshift:GetClusterCredentials`的動作。

如果您使用 JDBC 或 ODBC 連線，而不是 `server` 和 `port`，您可以指定 `cluster_id` 和 `region`，但要這麼做，您的政策必須允許具有 `redshift:DescribeClusters` 資源存取的 `cluster` 動作。

如果您使用選用參數 `Autocreate`、`DbGroups` 和 `DbName` 來呼叫 `GetClusterCredentials`，請務必也允許動作並允許下表所列資源的存取權。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)

如需資源的相關資訊，請參閱[Amazon Redshift 資源和操作](redshift-iam-access-control-overview.md#redshift-iam-accesscontrol.actions-and-resources)。

您也可以在政策包含下列條件：
+ `redshift:DurationSeconds`
+ `redshift:DbName`
+ `redshift:DbUser`

**重要**  
對於 SAML SSO 整合，您可能需要使用 `${redshift:DbUser}`變數指定 IAM 政策。在這些情況下，我們強烈建議使用條件陳述式，以確保發起人無法取得與其 AWS 使用者 ID 不相符的使用者登入資料。例如 `"StringEquals": {"aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}"}"`。請參閱 [範例 8：使用 GetClusterCredentials 的 IAM 政策](#redshift-policy-examples-getclustercredentials)。如需條件的詳細資訊，請參閱[在政策中指定條件](redshift-iam-access-control-overview.md#redshift-policy-resources.specifying-conditions) 

## 客戶管理政策範例
<a name="redshift-iam-accesscontrol.examples"></a>

在本節中，您可以找到授予各種 Amazon Redshift 動作之許可的使用者政策範例。當您使用 Amazon Redshift API、 AWS SDKs或 時，這些政策即可運作 AWS CLI。

**注意**  
所有範例皆使用美國西部 (奧勒岡) 區域 (`us-west-2`) 及虛構帳戶 ID。

### 範例 1：允許使用者對所有 Amazon Redshift 動作和資源的完整存取權
<a name="redshift-policy-example-allow-full-access"></a>

下列政策允許存取處理所有資源的所有 Amazon Redshift 動作。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowRedshift",
      "Action": [
        "redshift:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

------

`Action` 元素中的值 `redshift:*` 指出 Amazon Redshift 中的所有動作。

### 範例 2：拒絕使用者存取一組 Amazon Redshift 動作
<a name="redshift-policy-example-deny-specific-actions"></a>

預設會拒絕所有的許可。不過，有時您必須明確拒絕對特定動作或動作集的存取權。下列政策允許對所有 Amazon Redshift 動作的存取權，並明確拒絕對名稱開頭為 `Delete` 之任何 Amazon Redshift 動作的存取權。此政策適用於 `us-west-2` 中的所有 Amazon Redshift 資源。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowUSWest2Region",
      "Action": [
        "redshift:*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:redshift:us-east-1:111122223333:*"
    },
   {
     "Sid":"DenyDeleteUSWest2Region",
     "Action": [
        "redshift:Delete*"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:redshift:us-east-1:111122223333:*"
   }
  ]
}
```

------

### 範例 3：允許使用者管理叢集
<a name="redshift-policy-example-allow-manage-clusters"></a>

下列政策允許使用者建立、刪除、修改所有叢集和將它們重新開機，然後拒絕刪除叢集名稱開頭為 `protected` 之任何叢集的許可。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowClusterManagement",
      "Action": [
        "redshift:CreateCluster",
        "redshift:DeleteCluster",
        "redshift:ModifyCluster",
        "redshift:RebootCluster"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"DenyDeleteProtected",
      "Action": [
        "redshift:DeleteCluster"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:cluster:protected*"
      ],
      "Effect": "Deny"
    }
  ]
}
```

------

### 範例 4：允許使用者授權和撤銷快照存取
<a name="redshift-policy-example-allow-authorize-revoke-snapshot"></a>

下列政策允許使用者 (例如使用者 A) 來執行下列動作：
+ 授予對透過名為 `shared` 之叢集建立的任何快照的存取權。
+ 撤銷對透過 `shared` 叢集建立、快照名稱開頭為 `revokable` 之任何快照的快照存取權。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowSharedSnapshots",
      "Action": [
        "redshift:AuthorizeSnapshotAccess"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:shared/*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"AllowRevokableSnapshot",
      "Action": [
        "redshift:RevokeSnapshotAccess"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:*/revokable*"
      ],
      "Effect": "Allow"
    }
  ]
}
```

------

如果使用者 A 已允許使用者 B 存取快照，使用者 B 必須具備以下這類的政策以允許使用者 B 從快照還原叢集。下列政策允許使用者 B 從快照描述和還原，以及建立叢集。這些叢集名稱的開頭必須是 `from-other-account`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowDescribeSnapshots",
      "Action": [
        "redshift:DescribeClusterSnapshots"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"AllowUserRestoreFromSnapshot",
      "Action": [
        "redshift:RestoreFromClusterSnapshot"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:*/*",
        "arn:aws:redshift:us-west-2:444455556666:cluster:from-other-account*"
      ],
      "Effect": "Allow"
    }
  ]
}
```

------

### 範例 5：允許使用者複製叢集快照和從快照還原叢集
<a name="redshift-policy-example-allow-copy-restore-snapshot"></a>

下列政策允許使用者複製透過名為 `big-cluster-1` 之叢集建立的任何快照，以及還原快照名稱開頭為 `snapshot-for-restore` 的任何快照。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowCopyClusterSnapshot",
      "Action": [
        "redshift:CopyClusterSnapshot"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:big-cluster-1/*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"AllowRestoreFromClusterSnapshot",
      "Action": [
        "redshift:RestoreFromClusterSnapshot"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:*/snapshot-for-restore*",
        "arn:aws:redshift:us-west-2:123456789012:cluster:*"
      ],
      "Effect": "Allow"
    }
  ]
}
```

------

### 範例 6：允許使用者存取 Amazon Redshift，以及相關 AWS 服務的常見動作和資源
<a name="redshift-policy-example-allow-related-services"></a>

 以下範例政策可讓您存取 Amazon Redshift、Amazon Simple Notiﬁcation Service (Amazon SNS) 和 Amazon CloudWatch 的所有動作和資源。它也會允許在該帳戶下於所有相關 Amazon EC2 資源上的指定動作。

**注意**  
 此範例政策中指定的 Amazon EC2 動作不支援資源層級許可。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowRedshift",
      "Effect": "Allow",
      "Action": [
        "redshift:*"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid":"AllowSNS",
      "Effect": "Allow",
        "Action": [
          "sns:*"
        ],
        "Resource": [
          "*"
        ]
      },
    {
      "Sid":"AllowCloudWatch",
      "Effect": "Allow",
      "Action": [
        "cloudwatch:*"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid":"AllowEC2Actions",
      "Effect": "Allow",
      "Action": [
        "ec2:AllocateAddress",
        "ec2:AssociateAddress",
        "ec2:AttachNetworkInterface",
        "ec2:DescribeAccountAttributes",
        "ec2:DescribeAddresses",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeInternetGateways",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSubnets",
        "ec2:DescribeVpcs"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

### 範例 7：允許使用者使用 Amazon Redshift 主控台標記資源
<a name="redshift-policy-example-allow-tagging-with-console"></a>

以下範例政策可讓使用者使用 AWS Resource Groups透過 Amazon Redshift 主控台標記資源。此政策可附加至會叫用新的或原始 Amazon Redshift 主控台的使用者角色。如需標記的相關資訊，請參閱[在 Amazon Redshift 中標記資源](amazon-redshift-tagging.md)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid":"TaggingPermissions",
            "Effect": "Allow",
            "Action": [
                "redshift:DeleteTags",
                "redshift:CreateTags",
                "redshift:DescribeTags",
                "tag:UntagResources",
                "tag:TagResources"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 範例 8：使用 GetClusterCredentials 的 IAM 政策
<a name="redshift-policy-examples-getclustercredentials"></a>

以下範例政策使用這些範例參數值：
+ 區域: `us-west-2` 
+ AWS 帳戶： `123456789012`
+ 叢集名稱: `examplecluster` 

以下策略启用 `GetCredentials`、`CreateClusterUser` 和 `JoinGroup` 操作。政策使用條件索引鍵，只在 AWS 使用者 ID 符合 時，才允許 `GetClusterCredentials`和 `CreateClusterUser`動作`"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com"`。僅會對 `"testdb"` 資料庫請求 IAM 存取權。此政策也允許使用者加入名為 `"common_group"` 的群組。

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

****  

```
{
"Version":"2012-10-17",		 	 	 
  "Statement": [
    {
     "Sid":"GetClusterCredsStatement",
      "Effect": "Allow",
      "Action": [
        "redshift:GetClusterCredentials"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/${redshift:DbUser}",
        "arn:aws:redshift:us-west-2:123456789012:dbname:examplecluster/testdb",
        "arn:aws:redshift:us-west-2:123456789012:dbgroup:examplecluster/common_group"
      ],
        "Condition": {
           "StringEquals": {
           "aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com"
           }
        }
    },
    {
      "Sid":"CreateClusterUserStatement",
      "Effect": "Allow",
      "Action": [
        "redshift:CreateClusterUser"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/${redshift:DbUser}"
      ],
      "Condition": {
        "StringEquals": {
          "aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com"
        }
      }
    },
    {
      "Sid":"RedshiftJoinGroupStatement",
      "Effect": "Allow",
      "Action": [
        "redshift:JoinGroup"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:dbgroup:examplecluster/common_group"
      ]
    }
  ]
}
```

------

下面的範例顯示允許 IAM 角色呼叫 `GetClusterCredentials` 操作的政策。指定 Amazon Redshift `dbuser` 資源會將角色存取授予名為 ` examplecluster` 的叢集上的資料庫使用者名稱 ` temp_creds_user`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "redshift:GetClusterCredentials",
    "Resource": "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/temp_creds_user"
  }
}
```

------

您可以使用萬用字元 (\$1) 來取代全部或一部分的叢集名稱、使用者名稱和資料庫群組名稱。以下範例允許指定帳戶中任何叢集任何開頭為 `temp_` 的使用者名稱。

**重要**  
下列範例中的陳述式指定萬用字元 (\$1) 做為資源的部分值，因此政策允許任何開頭為指定字元的資源。在 IAM 政策中使用萬用字元可能會授予過多許可，根據最佳實務，建議使用適用於您商業應用程式最嚴苛的政策。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "redshift:GetClusterCredentials",
    "Resource": "arn:aws:redshift:us-west-2:123456789012:dbuser:*/temp_*"
  }
}
```

------

以下範例顯示允許 IAM 角色呼叫 `GetClusterCredentials` 操作的政策，且選項將自動建立新使用者並指定使用者於登入時加入的群組。`"Resource": "*" `子句授予角色任何資源的存取權，包括叢集、資料庫使用者或使用者群組。

**重要**  
下列範例中的 陳述式指定萬用字元 (\$1) 做為指定動作的資源，以便政策允許存取任何叢集和資料庫使用者，並允許建立任何使用者。在 IAM 政策中使用萬用字元可能會授予過多許可，根據最佳實務，建議使用適用於您商業應用程式最嚴苛的政策。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
             "redshift:GetClusterCredentials",
             "redshift:CreateClusterUser",
		"redshift:JoinGroup"
            ],
    "Resource": "*"
  }
}
```

------

如需詳細資訊，請參閱 [Amazon Redshift ARN 語法](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-redshift)。

# Amazon Redshift 的原生身分提供者 (IdP) 聯合
<a name="redshift-iam-access-control-native-idp"></a>

使用原生身分提供者聯合可以更輕鬆地管理 Amazon Redshift 的身分和許可，因為它可以運用您現有的身分提供者來簡化身分驗證和管理許可。它會透過將身分中繼資料從您的身分提供者共用至 Redshift 來達成此目的。對於此功能的第一個迭代，支援的身分提供者是 [Microsoft Azure Active Directory (Azure AD)](https://azure.microsoft.com/en-us/services/active-directory/)。

若要設定 Amazon Redshift 以便能夠從第三方身分提供者進行身分驗證，請向 Amazon Redshift 註冊身分提供者。這樣做可讓 Redshift 驗證身分提供者所定義的使用者和角色。因此，您就不必在第三方身分提供者和 Amazon Redshift 中執行精細的身分管理，因為身分資訊會共用。

如需有關使用從身分提供者 (IdP) 群組傳輸而來之工作階段角色的資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的 [PG\$1GET\$1SESSION\$1ROLES](https://docs.aws.amazon.com/redshift/latest/dg/PG_GET_SESSION_ROLES.html)。

## 原生身分提供者 (IdP) 聯合
<a name="redshift-iam-access-control-native-idp-login"></a>

 若要完成身分提供者和 Amazon Redshift 之間的初步設定，請執行幾個步驟：首先，向身分提供者將 Amazon Redshift 註冊為第三方應用程式，以請求必要的 API 許可。然後，在身分提供者中建立使用者和群組。最後，使用會設定身分提供者專屬身分驗證參數的 SQL 陳述式向 Amazon Redshift 註冊身分提供者。在向 Redshift 註冊身分提供者時，指派命名空間以確保使用者和角色會正確分組。

 透過向 Amazon Redshift 註冊的身分提供者，可以在 Redshift 與身分提供者之間設定通訊。然後，用戶端可以傳遞字符並以身分提供者實體的身分向 Redshift 進行驗證。Amazon Redshift 會使用 IdP 群組成員資格資訊以映射至 Redshift 角色。如果使用者先前不存在於 Redshift 中，系統會建立該使用者。系統會建立映射至身分提供者群組的角色 (如果它們不存在)。Amazon Redshift 管理員在角色上授予許可，使用者可以執行查詢和執行其他資料庫任務。

下列步驟概述使用者登入時，原生身分提供者聯合的運作方式：

1. 當使用者從用戶端使用原生 IdP 選項登入時，身分提供者字符會從用戶端傳送至驅動程式。

1. 使用者會進行身分驗證。如果該使用者還未存在於 Amazon Redshift 中，系統便會建立新使用者。Redshift 會將使用者的身分提供者群組映射至 Redshift 角色。

1. 系統會根據使用者的 Redshift 角色指派許可。這些許可會由管理員授予給使用者和角色。

1. 使用者可以查詢 Redshift。

## 桌面用戶端工具
<a name="redshift-iam-access-control-native-idp-oauth"></a>

如需如何使用原生身分提供者聯合透過 Power BI 連線到 Amazon Redshift 的指示，請參閱部落格文章[整合 Amazon Redshift 原生 IdP 聯合與 Microsoft Azure Active Directory (AD) 和 Power BI](https://aws.amazon.com/blogs/big-data/integrate-amazon-redshift-native-idp-federation-with-microsoft-azure-ad-and-power-bi/)。該文章中描述了使用 Azure AD 的 Amazon Redshift 原生 IdP 設定的逐步實作方式。其內容會詳細說明用來為 Power BI 桌面版或 Power BI 服務設定用戶端連線的步驟。這些步驟包括註冊應用程式、設定許可和設定憑證。

若要了解如何使用 Power BI 桌面版和 JDBC 用戶端 SQL Workbench/J 來整合 Amazon Redshift 原生 IdP 聯合，請觀看以下影片：

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/S3MQLvZ-NiI/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/S3MQLvZ-NiI)


如需如何使用原生身分提供者聯合透過 SQL 用戶端 (具體來說是 DBeaver 或 SQL Workbench/J) 連線至 Amazon Redshift 的指示，請參閱部落格文章[使用 SQL 用戶端將 Amazon Redshift 原生 IdP 聯合與 Microsoft Azure AD 進行整合](https://aws.amazon.com/blogs/big-data/integrate-amazon-redshift-native-idp-federation-with-microsoft-azure-ad-using-a-sql-client/)。

## 限制
<a name="redshift-iam-access-control-idp-connect-limitations"></a>

這些限制均適用：
+  Amazon Redshift 驅動器支援下列版本以後的 `BrowserIdcAuthPlugin`：
  +  Amazon Redshift JDBC 驅動器 v2.1.0.30 
  +  Amazon Redshift ODBC 驅動器 v2.1.3 
  +  Amazon Redshift Python 驅動器 v2.1.3 
+  Amazon Redshift 驅動器支援下列版本以後的 `IdpTokenAuthPlugin`：
  +  Amazon Redshift JDBC 驅動器 v2.1.0.19 
  +  Amazon Redshift ODBC 驅動器 v2.0.0.9 
  +  Amazon Redshift Python 驅動器 v2.0.914 
+ **不支援增強型 VPC** - 當您使用 AWS IAM Identity Center 設定 Redshift 可信身分傳播時，不支援增強型 VPC。如需增強型 VPC 的詳細資訊，請參閱 [Amazon Redshift 中的增強型 VPC 路由](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html)。
+  **AWS IAM Identity Center 快取** – AWS IAM Identity Center 快取工作階段資訊。當您嘗試透過 Redshift 查詢編輯器 v2 連線至 Redshift 資料庫時，這可能會導致無法預測的存取問題。這是因為查詢編輯器 v2 AWS 中的關聯 IAM Identity Center 工作階段仍然有效，即使資料庫使用者從 AWS 主控台登出也是如此。快取會在一小時後過期，通常這樣就會修復所有問題。

# 在 Amazon Redshift 上設定身分提供者
<a name="redshift-iam-access-control-native-idp-setup"></a>

本節說明用來設定身分提供者和 Amazon Redshift 以便為原生身分提供者聯合建立通訊的步驟。您需要身分提供者的作用中帳戶。在設定 Amazon Redshift 之前，您必須向身分提供者將 Redshift 註冊為應用程式，並授予管理員同意。

在 Amazon Redshift 中完成以下步驟：

1. 執行 SQL 陳述式以註冊識別提供者，包括 Azure 應用程式中繼資料的描述。若要在 Amazon Redshift 中建立身分提供者，請在取代 *issuer*、*client\$1id*、*client\$1secret* 和 *audience* 參數值後執行下列命令。這些參數是 Microsoft Azure AD 的特有參數。請將身分提供者名稱取代為您選擇的名稱，並以唯一名稱取代命名空間，以包含您身分提供者目錄中的使用者和角色。

   ```
   CREATE IDENTITY PROVIDER oauth_standard TYPE azure
   NAMESPACE 'aad'
   PARAMETERS '{
   "issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
   "client_id":"<client_id>",
   "client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
   "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
   }'
   ```

   `azure` 類型表示提供者具體來說有利於與 Microsoft Azure AD 進行通訊。這是目前唯一支援的第三方身分提供者。
   + *issuer* — 收到字符時要信任的發行者 ID。發行者會附加 *tenant\$1id* 的唯一識別碼。
   + *client\$1id* — 向身分提供者註冊之應用程式的唯一公共識別碼。這可以稱為應用程式 ID。
   + *client\$1secret* — 只有身分提供者和已註冊的應用程式才知道的機密識別碼或密碼。
   + *audience* — 指派給 Azure 中應用程式的應用程式 ID。

   

   您可以在建立身分提供者時設定參數以指定憑證、私有金鑰和私有金鑰密碼，而不是使用共用用戶端機密。

   ```
   CREATE IDENTITY PROVIDER example_idp TYPE azure 
   NAMESPACE 'example_aad' 
   PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/", 
   "client_id":"<client_id>", 
   "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"], 
   "client_x5t":"<certificate thumbprint>", 
   "client_pk_base64":"<private key in base64 encoding>", 
   "client_pk_password":"test_password"}';
   ```

   私有金鑰密碼 *client\$1pk\$1password* 是選擇性的。

1. 選擇性：在 Amazon Redshift 中執行 SQL 命令以預先建立使用者和角色。這有助於事先授予許可。Amazon Redshift 中的角色名稱如下所示：*<Namespace>:<GroupName on Azure AD>*。例如，當您在 Microsoft Azure AD 中建立名為 `rsgroup` 的群組和名為 `aad` 的命名空間時，角色名稱會是 `aad:rsgroup`。Amazon Redshift 中的使用者和角色名稱，這些名稱是根據身分提供者命名空間中的這些使用者和群組成員資格定義的。

   角色和使用者的映射包括驗證其 `external_id` 值，以確保它是最新的。外部 ID 會映射至身分提供者中群組或使用者的識別碼。例如，角色的外部 ID 會映射至對應的 Azure AD 群組 ID。同樣地，每個使用者的外部 ID 會映射至身分提供者中的 ID。

   ```
   create role "aad:rsgroup";
   ```

1. 根據您的要求向角色授予相關許可。例如：

   ```
   GRANT SELECT on all tables in schema public to role "aad:rsgroup";
   ```

1. 您也可以向特定使用者授予許可。

   ```
   GRANT SELECT on table foo to aad:alice@example.com
   ```

   請注意，聯合的外部使用者的角色成員資格只能在該使用者的工作階段中使用。這會對建立資料庫物件造成影響。例如，當聯合的外部使用者建立任何檢視或預存程序時，同一使用者便無法將這些物件的許可委派給其他使用者和角色。

**命名空間的解釋**

命名空間會將使用者或角色映射至特定身分提供者。例如，在 IAM AWS 中建立的使用者字首為 `iam:`。此前置詞可防止使用者名稱發生衝突，並可實現對於多個身分存放區的支援。如果使用 *aad* 命名空間註冊之身分來源的使用者 alice@example.com 登入，則系統會在 Redshift 中建立使用者 `aad:alice@example.com` (如果該使用者尚未存在)。請注意，使用者和角色命名空間的功能與 Amazon Redshift 叢集命名空間 (這是與叢集相關聯的唯一識別碼) 的功能不同。

# 自動為身分提供者建立 Amazon Redshift 角色
<a name="redshift-iam-access-control-native-idp-autocreate"></a>

此功能可讓您根據身分提供者 (IdP) 的群組成員資格，在 Redshift 中自動建立角色。自動建立角色支援與原生 IdP 整合的 Azure Active Directory。

自動建立角色有幾個優點。當您自動建立角色時，Redshift 建立的角色會具有 IdP 中的群組成員資格，如此就能避免繁瑣的手動角色建立和維護工作。您也可以選擇篩選哪些群組要對應至 Redshift 角色。

## 運作方式
<a name="sso-autocreate-overview"></a>

當您以 IdP 使用者身分登入 Redshift 時，下列事件會按順序發生：

1. Redshift 從 IdP 擷取您的群組成員資格。

1. Redshift 自動建立對應到這些群組的角色，且角色的格式為 `idp_namespace:rolename`。

1. Redshift 對您授予對應角色的許可。

每次使用者登入時，都會自動建立使用者所屬但不存在目錄內的每個群組。您可以選擇性地設定包含和排除篩選條件，以控制哪些 IdP 群組要建立 Redshift 角色。

## 設定自動建立角色
<a name="sso-autocreate-configuring"></a>

使用 `CREATE IDENTITY PROVIDER` 和 `ALTER IDENTITY PROVIDER` 命令來啟用並設定自動角色建立。

```
-- Create a new IdP with auto role creation enabled
CREATE IDENTITY PROVIDER <idp_name> TYPE azure
  NAMESPACE '<namespace>' 
  APPLICATION_ARN 'app_arn'
  IAM_ROLE 'role_arn'
  AUTO_CREATE_ROLES TRUE; 

-- Enable on existing IdP 
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES TRUE;

-- Disable  
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES FALSE;
```

## 篩選群組
<a name="sso-autocreate-filtering"></a>

您可以選擇使用 `INCLUDE` 和 `EXCLUDE` 模式，篩選哪些 IdP 群組要對應至 Redshift 角色。當模式發生衝突時，`EXCLUDE` 優先於 `INCLUDE`。

```
-- Only create roles for groups with 'dev' 
CREATE IDENTITY PROVIDER <idp_name> TYPE azure
  ...
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%';
    
-- Exclude 'test' groups
ALTER IDENTITY PROVIDER <idp_name> 
  AUTO_CREATE_ROLES TRUE
  EXCLUDE GROUPS LIKE '%test%';
```

## 範例
<a name="sso-autocreate-filtering"></a>

下列範例示範如何在不進行篩選的情況下開啟自動建立角色。

```
CREATE IDENTITY PROVIDER prod_idc TYPE azure ...
  AUTO_CREATE_ROLES TRUE;
```

下列範例包含開發群組並排除測試群組。

```
ALTER IDENTITY PROVIDER prod_idc
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%'
  EXCLUDE GROUPS LIKE '%test%';
```

## 最佳實務
<a name="sso-autocreate-bp"></a>

當您啟用角色的自動建立功能時，請考慮下列最佳實務：
+ 使用 `INCLUDE` 和 `EXCLUDE` 篩選條件來控制哪些群組會取得角色。
+ 定期稽核角色並清除未使用的角色。
+ 利用 Redshift 角色階層來簡化許可管理。

# 將 Redshift 與 AWS IAM Identity Center 連線，以獲得單一登入體驗
<a name="redshift-iam-access-control-idp-connect"></a>

您可以透過信任身分傳播來管理使用者和群組對 Amazon Redshift 資料倉儲的存取。

[信任的身分傳播](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overview.html)是一項 AWS IAM Identity Center 功能，連線的管理員 AWS 服務 可以使用此功能來授予和稽核服務資料的存取權。存取此資料是根據使用者屬性，例如群組關聯。設定信任的身分傳播需要連線的管理員 AWS 服務 與 IAM Identity Center 管理員之間的協同合作。如需詳細資訊，請參閱[先決條件和考量](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overall-prerequisites.html)。

若要說明一個end-to-end案例，您可以使用 Amazon Quick 儀表板或 Amazon Redshift 查詢編輯器 v2 來存取 Redshift。在這種情況下，存取權是以 AWS IAM Identity Center 群組為基礎。Redshift 可以判斷使用者是誰及其群組成員資格。 AWS IAM Identity Center 也可以透過 Okta 或 PingOne 等第三方身分提供者 (IdP) 來連接和管理身分。

在管理員設定 Redshift 和 IAM Identity Center AWS 之間的連線後，他們可以根據身分提供者群組設定精細存取，以授權使用者存取資料。

**重要**  
當您從 IAM Identity Center AWS 或連線身分提供者 (IdP) 目錄刪除使用者時，使用者不會自動從 Amazon Redshift 目錄中刪除。若要從 Amazon Redshift 目錄手動刪除使用者，請執行 `DROP USER`命令以完全刪除從 IAM Identity Center AWS 或 IdP 移除的使用者。如需如何捨棄使用者的詳細資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的 [DROP USER](https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_USER.html)。

## Redshift 與 IAM Identity Center AWS 整合的優勢
<a name="redshift-iam-access-control-idp-connect-benefits"></a>

搭配 Redshift 使用 AWS IAM Identity Center 可透過下列方式讓您的組織受益：
+  中的儀表板作者 Amazon Quick 可以連線到 Redshift 資料來源，而無需重新輸入密碼或要求管理員設定具有複雜許可的 IAM 角色。
+  AWS IAM Identity Center 為您的人力資源使用者提供集中位置 AWS。您可以直接在 AWS IAM Identity Center 中建立使用者和群組，或連接您在標準型身分提供者中管理的現有使用者和群組，例如 Okta、PingOne 或 Microsoft Entra ID (Azure AD)。 AWS IAM Identity Center 會將身分驗證導向使用者和群組的所選事實來源，並維護使用者和群組的目錄，以供 Redshift 存取。如需詳細資訊，請參閱 *AWS IAM Identity Center 使用者指南*中的[管理身分來源](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source.html)和[支援的身分提供者](https://docs.aws.amazon.com/singlesignon/latest/userguide/supported-idps.html)。
+ 您可以使用簡單的自動探索和連線功能，與多個 Redshift 叢集和工作群組共用一個 AWS IAM Identity Center 執行個體。這可讓您快速新增叢集，而無需額外努力為每個叢集設定 AWS IAM Identity Center 連線，並確保所有叢集和工作群組都有一致的使用者、其屬性和群組檢視。請注意，組織的 AWS IAM Identity Center 執行個體必須與您連線的任何 Redshift 資料共用位於相同的區域。
+ 由於使用者身分是已知且會隨著資料存取而被記錄，因此您可以更輕鬆地透過稽核中的使用者存取權來符合法規 AWS CloudTrail。

## 連接應用程式的管理員角色
<a name="redshift-iam-access-control-idp-personas"></a>

以下是將分析應用程式連線至適用於 Redshift 的 AWS IAM Identity Center 受管應用程式的關鍵角色：
+ **應用程式管理員** — 建立應用程式，並設定應用程式將啟用哪些服務來交換身分字符。此管理員也會指定哪些使用者或群組可存取應用程式。
+ **資料管理員** — 設定對資料的精細存取權限。IAM Identity Center AWS 中的使用者和群組可以映射到特定許可。

## 透過 使用 IAM Identity Center 連線至 AWS Amazon Redshift Amazon Quick
<a name="redshift-iam-access-control-idp-connect-qs"></a>

以下說明如何使用 Quick 在連線至 Redshift 時向 Redshift 進行身分驗證，並透過 IAM Identity Center AWS 管理存取：[授權從 Quick 到 Amazon Redshift 叢集的連線](https://docs.aws.amazon.com/quick/latest/userguide/enabling-access-redshift.html)。這些步驟也適用於 Amazon Redshift Serverless。

## 透過 Amazon Redshift 查詢編輯器 v2 使用 AWS IAM Identity Center 連線至 Amazon Redshift
<a name="redshift-iam-access-control-idp-connect-qe"></a>

完成設定 IAM Identity Center AWS 與 Redshift 連線的步驟後，使用者可以透過以 AWS IAM Identity Center 為基礎的命名空間字首身分，存取資料庫中的資料庫和適當的物件。如需有關使用查詢編輯器 v2 登入連線至 Redshift 資料庫的詳細資訊，請參閱 [使用查詢編輯器 v2 查詢資料庫使用 Amazon Redshift 查詢編輯器 v2 來查詢資料庫](query-editor-v2.md)。



## 跨多個 使用 AWS IAM Identity Center AWS 區域
<a name="redshift-iam-access-control-idp-connect-multi-region"></a>

Amazon Redshift AWS 在多個 中支援 IAM Identity Center AWS 區域。您可以將 AWS IAM Identity Center 從主要區域擴展 AWS 區域 到其他區域，透過接近使用者和可靠性來改善效能。在 IAM Identity Center AWS 中新增新區域時，您可以在新區域中建立 Redshift IAM Identity Center 應用程式，而無需從主要區域複寫身分。您可以在新的區域中使用 AWS IAM Identity Center 設定 Amazon Redshift 聯合許可，您可以在其中啟用資料列層級、資料欄層級和遮罩控制項。如需在多個區域中開始使用 AWS IAM Identity Center 的詳細資訊，請參閱《[AWS IAM Identity Center 使用者指南》中的管理多個 中的 AWS 區域](https://docs.aws.amazon.com/singlesignon/latest/userguide/multi-region-iam-identity-center.html) *AWS IAM Identity Center*。

## 使用 IAM Identity Center 連線至 Amazon Redshift AWS 的限制
<a name="redshift-iam-access-control-idp-connect-limitations"></a>

使用 AWS IAM Identity Center 單一登入時，請考慮下列限制：


+  **不支援增強型 VPC** – 當您為 Amazon Redshift 使用 AWS IAM Identity Center 單一登入時，不支援增強型 VPC。如需增強型 VPC 的詳細資訊，請參閱 [Amazon Redshift 中的增強型 VPC 路由](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html)。

# 設定與 AWS Amazon Redshift 的 IAM Identity Center 整合
<a name="redshift-iam-access-control-idp-connect-console"></a>

您的 Amazon Redshift 叢集管理員或 Amazon Redshift Serverless 管理員必須執行數個步驟，將 Redshift 設定為已啟用 AWS IAM Identity Center 的應用程式。這可讓 Redshift 自動探索並連線至 AWS IAM Identity Center，以接收登入和使用者目錄服務。之後，當 Redshift 管理員建立叢集或工作群組時，他們可以讓新的資料倉儲使用 AWS IAM Identity Center 來管理資料庫存取。

將 Redshift 啟用為 AWS IAM Identity Center 受管應用程式是 ，因此您可以從 IAM Identity Center AWS 內或與其整合的第三方身分提供者控制使用者和群組許可。當您的資料庫使用者登入 Redshift 資料庫時，例如分析師或資料科學家，它會在 IAM Identity Center AWS 中檢查其群組，並比對 Redshift 中的角色名稱。以這種方式定義 Redshift 資料庫角色名稱的群組，可以存取一組用於銷售分析的資料表。下列各節展示如何設定此項。

## 先決條件
<a name="redshift-iam-access-control-idp-connect-prerequisites"></a>

以下是將 AWS IAM Identity Center 與 Amazon Redshift 整合的先決條件：
+ *帳戶組態* – 如果您計劃有跨帳戶使用案例，或是您在具有相同 AWS AWS IAM Identity Center 執行個體的不同帳戶中使用 Redshift 叢集，則必須在 AWS 組織的管理帳戶中設定 IAM Identity Center。這包括設定您的身分識別來源。如需詳細資訊，請參閱 *AWS IAM Identity Center 使用者指南*中的[入門](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)、[員工身分識別](https://docs.aws.amazon.com/singlesignon/latest/userguide/identities.html)和[支援的身分提供者](https://docs.aws.amazon.com/singlesignon/latest/userguide/supported-idps.html)。您必須確定已在 IAM Identity Center AWS 中建立使用者或群組，或從身分來源同步使用者和群組，才能將他們指派給 Redshift 中的資料。
**注意**  
您可以選擇使用 IAM Identity Center AWS 的帳戶執行個體，前提是 Redshift 和 AWS IAM Identity Center 位於同一個帳戶中。當您建立和設定 Redshift 叢集或工作群組時，可以使用小工具建立此執行個體。
+ *設定受信任的字符發行者* — 在某些情況下，您可能需要使用受信任的字符簽發者，這是一個可以發出和驗證信任字符的實體。設定 IAM Identity Center AWS 整合的 Redshift 管理員可以選取信任的權杖發行者並新增必要的屬性以完成組態之前，必須先執行初步步驟。這可能包括將外部身分提供者設定為可信任的字符發行者，並在 IAM Identity Center AWS 主控台中新增其屬性。若要完成這些步驟，請參閱[使用具有受信任權杖頒發者的應用程式](https://docs.aws.amazon.com/singlesignon/latest/userguide/using-apps-with-trusted-token-issuer.html#setuptrustedtokenissuer)。
**注意**  
並非所有外部連線都需要設定受信任的字符發行者。使用 Amazon Redshift 查詢編輯器 v2 連線到 Redshift 資料庫，並不需要受信任的字符發行者組態。但可以套用於第三方應用程式，例如透過您的身分提供者進行驗證的儀表板或自訂應用程式。
+ *設定 IAM 角色* — 必須設定後續提及權限的區段。您必須依據 IAM 最佳實務新增許可權。下列程序會詳細說明特定權限。

如需詳細資訊，請參閱 [AWS IAM Identity Center 入門](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-enable-identity-center.html)。

## 設定您的身分提供者以使用 AWS IAM Identity Center
<a name="redshift-iam-access-control-idp-connect-admin-config"></a>

控制使用者和群組身分管理的第一步是連線到 AWS IAM Identity Center，並設定您的身分提供者。您可以使用 AWS IAM Identity Center 本身做為身分提供者，也可以連線第三方身分存放區，例如 Okta。如需有關設定連線和設定身分提供者的詳細資訊，請參閱《AWS IAM Identity Center 使用者指南》**中的[連線至外部身分提供者](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source-idp.html)。在此程序結束時，請確定您已將一小部分使用者和群組新增至 AWS IAM Identity Center，以供測試之用。

### 管理許可
<a name="redshift-iam-access-control-idp-connect-admin-permissions"></a>

#### Redshift/AWS IAM Identity Center 應用程式生命週期管理所需的許可
<a name="redshift-iam-access-control-permissions-application"></a>

您必須建立 IAM 身分，讓 Redshift 管理員用來設定 Redshift 以搭配 IAM Identity Center AWS 使用。通常您會建立具有許可的 IAM 角色，並視需要將其指派給其他身分。此角色必須具有列出的許可，才能執行下列動作。

**建立 Redshift/AWS IAM Identity Center 應用程式**
+ `sso:PutApplicationAssignmentConfiguration`— 用於安全性。
+ `sso:CreateApplication` – 用來建立 AWS IAM Identity Center 應用程式。
+ `sso:PutApplicationAuthenticationMethod`— 授予 Redshift 驗證存取權。
+ `sso:PutApplicationGrant`— 用於變更受信任的字符發行者資訊。
+ `sso:PutApplicationAccessScope` – 適用於 Redshift AWS IAM Identity Center 應用程式設定。這包括適用於 [Amazon S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-get-started.html) 的 AWS Lake Formation 和 。
+ `redshift:CreateRedshiftIdcApplication` – 用來建立 Redshift AWS IAM Identity Center 應用程式。

**描述 Redshift/AWS IAM Identity Center 應用程式**
+ `sso:GetApplicationGrant`— 用於列出受信任的字符發行者資訊。
+ `sso:ListApplicationAccessScopes` - 讓 Redshift AWS IAM Identity Center 應用程式設定列出下游整合，例如針對 AWS Lake Formation 和 S3 存取授權。
+ `redshift:DescribeRedshiftIdcApplications` – 用來描述現有的 AWS IAM Identity Center 應用程式。

**變更 Redshift/AWS IAM Identity Center 應用程式**
+ `redshift:ModifyRedshiftIdcApplication`— 用於變更現有的 Redshift 應用程式。
+ `sso:UpdateApplication` – 用來更新 AWS IAM Identity Center 應用程式。
+ `sso:GetApplicationGrant` - 取得信任權杖頒發者資訊。
+ `sso:ListApplicationAccessScopes` - 用於 Redshift AWS IAM Identity Center 應用程式設定。
+ `sso:DeleteApplicationGrant` – 刪除信任權杖發行者資訊。
+ `sso:PutApplicationGrant`— 用於變更受信任的字符發行者資訊。
+ `sso:PutApplicationAccessScope` – 適用於 Redshift AWS IAM Identity Center 應用程式設定。這包括適用於 [Amazon S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-get-started.html) 的 AWS Lake Formation 和 。
+ `sso:DeleteApplicationAccessScope` - 用於刪除 Redshift AWS IAM Identity Center 應用程式設定。這包括適用於 [Amazon S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-get-started.html) 的 AWS Lake Formation 和 。

**刪除 Redshift/AWS IAM Identity Center 應用程式**
+ `sso:DeleteApplication` – 用來刪除 AWS IAM Identity Center 應用程式。
+ `redshift:DeleteRedshiftIdcApplication` – 提供刪除現有 Redshift AWS IAM Identity Center 應用程式的能力。

#### Redshift/查詢編輯器 v2 應用程式生命週期管理所需的許可
<a name="redshift-iam-access-control-permissions-application-qev2"></a>

您必須建立 IAM 身分，讓 Redshift 管理員用來設定 Redshift 以搭配 IAM Identity Center AWS 使用。通常您會建立具有許可的 IAM 角色，並視需要將其指派給其他身分。此角色必須具有列出的許可，才能執行下列動作。

**建立查詢編輯器 v2 應用程式**
+ `redshift:CreateQev2IdcApplication` - 用於建立 QEV2 應用程式。
+ `sso:CreateApplication` - 提供建立 AWS IAM Identity Center 應用程式的功能。
+ `sso:PutApplicationAuthenticationMethod`— 授予 Redshift 驗證存取權。
+ `sso:PutApplicationGrant`— 用於變更受信任的字符發行者資訊。
+ `sso:PutApplicationAccessScope` – 適用於 Redshift AWS IAM Identity Center 應用程式設定。這包括查詢編輯器第 2 版。
+ `sso:PutApplicationAssignmentConfiguration`— 用於安全性。

**說明查詢編輯器 v2 應用程式**
+ `redshift:DescribeQev2IdcApplications` – 用來描述 AWS IAM Identity Center QEV2 應用程式。

**變更查詢編輯器 v2 應用程式**
+ `redshift:ModifyQev2IdcApplication` - 用於變更 AWS IAM Identity Center QEV2 應用程式。
+ `sso:UpdateApplication` – 用於變更 AWS IAM Identity Center QEV2 應用程式。

**刪除查詢編輯器 v2 應用程式**
+ `redshift:DeleteQev2IdcApplication` - 用於刪除 QEV2 應用程式。
+ `sso:DeleteApplication` - 用於刪除 QEV2 應用程式。

**注意**  
在 Amazon Redshift SDK 中，無法使用下列 API：  
CreateQev2IdcApplication
DescribeQev2IdcApplications
ModifyQev2IdcApplication
DeleteQev2IdcApplication
這些動作專用於在 AWS 主控台中與 Redshift QEV2 AWS 執行 IAM Identity Center 整合。如需詳細資訊，請參閱 [Amazon Redshift 定義的動作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html#amazonredshift-actions-as-permissions)。

#### 資料庫管理員在主控台中連線新資源所需的許可
<a name="redshift-iam-access-control-permissions-application-new-resources"></a>

在建立過程中，需要這些權限才能連接新的佈建叢集或 Amazon Redshift Serverless 工作群組。如果您具有這些許可，主控台中就會顯示選項，供您選擇連線至適用於 Redshift 的 AWS IAM Identity Center 受管應用程式。
+ `redshift:DescribeRedshiftIdcApplications`
+ `sso:ListApplicationAccessScopes`
+ `sso:GetApplicationAccessScope`
+ `sso:GetApplicationGrant`

我們建議的最佳實務是，將許可政策附加到 IAM 角色，然後根據需要將其指派給使用者和群組。如需詳細資訊，請參閱 [Amazon Redshift 中的身分和存取管理](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)。

## 使用 IAM Identity Center 將 Redshift AWS 設定為 AWS 受管應用程式
<a name="redshift-iam-access-control-idp-connect-admin-tasks"></a>

 AWS 在 IAM Identity Center 可以管理 Amazon Redshift 佈建叢集或 Amazon Redshift Serverless 工作群組的身分之前，Redshift 管理員必須先完成讓 Redshift 成為 IAM Identity Center AWS 受管應用程式的步驟：

1. 在 Amazon Redshift 或 Amazon Redshift Serverless 主控台功能表中選取 **AWS IAM Identity Center 整合**，然後選取**連線至 AWS IAM Identity Center**。您可以從該處逐步執行一系列選擇，以填入 AWS IAM Identity Center 整合的屬性。

1. 為 Redshift AWS 的 IAM Identity Center 受管應用程式選擇顯示名稱和唯一名稱。

1. 指定組織的命名空間。這通常是組織名稱的縮寫版。它會新增為 Redshift 資料庫中 AWS IAM Identity Center 受管使用者和角色的字首。

1. 選取要使用的 IAM 角色。此 IAM 角色應與用於 Redshift 的其他角色分開，建議您不要將其用於其他用途。需要的特定政策許可如下所示：
   + `sso:DescribeApplication`— 在目錄中建立身分提供者 (IdP) 項目時需要。
   + `sso:DescribeInstance`— 用於手動建立 IdP 聯合角色或使用者。

1. 設定用戶端連線和受信任的字符發行者。藉由設定與外部身分提供者的關係，設定受信任的字符發行者有助於信任的身分傳播。身分傳播可讓使用者登入一個應用程式的同時，存取另一個應用程式中的特定資料。這可讓使用者更順暢地從不同位置收集資料。在此步驟中，您可以在主控台為每個受信任的字符發行者設定屬性。這些屬性包括名稱和受眾聲明 (或 *aud claim*)，您可能必須從工具或服務的組態屬性中取得這些聲明。您可能還需要提供第三方工具的 JSON Web 字符 (JWT)應用程序名稱。
**注意**  
根據字符類型，每個第三方工具或服務的 `aud claim` 需求可能會有所不同，字符類型可以是身分提供者發行的存取字符或另一種類型 (例如 ID 字符)。每個廠商可以有所不同。當您實作信任的身分傳播並與 Redshift 整合時，需要為第三方工具傳送給 AWS的字符類型提供正確的 *aud* 值。查看您的工具或服務廠商的建議。

   如需有關可信身分傳播的詳細資訊，請參閱《AWS IAM Identity Center 使用者指南》**中的[可信身分傳播概觀](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html)。

Redshift 管理員完成這些步驟並儲存組態後， AWS IAM Identity Center 屬性就會出現在 Redshift 主控台中。您也可以查詢系統檢視 [SVV\$1IDENTITY\$1PROVIDERS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_IDENTITY_PROVIDERS.html)，以驗證應用程式的屬性。其中包括應用程式名稱和命名空間。您可以使用命名空間做為與應用程式相關聯之 Redshift 資料庫物件的字首。完成這些任務可讓 Redshift 成為已啟用 AWS IAM Identity Center 的應用程式。主控台內的屬性包括整合狀態。當整合完成時，會顯示**已啟用**。完成此程序後，就可以在每個新叢集上啟用 AWS IAM Identity Center 整合。

在組態之後，您可以選擇使用者或群組索引標籤，然後選擇**指派**，在 Redshift AWS 中包含來自 IAM Identity Center **的使用者**和**群組**。

## 為新的 AWS Amazon Redshift 叢集或 Amazon Redshift Serverless 工作群組啟用 IAM Identity Center 整合
<a name="redshift-iam-access-control-idp-connect-resource-creation"></a>

您的資料庫管理員會設定新的 Redshift 資源，以便與 IAM Identity Center AWS 保持一致，讓登入和資料存取更容易。這是建立已佈建叢集或 Serverless 工作群組的步驟的一部分來執行。具有建立 Redshift 資源許可的任何人都可以執行這些 AWS IAM Identity Center 整合任務。當您建立佈建叢集時，您可以從 Amazon Redshift 主控台中選擇**建立叢集**開始。以下步驟說明如何為資料庫啟用 AWS IAM Identity Center 管理。(不包括建立叢集的所有步驟。)

1. 在建立叢集步驟中的 **IAM Identity Center 整合**區段中選擇**啟用 <您的叢集名稱>**。

1. 啟用整合時，處理程序依照步驟。您可以在主控台選擇**啟用 IAM Identity Center 整合**以執行此操作。

1. 對於新的叢集或工作群組，請使用 SQL 命令在 Redshift 中建立資料庫角色。以下是命令：

   ```
   CREATE ROLE <idcnamespace:rolename>;
   ```

   命名空間和角色名稱如下所示：
   + *IAM Identity Center 命名空間字首* – 這是您在設定 IAM Identity Center 和 Redshift AWS 之間的連線時定義的命名空間。
   + *角色名稱* – 此 Redshift 資料庫角色必須符合 IAM Identity Center AWS 中的群組名稱。

   Redshift 會與 AWS IAM Identity Center 連線，並擷取建立資料庫角色並將其對應至 IAM Identity Center AWS 群組所需的資訊。

請注意，建立新的資料倉儲時，針對 AWS IAM Identity Center 整合指定的 IAM 角色會自動附加到佈建叢集或 Amazon Redshift Serverless 工作群組。完成輸入所需的叢集中繼資料並建立資源後，您可以在 屬性中檢查 AWS IAM Identity Center 整合的狀態。如果您在 AWS IAM Identity Center 中的群組名稱有空格，則必須在建立相符角色時使用 SQL 中的引號。

啟用 Redshift 資料庫並建立角色之後，您就可以使用 Amazon Redshift 查詢編輯器 v2 或 Amazon Quick連線到資料庫。接下來章節中會進一步提供詳細資訊。

### 使用 API 設定預設值 `RedshiftIdcApplication`
<a name="redshift-iam-access-control-idp-connect-admin-config-api"></a>

設定作業由您的身分管理員執行。使用 API，您可以建立並填入 `RedshiftIdcApplication`，其代表 IAM Identity Center AWS 中的 Redshift 應用程式。

1. 若要開始，您可以建立使用者，並將其新增至 IAM Identity Center AWS 中的群組。您可以在 IAM Identity Center AWS 的 AWS 主控台中執行此操作。

1. 呼叫 `create-redshift-idc-application`建立 AWS IAM Identity Center 應用程式，使其與 Redshift 用量相容。您可以填入必要的值來建立應用程式。顯示名稱是指要在 AWS IAM Identity Center 儀表板上顯示的名稱。IAM 角色 ARN 是具有 AWS IAM Identity Center 許可的 ARN，也可由 Redshift 擔任。

   ```
   aws redshift create-redshift-idc-application
   ––idc-instance-arn 'arn:aws:sso:::instance/ssoins-1234a01a1b12345d'
   ––identity-namespace 'MYCO'
   ––idc-display-name 'TEST-NEW-APPLICATION'
   ––iam-role-arn 'arn:aws:redshift:us-east-1:012345678901:role/TestRedshiftRole'
   ––redshift-idc-application-name 'myredshiftidcapplication'
   ```

   下列範例顯示從呼叫 `create-redshift-idc-application` 傳回的範例 `RedshiftIdcApplication` 回應。

   ```
   "RedshiftIdcApplication": {
                   "IdcInstanceArn": "arn:aws:sso:::instance/ssoins-1234a01a1b12345d",
                   "RedshiftIdcApplicationName": "test-application-1",
                   "RedshiftIdcApplicationArn": "arn:aws:redshift:us-east-1:012345678901:redshiftidcapplication:12aaa111-3ab2-3ab1-8e90-b2d72aea588b",
                   "IdentityNamespace": "MYCO",
                   "IdcDisplayName": "Redshift-Idc-Application",
                   "IamRoleArn": "arn:aws:redshift:us-east-1:012345678901:role/TestRedshiftRole",
                   "IdcManagedApplicationArn": "arn:aws:sso::012345678901:application/ssoins-1234a01a1b12345d/apl-12345678910",
                   "IdcOnboardStatus": "arn:aws:redshift:us-east-1:123461817589:redshiftidcapplication",
                   "RedshiftIdcApplicationArn": "Completed",
                   "AuthorizedTokenIssuerList": [
                          "TrustedTokenIssuerArn": ...,
                          "AuthorizedAudiencesList": [...]...
                   ]}
   ```

1. 您可以使用 `create-application-assignment` 將特定群組或個別使用者指派給 IAM Identity Center AWS 中的受管應用程式。透過這樣做，您可以指定要透過 IAM Identity Center AWS 管理的群組。如果資料庫管理員在 Redshift 中建立資料庫角色，IAM Identity Center AWS 中的群組名稱會對應至 Redshift 中的角色名稱。那些角色可以控制資料庫中的權限。如需詳細資訊，請參閱 [IAM Identity Center AWS 主控台中的指派使用者存取應用程式](https://docs.aws.amazon.com/singlesignon/latest/userguide/assignuserstoapp.html)。

1. 啟用應用程式後，從 IAM Identity Center 呼叫`create-cluster`並包含 Redshift AWS 受管應用程式 ARN。這樣做會將叢集與 IAM Identity Center AWS 中的受管應用程式建立關聯。

### 將 AWS IAM Identity Center 應用程式與現有叢集或工作群組建立關聯
<a name="redshift-iam-access-control-idp-connect-admin-config-existing"></a>

如果您要為現有的叢集或工作群組啟用 AWS IAM Identity Center 整合，可藉由執行 SQL 命令來進行此操作。您也可以執行 SQL 命令來變更整合的設定。如需詳細資訊，請參閱 [ALTER IDENTITY PROVIDER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_IDENTITY_PROVIDER.html)。

您也可以捨棄現有的身分提供者。以下範例顯示 CASCADE 如何刪除附加至身分提供者的使用者和角色。

```
DROP IDENTITY PROVIDER
<provider_name> [ CASCADE ]
```

## 設定使用者權限
<a name="redshift-iam-access-control-idp-connect-user-permissions"></a>

管理員會根據使用者的身分屬性和群組成員資格，在其身分提供者內或 IAM Identity Center AWS 中直接設定各種資源的許可。例如，身分提供者管理員可以將資料庫工程師新增至適合其角色的群組。此群組名稱會對應至 Redshift 資料庫角色名稱。此角色可提供或限制 Redshift 中特定資料表或視觀表的存取權。

# 自動建立 的 Amazon Redshift 角色 AWS IAM Identity Center
<a name="redshift-iam-access-control-sso-autocreate"></a>

此功能是與 的整合 AWS IAM Identity Center ，可讓您根據群組成員資格在 Redshift 中自動建立角色。

自動建立角色有幾個優點。當您自動建立角色時，Redshift 建立的角色會具有 IdP 中的群組成員資格，如此就能避免繁瑣的手動角色建立和維護工作。您也可以選擇使用包含和排除模式，以篩選哪些群組要對應至 Redshift 角色。

## 運作方式
<a name="autocreate-overview"></a>

當您以 IdP 使用者身分登入 Redshift 時，下列事件會按順序發生：

1. Redshift 從 IdP 擷取您的群組成員資格。

1. Redshift 自動建立對應到這些群組的角色，且角色的格式為 `idp_namespace:rolename`。

1. Redshift 對您授予對應角色的許可。

每次使用者登入時，都會自動建立使用者所屬但不存在目錄內的每個群組。您可以選擇性地設定包含和排除篩選條件，以控制哪些 IdP 群組要建立 Redshift 角色。

## 設定自動建立角色
<a name="autocreate-configuring"></a>

使用 `CREATE IDENTITY PROVIDER` 和 `ALTER IDENTITY PROVIDER` 命令來啟用並設定自動角色建立。

```
-- Create a new IdP with auto role creation enabled
CREATE IDENTITY PROVIDER <idp_name> TYPE AWSIDC
  NAMESPACE '<namespace>' 
  APPLICATION_ARN 'app_arn'
  IAM_ROLE 'role_arn'
  AUTO_CREATE_ROLES TRUE; 

-- Enable on existing IdP 
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES TRUE;

-- Disable  
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES FALSE;
```

## 篩選群組
<a name="autocreate-filtering"></a>

您可以選擇使用 `INCLUDE` 和 `EXCLUDE` 模式，篩選哪些 IdP 群組要對應至 Redshift 角色。當模式發生衝突時，`EXCLUDE` 優先於 `INCLUDE`。

```
-- Only create roles for groups with 'dev' 
CREATE IDENTITY PROVIDER <idp_name> TYPE AWSIDC
  ...
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%';
    
-- Exclude 'test' groups
ALTER IDENTITY PROVIDER <idp_name>  
  AUTO_CREATE_ROLES TRUE
  EXCLUDE GROUPS LIKE '%test%';
```

## 範例
<a name="autocreate-filtering"></a>

下列範例示範如何在不進行篩選的情況下開啟自動建立角色。

```
CREATE IDENTITY PROVIDER prod_idc TYPE AWSIDC  ...
  AUTO_CREATE_ROLES TRUE;
```

下列範例包含開發群組並排除測試群組。

```
ALTER IDENTITY PROVIDER prod_idc
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%'
  EXCLUDE GROUPS LIKE '%test%';
```

## 最佳實務
<a name="autocreate-bp"></a>

當您啟用角色的自動建立功能時，請考慮下列最佳實務：
+ 使用 `INCLUDE` 和 `EXCLUDE` 篩選條件來控制哪些群組會取得角色。
+ 定期稽核角色並清除未使用的角色。
+ 利用 Redshift 角色階層來簡化許可管理。

# Amazon Redshift 與 Amazon S3 存取授權整合
<a name="redshift-iam-access-control-sso-s3idc"></a>

使用與 Amazon S3 存取授權的整合，即可順利地傳播您的 IAM Identity Center 身分，以控制對 Amazon S3 資料的存取權。此整合可讓您根據 IAM Identity Center 使用者和群組授權 Amazon S3 資料存取。

如需有關 Amazon S3 存取授權的詳細資訊，請參閱[使用 S3 存取授權管理存取權](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html)。

使用 Amazon S3 存取授權可為您的應用程式帶來以下優點：
+ 根據 IAM Identity Center 身分精細控制 Amazon S3 資料的存取權。
+ 在 Amazon Redshift 和 Amazon S3 之間集中管理 IAM Identity Center 身分。
+ 您可以避免針對 Amazon S3 存取管理個別 IAM 許可。

## 運作方式
<a name="redshift-iam-access-control-sso-s3idc-howitworks"></a>

若要將您的應用程式與 Amazon S3 存取授權整合，請執行下列操作：
+ 首先，您將 Amazon Redshift 設定為使用 AWS 管理主控台 或 與 Amazon S3 Access Grants 整合 AWS CLI。
+ 接著，具有 IdC 管理員權限的使用者會使用 Amazon S3 存取授權服務，對特定 IdC 使用者/群組授予 Amazon S3 儲存貯體或字首存取權。如需詳細資訊，請參閱[在 S3 存取授權中使用授權](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-grant.html)。
+ 當通過 Redshift 身分驗證的 IdC 使用者執行存取 S3 的查詢時 (例如 COPY、UNLOAD 或 Spectrum 操作)，Amazon Redshift 會從 Amazon S3 存取授權服務擷取範圍限定於該 IdC 身分的臨時 S3 存取憑證。
+ 然後 Amazon Redshift 會使用擷取的臨時憑證來存取該查詢的授權 Amazon S3 位置。

## 設定與 Amazon S3 存取授權的整合
<a name="redshift-iam-access-control-sso-s3idc-setup"></a>

若要設定 Amazon Redshift 與 Amazon S3 存取授權的整合，請執行下列操作：

**Topics**
+ [使用 設定與 Amazon S3 Access Grants 的整合 AWS 管理主控台](#redshift-iam-access-control-sso-s3idc-setup-console)
+ [使用 啟用與 Amazon S3 Access Grants 的整合 AWS CLI](#redshift-iam-access-control-sso-s3idc-setup-cli)

### 使用 設定與 Amazon S3 Access Grants 的整合 AWS 管理主控台
<a name="redshift-iam-access-control-sso-s3idc-setup-console"></a>

1. 開啟 Amazon Redshift 主控台。

1. 從**叢集**窗格中選擇您的叢集。

1. 在叢集詳細資訊頁面的**身分提供者整合**區段中，啟用與 **S3 存取授權**服務的整合。
**注意**  
如果您未設定 IAM Identity Center，則不會顯示**身分提供者整合**區段。如需詳細資訊，請參閱[啟用 AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-set-up-for-idc.html)。

### 使用 啟用與 Amazon S3 Access Grants 的整合 AWS CLI
<a name="redshift-iam-access-control-sso-s3idc-setup-cli"></a>

1. 若要建立新的 Amazon Redshift IdC 應用程式同時啟用 S3 整合，請執行下列操作：

   ```
   aws redshift create-redshift-idc-application <other parameters> 
     --service-integrations '[ {"S3AccessGrants": [{"ReadWriteAccess": {"Authorization": "Enabled"}}]} ]'
   ```

1. 若要修改現有的應用程式以啟用 S3 存取授權整合，請執行下列操作：

   ```
   aws redshift modify-redshift-idc-application <other parameters>
     --service-integrations '[ {"S3AccessGrants": [{"ReadWriteAccess": {"Authorization": "Enabled"}}]} ]'
   ```

1. 若要修改現有的應用程式以停用 S3 存取授權整合，請執行下列操作：

   ```
   aws redshift modify-redshift-idc-application <other parameters>
     --service-integrations '[ {"S3AccessGrants": [{"ReadWriteAccess": {"Authorization": "Disabled"}}]} ]'
   ```

## 使用 S3 存取授權整合
<a name="redshift-iam-access-control-sso-s3idc-using"></a>

設定 S3 存取授權整合之後，存取 S3 資料的查詢 (例如 `COPY`、`UNLOAD` 或 Spectrum 查詢) 會使用 IdC 身分進行授權。未使用 IdC 驗證身分的使用者也可以執行這些查詢，但這些使用者帳戶不會利用 IdC 提供的集中式管理。

下列範例示範使用 S3 存取授權整合執行的查詢：

```
COPY table FROM 's3://mybucket/data';  // -- Redshift uses IdC identity 
UNLOAD ('SELECT * FROM table') TO 's3://mybucket/unloaded/'    // -- Redshift uses IdC identity
```

# 透過 查詢資料 AWS Lake Formation
<a name="redshift-iam-access-control-idp-analytics-connecting-steps"></a>

使用 AWS Lake Formation 可讓您更輕鬆地集中管理和保護資料湖，並提供資料存取。透過 IAM Identity Center AWS 將身分傳播設定為 Lake Formation，而 Redshift 讓管理員可以根據組織的身分提供者 (IdP) 群組，允許精細存取 Amazon S3 資料湖。這些群組是透過 AWS IAM Identity Center 進行管理。本節說明如何設定幾個使用案例、從資料湖進行查詢，以及從資料共用進行查詢，以示範如何使用 AWS IAM Identity Center 搭配 Redshift 連線至 Lake Formation 管理的資源。

## 使用 AWS IAM Identity Center 和 Redshift 連線查詢資料湖
<a name="redshift-iam-access-control-idp-analytics-connecting-datalake"></a>

這些步驟涵蓋的使用案例，您使用連接至 Redshift AWS 的 IAM Identity Center 來查詢受 Lake Formation 管理的資料湖。

**先決條件**

此程序有幾個先決條件步驟：

1. AWS 必須設定 IAM Identity Center 以支援 Redshift 的身分驗證和身分管理。您可以從主控台啟用 AWS IAM Identity Center，然後選取身分提供者 (IdP) 來源。之後，請將一組 IdP 使用者與 IAM Identity Center AWS 同步。您也必須遵循本文件先前詳述的步驟，在 AWS IAM Identity Center 和 Redshift 之間設定連線。

1. 在組態步驟中建立新的 Amazon Redshift 叢集，並透過 IAM Identity Center AWS 啟用身分管理。

1. 為 Lake Formation 建立受管 AWS IAM Identity Center 應用程式並進行設定。接下來設定 IAM Identity Center AWS 和 Redshift 之間的連線。步驟如下：

   1. 在 中 AWS CLI，使用 `modify-redshift-idc-application`命令來啟用 Lake Formation 服務與 Redshift 的 AWS IAM Identity Center 受管應用程式整合。此呼叫包含 `service-integrations` 參數，該參數設定為啟用 Lake Formation 授權的組態字串值。

   1. 使用 `create-lake-formation-identity-center-configuration` 命令設定 Lake Formation。這會為 Lake Formation AWS 建立 IAM Identity Center 應用程式，該應用程式會顯示在 AWS IAM Identity Center 入口網站中。管理員必須設定 `––cli-input-json` 引數，其值是所有 CLI API AWS 呼叫使用標準格式的 JSON 檔案路徑。您可以包含下列各值：
      + `CatalogId`— Lake Formation 目錄 ID。
      + `InstanceArn` – AWS IAM Identity Center 執行個體 ARN 值。

管理員完成必要條件組態之後，資料庫管理員可以建立外部結構描述以查詢資料湖。

1. **管理員建立外部結構描述** — Redshift 資料庫管理員使用下列 SQL 陳述式連線到資料庫，並建立外部結構描述：

   ```
   CREATE EXTERNAL SCHEMA if not exists my_external_schema from DATA CATALOG database 'my_lf_integrated_db' catalog_id '12345678901234';
   ```

   請注意，在此情況下不需要指定 IAM 角色，因為存取是透過 IAM Identity Center AWS 管理。

1. **管理員授予許可** – 管理員授予 IAM Identity Center AWS 群組的使用量，該群組授予 Redshift 資源的許可。這是透過執行 SQL 陳述式來完成，如下所示：

   ```
   GRANT USAGE ON SCHEMA "my_external_schema" to "MYCO:sales";
   ```

   然後，管理員會根據組織的需求，使用 CLI 授予物件的 Lake Formation AWS 許可：

   ```
   aws lakeformation grant-permissions ...
   ```

1. **使用者執行查詢** - 此時，屬於銷售群組 (僅為示意) 的 AWS IAM Identity Center 使用者可以透過查詢編輯器 v2 登入 Redshift 資料庫。然後，他們可以執行存取外部結構描述中資料表的查詢，如以下範例所示：

   ```
   SELECT * from my_external_schema.table1;
   ```

## 使用 AWS IAM Identity Center 和 Redshift 連線連線到資料共用
<a name="redshift-iam-access-control-idp-analytics-connecting-datashare"></a>

 透過 IAM Identity Center 管理存取時，您可以從不同的 Redshift AWS 資料倉儲存取資料共用。若要這麼做，您可以執行查詢來設定外部資料庫。在完成這些步驟之前，假設您已在 Redshift 和 IAM Identity Center AWS 之間設定連線，而且已建立 AWS Lake Formation 應用程式，如先前程序中詳述。

1. **建立外部資料庫** — 管理員建立外部資料庫以進行資料共用，並透過其 ARN 參考該資料庫。以下是展示如何執行此操作的範例：

   ```
   CREATE DATABASE "redshift_external_db" FROM ARN 'arn:aws:glue:us-east-1:123456789012:database/redshift_external_db-iad' WITH NO DATA CATALOG SCHEMA;
   ```

   在此使用案例中，如果您使用 AWS IAM Identity Center 搭配 Redshift 進行身分管理，則不包含 IAM 角色。

1. **管理員設定許可 – **建立資料庫後，管理員會將用量授予 IAM Identity Center AWS 群組。這會授予 Redshift 資源的權限：

   ```
   GRANT USAGE ON DATABASE "my_external_db" to "MYCO:sales";
   ```

   系統管理員還會使用 AWS CLI 授予物件的 Lake Formation 權限：

   ```
   aws lakeformation grant-permissions ...
   ```

1. **使用者執行查詢** — 來自銷售群的使用者可以根據指派的權限，查詢資料庫中的資料表：

   ```
   select * from redshift_external_db.public.employees;
   ```

如需有關授予資料湖權限以及授予資料共用權限的詳細資訊，請參閱[將權限授予使用者和群組](https://docs.aws.amazon.com/lake-formation/latest/dg/grant-permissions-sso.html)。如需將使用權授予結構描述或資料庫的詳細資訊，請參閱 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)。

# 使用信任的字符發行者將您的應用程式或工具與 OAuth 整合
<a name="redshift-iam-access-control-idp-connect-oauth"></a>

 您可以將功能新增至您建立的用戶端工具，以透過 IAM Identity Center AWS 連線連線至 Redshift。如果您已設定 Redshift 與 AWS IAM Identity Center 整合，請使用本節中詳述的屬性來設定連線。

## 使用 IAM Identity Center 連線至 Redshift AWS 的身分驗證外掛程式
<a name="redshift-iam-access-control-idp-connect-plugin"></a>

您可以使用下列驅動程式外掛程式，使用 AWS IAM Identity Center 連線至 Amazon Redshift：
+  `BrowserIdcAuthPlugin` – 此外掛程式有助於與 IAM Identity Center AWS 進行無縫single-sign-on整合。它會建立瀏覽器視窗，讓使用者使用其公司身分提供者中定義的使用者憑證登入。
+  `IdpTokenAuthPlugin` – 想要自行管理身分驗證流程的應用程式應該使用此外掛程式，而不是讓 Amazon Redshift 驅動程式開啟瀏覽器視窗以進行 AWS IAM Identity Center 身分驗證。它接受來自與 AWS IAM Identity Center 連線之任何 Web 身分提供者的 IAM Identity Center 付費存取字符或 OpenID Connect (OIDC) JSON Web 字符 AWS (JWT)，例如 Okta、PingOne 和 Microsoft Entra ID (Azure AD)。用戶端應用程式負責產生此必要的存取權杖/JWT。

### 使用 `BrowserIdcAuthPlugin` 進行身分驗證
<a name="redshift-iam-access-control-idp-connect-plugin-browseridcauthplugin"></a>

根據您的 Amazon Redshift 驅動器，使用以下外掛程式名稱來使用 `BrowserIdcAuthPlugin` 進行連線。


| 驅動程式 | 連線選項關鍵字 | Value | 備註 | 
| --- | --- | --- | --- | 
| JDBC | `plugin_name` | com.amazon.redshift.plugin.BrowserIdcAuthPlugin | 連線時，您必須輸入外掛程式的完整類別名稱。 | 
| ODBC | `plugin_name` | BrowserIdcAuthPlugin |  | 
| Python | `credentials_provider` | BrowserIdcAuthPlugin | Python 驅動器沒有可用的 `plugin_name` 選項。請改用 `credentials_provider`。 | 

`BrowserIdcAuthPlugin` 外掛程式有以下其他連線選項：


| 選項名稱 | 是否為必要？ | Description | 範例 | 
| --- | --- | --- | --- | 
| idc\$1region | 必要 | IAM Identity Center AWS 區域 AWS 執行個體所在的 。 | us-east-1 | 
| issuer\$1url | 必要 |  AWS IAM Identity Center 伺服器的執行個體端點。您可以使用 IAM Identity Center AWS 主控台找到此值。 | https://identitycenter.amazonaws.com/ssoins-g5j2k70sn4yc5nsc | 
| listen\$1port | 選用 | Amazon Redshift 驅動程式用來透過瀏覽器重新導向從 AWS IAM Identity Center 接收`auth_code`回應的連接埠。 | 7890 | 
| idc\$1client\$1display\$1name | 選用 | 在 AWS IAM Identity Center 的單一登入同意快顯視窗中， AWS IAM Identity Center 用戶端用於應用程式的名稱。 | Amazon Redshift 驅動器 | 
| idp\$1response\$1timeout | 選用 | Redshift 驅動器等待身分驗證流程完成的時間長度，以秒為單位。 | 60 | 

您必須在您建立並用來連線之工具的連線屬性中輸入這些值。如需詳細資訊，請參閱各驅動器的連線選項文件：
+ [JDBC 驅動器 2.x 版組態的選項](jdbc20-configuration-options.md)
+ [ODBC 驅動器選項](odbc20-configuration-options.md)
+ [Amazon Redshift Python 連接器的組態選項](python-configuration-options.md)

### 使用 `IdpTokenAuthPlugin` 進行身分驗證
<a name="redshift-iam-access-control-idp-connect-plugin-idptokenauthplugin"></a>

根據您的 Amazon Redshift 驅動器，使用以下外掛程式名稱來使用 `IdpTokenAuthPlugin` 進行連線。


| 驅動程式 | 連線選項關鍵字 | Value | 備註 | 
| --- | --- | --- | --- | 
| JDBC | `plugin_name` | com.amazon.redshift.plugin.IdpTokenAuthPlugin | 連線時，您必須輸入外掛程式的完整類別名稱。 | 
| ODBC | `plugin_name` | IdpTokenAuthPlugin |  | 
| Python | `credentials_provider` | IdpTokenAuthPlugin | Python 驅動器沒有可用的 `plugin_name` 選項。請改用 `credentials_provider`。 | 

`IdpTokenAuthPlugin` 外掛程式有以下其他連線選項：


| 選項名稱 | 是否為必要？ | Description | 
| --- | --- | --- | 
| token | 必要 | IAM Identity Center AWS 提供存取字符或 OpenID Connect (OIDC) JSON Web Token (JWT)，由與 AWS IAM Identity Center 連線的 Web 身分提供者提供。您的應用程式必須使用 IAM Identity Center AWS 或與 IAM Identity Center 連線 AWS 的身分提供者來驗證應用程式使用者，以產生此字符。 | 
| token\$1type | 必要 | 用於 `IdpTokenAuthPlugin` 的權杖類型。可能的值如下： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/redshift-iam-access-control-idp-connect-oauth.html)  | 

您必須在您建立並用來連線之工具的連線屬性中輸入這些值。如需詳細資訊，請參閱各驅動器的連線選項文件：
+ [JDBC 驅動器 2.x 版組態的選項](jdbc20-configuration-options.md)
+ [ODBC 驅動器選項](odbc20-configuration-options.md)
+ [Amazon Redshift Python 連接器的組態選項](python-configuration-options.md)

# 對 Amazon Redshift 查詢編輯器 v2 的連線進行故障診斷
<a name="redshift-iam-access-control-idp-connect-troubleshooting"></a>

此清單會詳細說明經常發生的錯誤，並可協助您使用 IAM Identity Center 身分，使用查詢編輯器 v2 AWS 連線至 Redshift 資料庫。
+ 錯誤：**Connection Issue: No Identity center session information available.** (連線問題：沒有可用的 Identity Center 工作階段資訊。) - 當此錯誤發生時，請檢查您瀏覽器的安全和隱私權設定。這些瀏覽器設定，特別是針對安全 Cookie 的設定 (例如 Firefox 的 Total Cookie Protection 功能)，可能會導致 Amazon Redshift 查詢編輯器 v2 對 Redshift 資料庫的連線嘗試遭到封鎖。請依照您瀏覽器的詳細修復步驟進行：
  + **Firefox** - 目前預設為封鎖第三方 Cookie。按一下瀏覽器網址列中的盾牌圖示，並將切換開關切換至關閉，以關閉查詢編輯器 v2 的增強型追蹤保護。
  + **Chrome incognito 模式** - 根據預設，Chrome Incognito 模式會封鎖第三方 Cookie。按一下網址列中的眼睛圖示，允許查詢編輯器 v2 使用第三方 Cookie。您變更設定以允許 Cookie 之後，網址列上可能不會顯示眼睛圖示。
  + **Safari** - 在 Mac 上，開啟 Safari app。選擇**設定**，然後選擇**進階**。切換至關閉：**封鎖所有 Cookie**。
  + **Edge** - 選擇**設定**，然後選擇 **Cookie 和網站許可**。然後選取**管理和刪除 Cookie 和網站資料**，然後關閉**封鎖第三方 Cookie**。

  如果您在變更設定後嘗試連線，並繼續收到錯誤訊息**連線問題：沒有可用的 Identity Center 工作階段資訊**，建議您重新整理與 IAM Identity Center AWS 的連線。若要這樣做，請在 Redshift 資料庫執行個體上按一下滑鼠右鍵，然後選擇**重新整理**。新視窗隨即出現，您可以用來進行身分驗證。
+ 錯誤：**Connection issue: Identity center session expired or invalid.** (連線問題：Identity Center 工作階段已過期或無效。) – 將 Redshift 佈建叢集或 Serverless AWS 工作群組與 IAM Identity Center 整合之後，當使用者嘗試從查詢編輯器 v2 連線至 Redshift 資料庫時，可能會收到此錯誤。成功連線後也可能發生此錯誤。在這種情況下，我們建議您重新驗證身分。若要這樣做，請在 Redshift 資料庫執行個體上按一下滑鼠右鍵，然後選擇**重新整理**。新視窗隨即出現，您可以用來進行身分驗證。
+ 錯誤：**Invalid scope. (無效的範圍。) User credentials are not authorized to connect to Redshift.** (使用者憑證未經授權無法連線至 Redshift。) – 將 Redshift 佈建叢集或 Serverless 工作群組與 IAM Identity Center AWS 整合以進行身分管理後，當使用者嘗試從查詢編輯器 v2 連線至 Redshift 資料庫時，可能會收到此錯誤。在此情況下，管理員必須透過 Redshift AWS 主控台將使用者指派給 Redshift AWS IAM Identity Center 應用程式，才能透過 IAM Identity Center 成功連接和驗證使用者，以存取正確的資源。此操作會在 **IAM Identity Center 連線**下完成。之後，使用者可以在一小時後建立成功連線，這是 AWS IAM Identity Center 工作階段快取的限制。
+ 錯誤：**Databases couldn't be listed. (無法列出資料庫。) FATAL: Failed query when cluster is auto paused.** (嚴重：叢集自動暫停時查詢失敗。) – 當 Amazon Redshift Serverless 資料庫處於閒置狀態，而不是處理任何工作負載時，當您使用 IAM Identity Center AWS 身分連線時，它可以保持暫停。若要修正此問題，請使用另一種身分驗證方法登入，以繼續執行無伺服器工作群組。然後使用 IAM Identity Center AWS 身分連線到資料庫。
+ 錯誤：**An error occurred during the attempt to federate with AWS IAM Identity Center. (嘗試與 AWS IAM Identity Center 聯合時發生錯誤。) Amazon Redshift 管理員必須使用 Redshift AWS 主控台刪除並重新建立 IAM Identity Center QEV2 應用程式。**– 刪除與查詢編輯器 v2 相關聯的 AWS IAM Identity Center 應用程式執行個體時，通常會發生此錯誤。若要修正此問題，Amazon Redshift 管理員必須刪除並重新建立 IAM Identity Center 的 Redshift AWS 和查詢編輯器 v2 應用程式。此操作可以在 Redshift 主控台上或使用 [https://docs.aws.amazon.com/cli/latest/reference/redshift/delete-redshift-idc-application.html](https://docs.aws.amazon.com/cli/latest/reference/redshift/delete-redshift-idc-application.html) CLI 命令執行。

# 使用 Amazon Redshift 的服務連結角色
<a name="using-service-linked-roles"></a>

Amazon Redshift 使用 AWS Identity and Access Management (IAM)[ 服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服務連結角色是直接連結至 Amazon Redshift 的一種特殊 IAM 角色類型。服務連結角色是由 Amazon Redshift 預先定義，並包含服務代表 Amazon Redshift 叢集呼叫 AWS 服務所需的所有許可。

服務連結角色可讓設定 Amazon Redshift 變得更為簡單，因為您不必手動新增必要的許可。角色已連結到 Amazon Redshift 使用案例並且具備預先定義的許可。只有 Amazon Redshift 可以擔任此角色，且只有服務連結角色可以使用預先定義的許可政策。Amazon Redshift 會在您第一次建立叢集或 Redshift 受管 VPC 端點時，在您的帳戶中建立服務連結角色。只有在您刪除帳戶中的所有 Amazon Redshift 叢集或 Redshift 受管 VPC 端點之後，才可以刪除服務連結角色。因為您不會不小心移除存取資源所需的許可，這可保護您的 Amazon Redshift 資源。

Amazon Redshift 在所有提供服務的區域中支援使用服務連結的角色。如需詳細資訊，請參閱 [AWS 區域與端點](https://docs.aws.amazon.com/general/latest/gr/rande.html?id=docs_gateway#redshift_region)。

如需關於支援服務連結角色的其他服務資訊，請參閱[《可搭配 IAM 運作的AWS 服務》](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)，尋找 **Service-Linked Role** (服務連結角色) 欄中顯示為 **Yes** (是) 的服務。選擇具有連結的**是**，以檢視該服務的服務連結角色文件。

## Amazon Redshift 的服務連結角色許可
<a name="service-linked-role-permissions"></a>

Amazon Redshift 使用名為 **AWSServiceRoleForRedshift** 的服務連結角色 – 允許 Amazon Redshift 代表您呼叫 AWS 服務。此服務連結角色連接至下列受管政策：`AmazonRedshiftServiceLinkedRolePolicy`。如需此政策的更新，請參閱 [Amazon Redshift 的AWS受管 (預先定義) 政策](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html#redshift-policy-resources.managed-policies)。

AWSServiceRoleForRedshift 服務連結角色只會信任由 **redshift.amazonaws.com** 擔任該角色。

AWSServiceRoleForRedshift 服務連結角色許可政策會允許 Amazon Redshift 在所有相關資源上完成下列動作：
+ `ec2:DescribeVpcs `
+ `ec2:DescribeSubnets `
+ `ec2:DescribeNetworkInterfaces `
+ `ec2:DescribeAddress `
+ `ec2:AssociateAddress `
+ `ec2:DisassociateAddress `
+ `ec2:CreateNetworkInterface `
+ `ec2:DeleteNetworkInterface `
+ `ec2:ModifyNetworkInterfaceAttribute`
+ `ec2:CreateVpcEndpoint`
+ `ec2:DeleteVpcEndpoints`
+ `ec2:DescribeVpcEndpoints`
+ `ec2:ModifyVpcEndpoint`
+ `ec2:DescribeVpcAttribute`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeInternetGateways`
+ `ec2:DescribeSecurityGroupRules`
+ `ec2:DescribeAvailabilityZones`
+ `ec2:DescribeNetworkAcls`
+ `ec2:DescribeRouteTables`
+ `ec2:AssignIpv6Addresses`
+ `ec2:UnassignIpv6Addresses`

**網路資源的許可**

下列許可允許在 Amazon EC2 上執行動作，以建立和管理安全群組規則。這些安全群組和規則特別與 Amazon Redshift `aws:RequestTag/Redshift` 資源標籤相關聯。這會將許可的適用範圍限制在特定的 Amazon Redshift 資源。
+ `ec2:CreateSecurityGroup`
+ `ec2:AuthorizeSecurityGroupEgress`
+ `ec2:AuthorizeSecurityGroupIngress`
+ `ec2:RevokeSecurityGroupEgress`
+ `ec2:RevokeSecurityGroupIngress`
+ `ec2:ModifySecurityGroupRules`
+ `ec2:DeleteSecurityGroup`

**服務配額的許可**

下列許可允許呼叫者取得服務配額。

`servicequotas:GetServiceQuota`

下列 JSON 片段顯示服務配額的動作和資源範圍。

```
{
   "Sid": "ServiceQuotasToCheckCustomerLimits",
   "Effect": "Allow",
   "Action": [
      "servicequotas:GetServiceQuota"
   ],
   "Resource": [
      "arn:aws:servicequotas:*:*:ec2/L-0263D0A3",
      "arn:aws:servicequotas:*:*:vpc/L-29B6F2EB" 
   ]
}
```

配額代碼如下：
+ *L-0263D0A3* - EC2-VPC 彈性 IP 的配額代碼。
+ *L-29B6F2EB* - 每個 VPC 的介面 VPC 端點的配額代碼。

如需更多相關資訊，請參閱 [AWS Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。

**稽核記錄的動作**

列出 `logs` 字首的動作與稽核記錄和相關功能有關。具體而言是日誌群組和日誌串流的建立與管理。
+ `logs:CreateLogGroup`
+ `logs:PutRetentionPolicy`
+ `logs:CreateLogStream`
+ `logs:PutLogEvents`
+ `logs:DescribeLogStreams`
+ `logs:GetLogEvents`

下列 JSON 會向 Amazon Redshift 顯示動作和資源範圍，以進行稽核記錄。

```
[
    {
        "Sid": "EnableCreationAndManagementOfRedshiftCloudwatchLogGroups",
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogGroup",
            "logs:PutRetentionPolicy"
        ],
        "Resource": [
            "arn:aws:logs:*:*:log-group:/aws/redshift/*"
        ]
    },
    {
        "Sid": "EnableCreationAndManagementOfRedshiftCloudwatchLogStreams",
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogStream",
            "logs:PutLogEvents",
            "logs:DescribeLogStreams",
            "logs:GetLogEvents"
        ],
        "Resource": [
            "arn:aws:logs:*:*:log-group:/aws/redshift/*:log-stream:*"
        ]
    }
]
```

如需服務連結角色及其用途的詳細資訊 AWS，請參閱[使用服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)。如需 Amazon Redshift 的特定動作和其他 IAM 資源的相關資訊，請參閱 [Amazon Redshift 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html)。

**使用 管理管理員登入資料的動作 AWS Secrets Manager**

列出 `secretsmanager` 字首的動作與使用 Amazon Redshift 來管理管理員憑證有關。這些動作可讓 Amazon Redshift 使用 AWS Secrets Manager 來建立和管理管理員登入資料秘密。

下列 JSON 向 Amazon Redshift 顯示用於管理管理員憑證的動作和資源範圍 AWS Secrets Manager。

```
[
    {
        "Effect": "Allow",
        "Action": [
            "secretsmanager:DescribeSecret",
            "secretsmanager:DeleteSecret",
            "secretsmanager:PutSecretValue",
            "secretsmanager:UpdateSecret",
            "secretsmanager:UpdateSecretVersionStage",
            "secretsmanager:RotateSecret"
        ],
        "Resource": [
            "arn:aws:secretsmanager:*:*:secret:redshift!*"
        ],
        "Condition": {
            "StringEquals": {
                "secretsmanager:ResourceTag/aws:secretsmanager:owningService": "redshift"
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": [
            "secretsmanager:GetRandomPassword"
        ],
        "Resource": "*"
    }
]
```

**將叢集和無伺服器命名空間註冊到 的動作 AWS Glue Data Catalog**

字`glue`首 列出的動作與存取 中的目錄有關，該目錄 AWS Glue Data Catalog 來自註冊佈建的叢集或無伺服器命名空間。如需詳細資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的 [Amazon Redshift 的 Apache Iceberg 相容性](https://docs.aws.amazon.com/redshift/latest/dg/iceberg-integration_overview.html)。

下列 JSON 會向 Amazon Redshift 顯示用於存取 AWS Glue Data Catalog中目錄的動作和資源範圍：

```
[
    {
        "Sid": "DiscoverRedshiftCatalogs",
        "Effect": "Allow",
        "Action": [
            "glue:GetCatalogs",
            "glue:GetCatalog"
        ],
        "Resource": [
            "arn:aws:glue:*:*:catalog",
            "arn:aws:glue:*:*:catalog/*"
        ], 
   "Condition": 
    { 
        "Bool": 
        { 
            "glue:EnabledForRedshiftAutoDiscovery": "true"
        },
        "StringEquals": {
             "aws:ResourceAccount": "${aws:PrincipalAccount}"
        }
    } 
 }, 
 {
    "Sid": "LakeFormationGetMetadataAccessForFederatedCatalogs",
    "Effect": "Allow", 
    "Action": [ 
        "lakeformation:GetDataAccess"
    ], 
    "Resource": [ "*" ], 
    "Condition": 
    { 
        "Bool": 
        {
            "lakeformation:EnabledOnlyForMetaDataAccess":"true"
        },
        "StringEquals": {
             "aws:ResourceAccount": "${aws:PrincipalAccount}"
        },
        "ForAnyValue:StringEquals": 
        { 
            "aws:CalledVia": "glue.amazonaws.com"
        } 
    }
 }
    }
]
```

`glue:GetCatalog` 和 `glue:GetCatalogs` 許可具有條件 `glue:EnabledForRedshiftAutoDiscovery:true`，這表示 Amazon Redshift 會授予 IAM 存取權以自動探索目錄。若要選擇退出，請新增 AWS Glue 帳戶層級資源政策，以選擇性地拒絕服務連結角色存取目錄。由於服務連結角色在政策中已有明確的允許動作，因此選擇退出政策需要明確拒絕該動作。請參考下列範例，範例中的其他政策拒絕 Amazon Redshift 的自動探索：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement" : {
            "Effect": "Deny",
            "Action": [
                "glue:GetCatalog",
                "glue:GetCatalogs"
            ],
            "Principal" : {
            "AWS" : "arn:aws:iam::111122223333:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift"
            },
            "Resource": [
                "arn:aws:glue:*:*:catalog/<s3_table_catalog_name>",
                "arn:aws:glue:*:*:catalog/<s3_table_catalog_name>/*"
            ]
        }
}
```

------

**允許 IAM 實體建立 AWSServiceRoleForRedshift 服務連結角色**

```
{
    "Effect": "Allow",
    "Action": [
        "iam:CreateServiceLinkedRole"      
    ],
    "Resource": "arn:aws:iam::<AWS-account-ID>:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift",
    "Condition": {"StringLike": {"iam:AWSServiceName": "redshift.amazonaws.com"}}
}
```

**允許 IAM 實體刪除 AWSServiceRoleForRedshift 服務連結角色**

將以下政策陳述式新增到該 IAM 實體的許可中：

```
{
    "Effect": "Allow",
    "Action": [
        "iam:DeleteServiceLinkedRole",
        "iam:GetServiceLinkedRoleDeletionStatus"
    ],
    "Resource": "arn:aws:iam::<AWS-account-ID>:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift",
    "Condition": {"StringLike": {"iam:AWSServiceName": "redshift.amazonaws.com"}}
}
```

或者，您可以使用 AWS 受管政策來[提供 Amazon Redshift 的完整存取權](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftFullAccess)。

## 建立 Amazon Redshift 的服務連結角色
<a name="create-service-linked-role"></a>

您不需要手動建立 AWSServiceRoleForRedshift 服務連結角色。Amazon Redshift 會為您建立服務連結角色。如果已從您的帳戶刪除 AWSServiceRoleForRedshift 服務連結角色，Amazon Redshift 會在您啟動新的 Amazon Redshift 叢集時建立角色。

**重要**  
Amazon Redshift 自 2017 年 9 月 18 日開始支援服務連結角色，若您在這之前就有使用 Amazon Redshift 服務，則 Amazon Redshift 會在您的帳戶中建立 AWSServiceRoleForRedshift 角色。若要進一步了解，請參閱[顯示在我的 IAM 帳戶中的新角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)。

## 編輯 Amazon Redshift 的服務連結角色
<a name="edit-service-linked-role"></a>

Amazon Redshift 不允許您編輯 AWSServiceRoleForRedshift 服務連結角色。因為可能有各種實體會參考服務連結角色，所以您無法在建立角色之後變更其名稱。不過，您可以使用 IAM 主控台、 AWS Command Line Interface (AWS CLI) 或 IAM API 編輯角色的描述。如需詳細資訊，請參閱《IAM 使用者指南》**中的[修改角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html)。

## 刪除 Amazon Redshift 的服務連結角色
<a name="delete-service-linked-role"></a>

若您不再使用需要服務連結角色的功能或服務，我們建議您刪除該角色。如此一來，您就沒有未主動監控或維護的未使用實體。

您必須先關閉和刪除帳戶中的任何叢集，才能刪除帳戶的服務連結角色。如需詳細資訊，請參閱[關閉及刪除叢集](rs-mgmt-shutdown-delete-cluster.md)。

您可以使用 IAM 主控台 AWS CLI、 或 IAM API 來刪除服務連結角色。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[刪除服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

# 使用 IAM 身分驗證產生資料庫使用者憑證
<a name="generating-user-credentials"></a>

您可依 AWS Identity and Access Management (IAM) 許可政策所授予的許可產生暫時性資料庫憑證，以管理使用者對 Amazon Redshift 資料庫的存取。

Amazon Redshift 資料庫使用者通常會使用資料庫使用者名稱和密碼來登入資料庫。但是，您不必維護 Amazon Redshift 資料庫中的使用者名稱和密碼。另一種方法是，您可以將系統設定為允許使用者建立使用者登入資料，並根據其 IAM 登入資料登入資料庫。

Amazon Redshift 提供 [GetClusterCredentials](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html) API 操作，用於產生暫存資料庫使用者憑證。您可以使用 Amazon Redshift JDBC 或 ODBC 驅動程式來設定 SQL 用戶端，以便管理呼叫 `GetClusterCredentials` 操作的程序。其作法是擷取資料庫使用者憑證，然後在 SQL 用戶端和 Amazon Redshift 資料庫之間建立連線。但您也可以使用資料庫應用程式，以程式設計的方式呼叫 `GetClusterCredentials` 操作，擷取資料庫使用者登入資料，然後連線至資料庫。

如果您已在外部管理使用者身分 AWS，您可以使用符合安全性聲明標記語言 (SAML) 2.0 的身分提供者 (IdP) 來管理對 Amazon Redshift 資源的存取。您需設定 IdP，允許聯合身分使用者存取 IAM 角色。您可利用該 IAM 角色產生暫存資料庫憑證，並登入 Amazon Redshift 資料庫。

您的 SQL 用戶端需要許可，才能為您呼叫 `GetClusterCredentials` 操作。若要管理這些許可，您需建立 IAM 角色並連接 IAM 許可政策，以授予或限制對 `GetClusterCredentials` 操作和相關動作的存取。我們建議的最佳實務是，將許可政策附加到 IAM 角色，然後根據需要將其指派給使用者和群組。如需詳細資訊，請參閱 [Amazon Redshift 中的身分和存取管理](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)。

政策也會授予或限制特定資源的存取，例如 Amazon Redshift 叢集、資料庫、資料庫使用者名稱和使用者群組名稱。

**注意**  
我們建議使用 Amazon Redshift JDBC 或 ODBC 驅動程式來管理呼叫 `GetClusterCredentials` 操作及登入資料庫的程序。為簡化程序，我們假設您在本主題中都透過 JDBC 或 ODBC 驅動程式使用 SQL 用戶端。  
如需有關使用 `GetClusterCredentials` 操作或平行 `get-cluster-credentials` CLI 命令的具體細節和範例，請參閱 [GetClusterCredentials](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html) 和 [get-cluster-credentials](https://docs.aws.amazon.com/cli/latest/reference/redshift/get-cluster-credentials.html)。

為了集中管理身分驗證和授權，Amazon Redshift 支援使用 IAM 進行資料庫身分驗證，可讓您透過企業聯合進行使用者身分驗證。您可以使用現有的身分 AWS Directory Service、企業使用者目錄或 Web 身分提供者，而不是建立使用者。這些稱為聯合身分使用者。當透過 IdP 請求存取時， AWS 會將角色指派給聯合身分使用者。

若要為組織使用者或用戶端應用程式提供同盟存取以呼叫 Amazon Redshift API 操作，您也可以使用具有 SAML 2.0 支援的 JDBC 或 ODBC 驅動程式，向組織 IdP 請求身分驗證。在這種情況下，組織的使用者無法直接存取 Amazon Redshift。

如需詳細資訊，請參閱《IAM 使用者指南》**中的[身分提供者與聯合](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。

# 建立暫時性 IAM 憑證
<a name="generating-iam-credentials-steps"></a>

您將在本節中了解如何設定系統以產生暫時性 IAM 型資料庫使用者登入資料，並使用新的登入資料來登入資料庫。

高階的程序流程如下：

1. [步驟 1：建立適用於 IAM 單一登入存取的 IAM 角色](#generating-iam-credentials-sso-role)

   (選用) 您可整合 IAM 身分驗證和第三方身分提供者 (IdP)，對存取 Amazon Redshift 資料庫的使用者進行驗證。

1. [步驟 2：設定 IdP 的 SAML 聲明](#configuring-saml-assertions)

   (選用) 若要利用 IdP 使用 IAM 身分驗證，您需要在 IdP 應用程式中定義宣告規則，將組織中的使用者或群組映射到 IAM 角色。您也可選擇性加入屬性元素，以設定 `GetClusterCredentials` 參數。

1. [步驟 3：建立具有呼叫 GetClusterCredentialsWithIAM 或 GetClusterCredentials 許可的 IAM 角色 GetClusterCredentials](#generating-iam-credentials-role-permissions)

   SQL 用戶端應用程式在呼叫 `GetClusterCredentials` 操作時會擔任使用者。如果已建立用於身分提供者存取的 IAM 角色，您可為該角色新增必要的許可。

1. [步驟 4：建立資料庫使用者和資料庫群組](#generating-iam-credentials-user-and-groups)

   (選用) 根據預設，如果使用者名稱不存在，`GetClusterCredentials` 會傳回登入資料以建立新的使用者。您也可以選擇指定使用者登入時會加入的使用者群組。根據預設，資料庫使用者將加入 PUBLIC 群組。

1. [步驟 5：設定 JDBC 或 ODBC 連線使用 IAM 登入資料](#generating-iam-credentials-configure-jdbc-odbc)

   若要連線至 Amazon Redshift 資料庫，請將 SQL 用戶端設定為使用 Amazon Redshift JDBC 或 ODBC 驅動程式。

## 步驟 1：建立適用於 IAM 單一登入存取的 IAM 角色
<a name="generating-iam-credentials-sso-role"></a>

如果您未使用身分提供者進行單一登入存取，可略過此步驟。

如果您已在 外部管理使用者身分 AWS，您可以透過整合 IAM 身分驗證和第三方 SAML-2.0 身分提供者 (IdP) 來驗證使用者對 Amazon Redshift 資料庫的存取。

如需詳細資訊，請參閱《IAM 使用者指南》**中的[身分提供者與聯合](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)。

在使用 Amazon Redshift IdP 身分驗證之前，請先建立 AWS SAML 身分提供者。您可以在 IAM 主控台中建立 IdP，以通知 AWS IdP 及其組態。這樣做會在 AWS 您的帳戶和 IdP 之間建立信任。如需建立角色的步驟，請參閱《IAM 使用者指南》**中的[為 SAML 2.0 聯合建立角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html?icmpid=docs_iam_console)。

## 步驟 2：設定 IdP 的 SAML 聲明
<a name="configuring-saml-assertions"></a>

建立 IAM 身分後，請在 IdP 應用程式中定義宣告規則，以將組織中的使用者或群組映射到 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的的[為身分驗證回應設定 SAML 聲明](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html)。

如果您選擇使用選用的 `GetClusterCredentials` 參數 `DbUser`、`AutoCreate`、和 `DbGroups`，則有兩個選項。您可以使用 JDBC 或 ODBC 連線來設定參數值，或將 SAML 屬性元素新增至 IdP 以設定數值。如需 `DbUser`、`AutoCreate` 和 `DbGroups` 參數的詳細資訊，請參閱 [步驟 5：設定 JDBC 或 ODBC 連線使用 IAM 登入資料](#generating-iam-credentials-configure-jdbc-odbc)。

**注意**  
如果您使用 IAM 政策變數 `${redshift:DbUser}`，如 [GetClusterCredentials 的資源政策](redshift-iam-access-control-identity-based.md#redshift-policy-resources.getclustercredentials-resources)中所述，則會以 API 操作的請求內容所擷取的值取代 `DbUser` 的值。Amazon Redshift 驅動程式使用連線 URL 提供的 `DbUser` 變數的值，而非提供作為 SAML 屬性的值。  
為了協助保護此組態的安全，建議您在 IAM 政策中使用條件，以使用 `RoleSessionName` 來驗證 `DbUser` 值。您可以在[範例 8：使用 GetClusterCredentials 的 IAM 政策](redshift-iam-access-control-identity-based.md#redshift-policy-examples-getclustercredentials)中找到如何使用 IAM 政策來設定條件的範例。

若要設定 IdP 以設定 `DbUser`、`AutoCreate` 和 `DbGroups` 參數，請包含下列 `Attribute` 元素：
+ `Name` 屬性設定為 "https://redshift.amazon.com/SAML/Attributes/DbUser" 的 `Attribute` 元素

  將 `AttributeValue` 設定為即將連線至 Amazon Redshift 資料庫的使用者名稱。

  `AttributeValue` 元素中的值長度必須為小寫，開頭需為英文字母，只能包含英數字元、底線 (「\$1」)、加號 (「\$1」)、點號 (「.」)、At (「@」) 或連字號 (「-」)，且不得超過 128 個字元。使用者名稱的通常為使用者 ID (例如，bobsmith) 或電子郵件地址 (例如，bobsmith@example.com)。該值不能包含空格 (例如，Bob Smith 之類的使用者顯示名稱)。

  ```
  <Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbUser">
      <AttributeValue>user-name</AttributeValue>
  </Attribute>
  ```
+ 名稱屬性設定為「https://redshift.amazon.com/SAML/Attributes/AutoCreate」的屬性元素

  如果尚不存在，將 AttributeValue 元素設定為 true，即可建立新的資料庫使用者。將 AttributeValue 設定為 false，指定資料庫使用者必須存在於 Amazon Redshift 資料庫中。

  ```
  <Attribute Name="https://redshift.amazon.com/SAML/Attributes/AutoCreate">
      <AttributeValue>true</AttributeValue>
  </Attribute>
  ```
+ `Name` 屬性設定為 "https://redshift.amazon.com/SAML/Attributes/DbGroups" 的 `Attribute` 元素

  此元素包含一或多個 `AttributeValue` 元素。將每個 `AttributeValue` 元素設定為 `DbUser` 在連線至 Amazon Redshift 資料庫之工作階段期間將加入的資料庫群組名稱。

  ```
  <Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbGroups">
      <AttributeValue>group1</AttributeValue>
      <AttributeValue>group2</AttributeValue>
      <AttributeValue>group3</AttributeValue>
  </Attribute>
  ```

## 步驟 3：建立具有呼叫 GetClusterCredentialsWithIAM 或 GetClusterCredentials 許可的 IAM 角色 GetClusterCredentials
<a name="generating-iam-credentials-role-permissions"></a>

您的 SQL 用戶端需要授權，才能代表您呼叫 ` GetClusterCredentialsWithIAM`或 `GetClusterCredentials`操作。若要提供授權，您應建立使用者或角色，並附加授予必要許可的政策。這兩個操作都可用來取得叢集登入資料，但其身分驗證方法不同。 ` GetClusterCredentialsWithIAM`會使用 IAM 角色，自動建立映射至角色的資料庫使用者，這有助於管理 IAM 角色層級的許可，同時為資料庫中指定的使用者名稱`GetClusterCredentials`提供登入資料。

**建立具有呼叫 GetClusterCredentialsWithIAM 許可的 IAM 角色**

1. 使用 IAM 服務建立使用者或角色。也可使用現有的使用者或角色，例如，如果已建立用於身分提供者存取的 IAM 角色，您可將必要的 IAM 政策連接至該角色。

1. 連接具有呼叫 ` redshift:GetClusterCredentialsWithIAM` 操作許可的許可政策。下列政策範例顯示允許特定叢集和資料庫、叢集中的任何資料庫，以及任何叢集中的任何資料庫操作的選項。

   ```
   {
       "Version": "2012-10-17", 		 	 	 
       "Statement": [
           {
               "Sid": "SpecificClusterAndDBName",
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentialsWithIAM",
               "Resource": [
                   "arn:aws:redshift:us-east-1:123456789012:dbname:testcluster/testdatabase"
               ]
           },
           {
               "Sid": "SpecificClusterAndAnyDBName",
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentialsWithIAM",
               "Resource": "arn:aws:redshift:us-east-1:123456789012:dbname:examplecluster/*",
           },
           {
               "Sid": "AnyClusterAnyDatabase",
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentialsWithIAM",
               "Resource": "*"
           }
       ]
   }
   ```

**建立具有呼叫 GetClusterCredentials 之許可的 IAM 角色**

1. 使用 IAM 服務建立使用者或角色。也可使用現有的使用者或角色，例如，如果已建立用於身分提供者存取的 IAM 角色，您可將必要的 IAM 政策連接至該角色。

1. 連接具有呼叫 `redshift:GetClusterCredentials` 操作許可的許可政策。根據指定的選用參數而定，您也能在政策中允許或限制其他動作和資源：
   + 若要允許 SQL 用戶端擷取叢集 ID、 AWS 區域和連接埠，請包含使用 Redshift 叢集資源呼叫 `redshift:DescribeClusters`操作的許可。
   + 如果使用 `AutoCreate` 選項，請在 `dbuser` 資源中包含呼叫 `redshift:CreateClusterUser` 的許可。以下 Amazon Resource Name (ARN) 會指定 Amazon Redshift `dbuser`。*`cluster-name`* 將 *`account-id`*、 *`region`*和 取代為您的 AWS 區域、帳戶和叢集的值。針對 *`dbuser-name`*，指定用來登入叢集資料庫的使用者名稱。

     ```
     arn:aws:redshift:region:account-id:dbuser:cluster-name/dbuser-name
     ```
   + (選用) 新增 ARN 以指定 Amazon Redshift `dbname` 資源，格式如下。*`cluster-name`* 將 *`account-id`*、 *`region`*和 取代為您的 AWS 區域、帳戶和叢集的值。針對 `database-name`，指定使用者將登入的資料庫名稱。

     ```
     arn:aws:redshift:region:account-id:dbname:cluster-name/database-name
     ```
   + 如果您使用 `DbGroups` 選項，請包含對 Amazon Redshift `dbgroup` 資源呼叫 `redshift:JoinGroup` 操作的許可，格式如下。*`cluster-name`* 將 *`account-id`*、 *`region`*和 取代為您的 AWS 區域、帳戶和叢集的值。針對 `dbgroup-name`，指定使用者登入時要加入的使用者群組名稱。

     ```
     arn:aws:redshift:region:account-id:dbgroup:cluster-name/dbgroup-name
     ```

如需詳細資訊和範例，請參閱 [GetClusterCredentials 的資源政策](redshift-iam-access-control-identity-based.md#redshift-policy-resources.getclustercredentials-resources)。

## 步驟 4：建立資料庫使用者和資料庫群組
<a name="generating-iam-credentials-user-and-groups"></a>

您可選擇性建立資料庫使用者，以用來登入叢集資料庫。如果您為現有的使用者建立暫時性使用者登入資料，您可停用使用者的密碼，以強制使用者用暫時性密碼登入。或者，您也可使用 `GetClusterCredentials` Autocreate 選項自動建立新的資料庫使用者。

您可建立資料庫使用者群組並加入允許 IAM 資料庫使用者於登入時加入的許可。呼叫 `GetClusterCredentials` 操作時，您可指定新使用者於登入時加入的使用者群組名稱清單。這些群組成員資格僅適用於使用指定請求產生之登入資料所建立的工作階段。

**建立資料庫使用者和資料庫群組**

1. 登入 Amazon Redshift 資料庫並使用 [CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html) 建立資料庫使用者，或使用 [ALTER USER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html) 來變更現有的使用者。

1. 選擇性地指定 PASSWORD DISABLE 選項，防止使用者使用密碼。停用使用者密碼後，使用者只能使用暫時性憑證登入。如果未停用密碼，使用者可用其密碼或暫時性憑證登入。您無法停用超級使用者的密碼。

   如果使用者想要與 AWS 外部互動，則需要程式設計存取 AWS 管理主控台。授予程式設計存取權的方式取決於正在存取的使用者類型 AWS。

   若要授予使用者程式設計存取權，請選擇下列其中一個選項。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/generating-iam-credentials-steps.html)

   以下範例會建立停用密碼的使用者。

   ```
   create user temp_creds_user password disable; 
   ```

   以下範例會停用現有使用者的密碼。

   ```
   alter user temp_creds_user password disable;
   ```

1. 使用 [CREATE GROUP](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_GROUP.html) 建立資料庫使用者群組。

1. 使用 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html) 命令定義群組的存取權限。

## 步驟 5：設定 JDBC 或 ODBC 連線使用 IAM 登入資料
<a name="generating-iam-credentials-configure-jdbc-odbc"></a>

您可以使用 Amazon Redshift JDBC 或 ODBC 驅動程序設定您的 SQL 用戶端。此驅動程式會管理建立資料庫使用者憑證，然後在 SQL 用戶端與 Amazon Redshift 資料庫之間建立連線的程序。

如果您使用身分提供者進行身分驗證，請指定登入資料供應商外掛程式的名稱。Amazon Redshift JDBC 和 ODBC 驅動程式包含下列以 SAML 為基礎之身分提供者的外掛程式：
+ Active Directory Federation Services (AD FS)
+ PingOne
+ Okta
+ Microsoft Azure AD

  如需將 Microsoft Azure AD 設定為身分提供者的步驟，請參閱 [設定 JDBC 或 ODBC 單一登入身分驗證](setup-azure-ad-identity-provider.md)。<a name="to-configure-a-jdbc-connection"></a>

**設定 JDBC 連線使用 IAM 登入資料**

1. 從 [設定適用於 Amazon Redshift 的 JDBC 驅動器 2.x 版的連線](jdbc20-install.md) 頁面下載最新的 Amazon Redshift JDBC 驅動程式。

1. 使用下列其中一種格式的 IAM 登入資料選項建立 JDBC URL。若要使用 IAM 身分驗證，請將 `iam:` 新增至 Amazon Redshift JDBC URL 的 `jdbc:redshift:` 後方，如下列範例所示。

   ```
   jdbc:redshift:iam://
   ```

   新增 `cluster-name`、`region` 和 `account-id`。JDBC 驅動程式使用您的 IAM 帳戶資訊和叢集名稱來擷取叢集 ID 和 AWS 區域。若要這樣做，您的使用者或角色必須具備為指定叢集呼叫 `redshift:DescribeClusters` 操作的許可。如果您的使用者或角色沒有呼叫 `redshift:DescribeClusters`操作的許可，請包含叢集 ID、 AWS 區域和連接埠，如下列範例所示。連接埠號碼是選用的。

   ```
   jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev
   ```

1. 新增 JDBC 選項，以提供 IAM 登入資料。您可使用不同的 JDBC 選項組合來提供 IAM 登入資料。如需詳細資訊，請參閱[用於建立資料庫使用者憑證的 JDBC 和 ODBC 選項](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。

   以下 URL 指定使用者的 AccessKeyID 和 SecretAccessKey。

   ```
   jdbc:redshift:iam://examplecluster:us-west-2/dev?AccessKeyID=AKIAIOSFODNN7EXAMPLE&SecretAccessKey=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   ```

    以下範例指定包含 IAM 登入資料的命名設定檔。

   ```
   jdbc:redshift:iam://examplecluster:us-west-2/dev?Profile=user2
   ```

1. 新增 JDBC 驅動程式用來呼叫 `GetClusterCredentials` API 操作的 JDBC 選項。如果您用程式設計的方式呼叫 `GetClusterCredentials` API 操作，請勿加入這些選項。

   下列範例包含 JDBC `GetClusterCredentials` 選項。

   ```
   jdbc:redshift:iam://examplecluster:us-west-2/dev?plugin_name=com.amazon.redshift.plugin.AzureCredentialsProvider&UID=user&PWD=password&idp_tenant=my_tenant&client_secret=my_secret&client_id=my_id
   ```<a name="to-configure-an-odbc-connection"></a>

**設定 ODBC 連線使用 IAM 登入資料**

在以下程序中，您只能尋找設定 IAM 身分驗證的步驟。如需使用標準身分驗證 (使用資料庫使用者名稱和密碼) 的步驟，請參閱 [設定 Amazon Redshift ODBC 驅動程式 2.x 版連線](odbc20-install.md)。

1. 安裝並設定您的作業系統適用的 Amazon Redshift OBDC 驅動程式。如需詳細資訊，請參閱 [設定 Amazon Redshift ODBC 驅動程式 2.x 版連線](odbc20-install.md) 頁面。
**重要**  
Amazon Redshift ODBC 驅動程式必須為 1.3.6.1000 版或更新版本。

1. 依照您作業系統適用的步驟，設定連線設定。

1. 在 Microsoft Windows 作業系統中，存取 Amazon Redshift ODBC Driver DSN Setup 視窗。

   1. 在 **Connection Settings (連線設定)** 下，輸入下列資訊：
      + **Data Source Name (資料來源名稱)** 
      + **Server (伺服器)** (選用) 
      + **Port (連接埠)** (選用) 
      + **資料庫** 

      如果您的使用者或角色具有呼叫 `redshift:DescribeClusters` 操作的許可，則只需要**資料來源名稱**和**資料庫**。Amazon Redshift 會使用 **ClusterId** 和**區域**，透過呼叫 `DescribeCluster` 操作來取得伺服器和連接埠。

      如果您的使用者或角色不具有呼叫 `redshift:DescribeClusters` 操作的許可，請指定**伺服器**和**連接埠**。

   1. 在 **Authentication (身分驗證)** 下方，選擇 **Auth Type (驗證類型)** 的值。

      針對每個驗證類型，輸入下列的值：  
AWS 設定檔  
輸入下列資訊：  
      + **ClusterID (ClusterID)** 
      + **區域** 
      + **Profile name (設定檔名稱)** 

        在包含 ODBC AWS 連線選項值的組態檔案中，輸入設定檔的名稱。如需詳細資訊，請參閱[使用組態設定檔](options-for-providing-iam-credentials.md#using-configuration-profile)。
(選用) 提供 ODBC 驅動程式用來呼叫 `GetClusterCredentials` API 操作之選項的詳細資訊：  
      + **DbUser (DbUser)**
      + **User AutoCreate (使用者 AutoCreate)**
      + **DbGroups (DbGroups)**

        如需詳細資訊，請參閱[用於建立資料庫使用者憑證的 JDBC 和 ODBC 選項](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。  
IAM 登入資料  
輸入下列資訊：  
      + **ClusterID (ClusterID)** 
      + **區域** 
      + **AccessKeyID (AccessKeyID)** 和 **SecretAccessKey (SecretAccessKey)** 

        IAM 資料庫身分驗證所設定之 IAM 角色或使用者的存取金鑰 ID 和私密存取金鑰。
      + **SessionToken (SessionToken)** 

        **SessionToken (SessionToken)** 對於擁有暫時性登入資料的 IAM 角色來說為必填。如需詳細資訊，請參閱[暫時性安全登入資料](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。
提供 ODBC 驅動程式用來呼叫 `GetClusterCredentials` API 操作之選項的詳細資訊：  
      + **DbUser (DbUser)** (必填) 
      + **User AutoCreate (使用者 AutoCreate)** (選用) 
      + **DbGroups (DbGroups)** (選用) 

        如需詳細資訊，請參閱[用於建立資料庫使用者憑證的 JDBC 和 ODBC 選項](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。  
身分提供者：AD FS  
針對使用 AD FS 的 Windows 整合式身分驗證，請讓 **User (使用者)** 和 **Password (密碼)** 保持空白。  
提供 IdP 詳細資訊：  
      + **IdP Host (IdP 主機)** 

        企業身分提供商主機的名稱。該名稱不得包含任何斜線 (/)。
      + **IdP Port (IdP 連接埠)** (選用)

        身分提供者使用的連接埠。預設為 443。
      + **Preferred Role (偏好的角色)** 

        IAM 角色的 Amazon Resource Name (ARN)，來自 SAML 聲明中 `Role` 屬性的多值 `AttributeValue` 元素。若要尋找偏好角色適用的值，請洽詢 IdP 管理員。如需詳細資訊，請參閱[步驟 2：設定 IdP 的 SAML 聲明](#configuring-saml-assertions)。
(選用) 提供 ODBC 驅動程式用來呼叫 `GetClusterCredentials` API 操作之選項的詳細資訊：  
      + **DbUser (DbUser)** 
      + **User AutoCreate (使用者 AutoCreate)** 
      + **DbGroups (DbGroups)** 
如需詳細資訊，請參閱[用於建立資料庫使用者憑證的 JDBC 和 ODBC 選項](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。  
身分提供者：PingFederate  
針對 **User (使用者)** 和 **Password (密碼)**，輸入 IdP 的使用者名稱和密碼。  
提供 IdP 詳細資訊：  
      + **IdP Host (IdP 主機)** 

        企業身分提供商主機的名稱。該名稱不得包含任何斜線 (/)。
      + **IdP Port (IdP 連接埠)** (選用)

        身分提供者使用的連接埠。預設為 443。
      + **Preferred Role (偏好的角色)** 

        IAM 角色的 Amazon Resource Name (ARN)，來自 SAML 聲明中 `Role` 屬性的多值 `AttributeValue` 元素。若要尋找偏好角色適用的值，請洽詢 IdP 管理員。如需詳細資訊，請參閱[步驟 2：設定 IdP 的 SAML 聲明](#configuring-saml-assertions)。
(選用) 提供 ODBC 驅動程式用來呼叫 `GetClusterCredentials` API 操作之選項的詳細資訊：  
      + **DbUser (DbUser)** 
      + **User AutoCreate (使用者 AutoCreate)** 
      + **DbGroups (DbGroups)** 
如需詳細資訊，請參閱[用於建立資料庫使用者憑證的 JDBC 和 ODBC 選項](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。  
身分提供者：Okta  
針對 **User (使用者)** 和 **Password (密碼)**，輸入 IdP 的使用者名稱和密碼。  
提供 IdP 詳細資訊：  
      + **IdP Host (IdP 主機)** 

        企業身分提供商主機的名稱。該名稱不得包含任何斜線 (/)。
      + **IdP Port (IdP 連接埠)** 

        Okta 不會使用此值。
      + **Preferred Role (偏好的角色)** 

        IAM 角色的 Amazon Resource Name (ARN)，來自 SAML 聲明中 `Role` 屬性的 `AttributeValue` 元素。若要尋找偏好角色適用的值，請洽詢 IdP 管理員。如需詳細資訊，請參閱[步驟 2：設定 IdP 的 SAML 聲明](#configuring-saml-assertions)。
      + **Okta App ID (Okta 應用程式 ID)** 

        Okta 應用程式的 ID。Okta 應用程式嵌入連結中「amazon\$1aws」後方的 App ID 值。請洽詢 IdP 管理員，以取得此值。
(選用) 提供 ODBC 驅動程式用來呼叫 `GetClusterCredentials` API 操作之選項的詳細資訊：  
      + **DbUser (DbUser)** 
      + **User AutoCreate (使用者 AutoCreate)** 
      + **DbGroups (DbGroups)** 
如需詳細資訊，請參閱[用於建立資料庫使用者憑證的 JDBC 和 ODBC 選項](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。  
身分提供者：Azure AD  
針對 **User (使用者)** 和 **Password (密碼)**，輸入 IdP 的使用者名稱和密碼。  
針對**叢集 ID** 和**區域**，輸入您的 Amazon Redshift 叢集的叢集 ID 和 AWS 區域。  
針對**資料庫**，輸入您為 Amazon Redshift 叢集建立的資料庫。  
提供 IdP 詳細資訊：  
      + **IdP Tenant (IdP 租用戶)** 

        用於 Azure AD 的租用戶。
      + **Azure Client Secret (Azure 用戶端密碼)**

        Azure 中 Amazon Redshift 企業應用程式的用戶端密碼。
      + **Azure Client ID (Azure 用戶端 ID)** 

        Azure 中 Amazon Redshift 企業應用程式的用戶端 ID (應用程式 ID)。
(選用) 提供 ODBC 驅動程式用來呼叫 `GetClusterCredentials` API 操作之選項的詳細資訊：  
      + **DbUser (DbUser)** 
      + **User AutoCreate (使用者 AutoCreate)** 
      + **DbGroups (DbGroups)** 
如需詳細資訊，請參閱[用於建立資料庫使用者憑證的 JDBC 和 ODBC 選項](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。

# 提供 IAM 登入資料的選項
<a name="options-for-providing-iam-credentials"></a>

若要提供 JDBC 或 ODBC 連線的 IAM 登入資料，請選擇下列選項之一。
+ **AWS profile** 

  做為以 JDBC 或 ODBC 設定形式提供登入資料值的替代方案，您可將值放入命名設定檔。如需詳細資訊，請參閱[使用組態設定檔](#using-configuration-profile)。
+ **IAM 登入資料**

  以 JDBC 或 ODBC 設定形式提供 AccessKeyID、SecretAccessKey 和 (選用) SessionToken 的值。SessionToken 只對擁有暫時性登入資料的 IAM 角色為必填。如需詳細資訊，請參閱[提供 IAM 登入資料的 JDBC 和 ODBC 選項](#jdbc-options-for-providing-iam-credentials)。
+ **身分提供者聯合** 

  當您使用身分提供者聯合，讓來自身分提供者的使用者向 Amazon Redshift 進行驗證時，請指定憑證供應商外掛程式的名稱。如需詳細資訊，請參閱[憑證提供者外掛程式](#using-credentials-provider-plugin)。

  Amazon Redshift JDBC 和 ODBC 驅動程式包含下列以 SAML 為基礎之聯合身分憑證供應商的外掛程式：
  + Microsoft Active Identity Federation Services (AD FS)
  + PingOne
  + Okta
  + Microsoft Azure Active Directory (Azure AD)

  您可用 JDBC 或 ODBC 設定形式或使用設定檔提供外掛程式名稱和相關值。如需詳細資訊，請參閱[JDBC 驅動器 2.x 版組態的選項](jdbc20-configuration-options.md)。

如需詳細資訊，請參閱[步驟 5：設定 JDBC 或 ODBC 連線使用 IAM 登入資料](generating-iam-credentials-steps.md#generating-iam-credentials-configure-jdbc-odbc)。

## 使用組態設定檔
<a name="using-configuration-profile"></a>

您可以在 AWS 組態檔案中的具名設定檔中提供 IAM 登入資料選項和`GetClusterCredentials`選項做為設定。若要提供設定檔名稱，請使用設定檔 JDBC 選項。組態儲存於主目錄內名為 `.aws` 之資料夾中名為 `config` 的檔案或名為 `credentials` 的檔案中。

針對具有 Amazon Redshift JDBC 或 ODBC 驅動程式之以 SAM 為基礎的憑證供應商外掛程式，您可以使用先前在[憑證提供者外掛程式](#using-credentials-provider-plugin)中所述的設定。如果 `plugin_name` 未使用，則會忽略其他選項。

下列範例顯示具有兩個設定檔的 \$1/.aws/credentials 檔案：

```
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user2]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
session_token=AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==
```

若要使用 `user2` 範例的登入資料，請在 JDBC URL 中指定 `Profile=user2`。

如需使用設定檔的詳細資訊，請參閱《 使用者指南》中的[組態和登入資料檔案設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。* AWS Command Line Interface *

如需為 JDBC 驅動程式使用設定檔的相關資訊，請參閱[指定設定檔](jdbc20-configure-authentication-ssl.md#jdbc20-aws-credentials-profiles)。

如需為 ODBC 驅動程式使用設定檔的相關資訊，請參閱[身分驗證方法](odbc20-authentication-ssl.md)。

## 提供 IAM 登入資料的 JDBC 和 ODBC 選項
<a name="jdbc-options-for-providing-iam-credentials"></a>

下表列出提供 IAM 登入資料的 JDBC 和 ODBC 選項。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

## 用於建立資料庫使用者憑證的 JDBC 和 ODBC 選項
<a name="jdbc-and-odbc-options-for-database-credentials"></a>

若要使用 Amazon Redshift JDBC 或 ODBC 驅動程式建立資料庫使用者憑證，請以 JDBC 或 ODBC 選項提供資料庫使用者名稱。如果資料庫使用者不存在，您也可選擇性讓驅動程式建立新的資料庫使用者，此外也可指定使用者於登入時加入的資料庫使用者群組清單。

如果您使用身分提供者 (IdP)，請洽詢 IdP 管理員，以決定這些選項的正確值。IdP 管理員也可設定您的 IdP，以提供這些選項，如此您便不用透過 JDBC 或 ODBC 選項提供。如需詳細資訊，請參閱[步驟 2：設定 IdP 的 SAML 聲明](generating-iam-credentials-steps.md#configuring-saml-assertions)。

**注意**  
如果您使用 IAM 政策變數 `${redshift:DbUser}`，如 [GetClusterCredentials 的資源政策](redshift-iam-access-control-identity-based.md#redshift-policy-resources.getclustercredentials-resources)中所述，則會以 API 操作的請求內容所擷取的值取代 `DbUser` 的值。Amazon Redshift 驅動程式使用連線 URL 提供的 `DbUser` 變數的值，而非提供作為 SAML 屬性的值。  
為了協助保護此組態的安全，建議您在 IAM 政策中使用條件，配合 `RoleSessionName` 來驗證 `DbUser` 值。您可以在[範例 8：使用 GetClusterCredentials 的 IAM 政策](redshift-iam-access-control-identity-based.md#redshift-policy-examples-getclustercredentials)中找到如何使用 IAM 政策來設定條件的範例。

下表列出提供用於建立資料庫使用者登入資料的選項。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

## 憑證提供者外掛程式
<a name="using-credentials-provider-plugin"></a>

Amazon Redshift 使用憑證供應商外掛程式進行單一登入身分驗證。

為了支援單一登入身分驗證，Amazon Redshift 提供適用於 Microsoft Azure Active Directory 的 Azure AD 外掛程式。如需如何設定此外掛程式的資訊，請參閱[設定 JDBC 或 ODBC 單一登入身分驗證](setup-azure-ad-identity-provider.md)。

### 多重要素驗證
<a name="setting_mfa"></a>

為了支援多重要素驗證 (MFA)，Amazon Redshift 提供瀏覽器型的外掛程式。使用適用於 Okta、PingOne 的瀏覽器 SAML 外掛程式，以及適用於 Microsoft Azure Active Directory 的瀏覽器 Azure AD 外掛程式。

使用瀏覽器 SAML 外掛程式時的 OAuth 身分驗證流程如下：

![\[外掛程式、本機伺服器、Web 瀏覽器和端點如何搭配運作，以使用 SAML 身分驗證來驗證使用者身分的 OAuth 工作流程。\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/images/BrowserSAML_plugin.png)


1. 使用者嘗試登入。

1. 外掛程式會啟動本機伺服器來接聽 localhost 上的傳入連線。

1. 外掛程式會啟動 web 瀏覽器，從指定的單一登入 URL 聯合身分識別供應商端點透過 HTTPS 請求 SAML 回應。

1. web 瀏覽器會遵循連結，並提示使用者輸入登入資料。

1. 在使用者驗證並授予同意後，聯合身分提供者端點會透過 HTTPS 將 SAML 回應傳回由 `redirect_uri` 指定的 URI。

1. web 瀏覽器會將回應訊息與 SAML 回應移至指定的 `redirect_uri`。

1. 本機伺服器會接受傳入的連線，而外掛程式會擷取 SAML 回應並將其傳遞給 Amazon Redshift。

使用瀏覽器 Azure AD 外掛程式時，SAML 身分驗證的流程如下：

![\[外掛程式、本機伺服器、Web 瀏覽器和端點如何搭配運作，以使用 SAML 身分驗證來驗證使用者身分的 Azure 工作流程。\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/images/BrowserAzure_plugin.png)


1. 使用者嘗試登入。

1. 外掛程式會啟動本機伺服器來接聽 localhost 上的傳入連線。

1. 外掛程式會啟動 web 瀏覽器，以從 Azure AD `oauth2/authorize` 端點請求授權碼。

1. web 瀏覽器會透過 HTTPS 遵循所產生的連結，並提示使用者輸入登入資料。連結是使用組態屬性 (例如租用戶和 client\$1id) 所產生的。

1. 在使用者進行驗證並授予同意後，Azure AD `oauth2/authorize` 端點會傳回，並透過 HTTPS 將包含授權碼的回應傳送至指定 `redirect_uri`。

1. web 瀏覽器會將回應訊息與 SAML 回應移至指定的 `redirect_uri`。

1. 本機伺服器會接受傳入的連線和外掛程式請求並擷取授權碼，然後將 POST 請求傳送至 Azure AD `oauth2/token` 端點。

1. Azure AD `oauth2/token` 端點會將包含存取權杖的回應傳回指定 `redirect_uri`。

1. 外掛程式會擷取 SAML 回應並將其傳遞給 Amazon Redshift。

請參閱以下章節：
+ Active Directory Federation Services (AD FS)

  如需詳細資訊，請參閱[設定 JDBC 或 ODBC 單一登入身分驗證](setup-azure-ad-identity-provider.md)。
+ PingOne (Ping) 

  Ping 只有在使用 Forms 身分驗證的預先決定 PingOne IdP 轉接器時受到支援。

  如需詳細資訊，請參閱[設定 JDBC 或 ODBC 單一登入身分驗證](setup-azure-ad-identity-provider.md)。
+ Okta 

  Okta 只有在使用 Okta 提供用於 AWS 管理主控台的應用程式時受到支援。

  如需詳細資訊，請參閱[設定 JDBC 或 ODBC 單一登入身分驗證](setup-azure-ad-identity-provider.md)。
+ Microsoft Azure Active Directory

  如需詳細資訊，請參閱[設定 JDBC 或 ODBC 單一登入身分驗證](setup-azure-ad-identity-provider.md)。

### 外掛程式選項
<a name="configuring_plugin_options"></a>

若要使用以 SAML 為基礎的憑證供應商外掛程式，請使用 JDBC 或 ODBC 選項或在命名設定檔中指定下列選項。如果未指定 `plugin_name`，則會忽略其他選項。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

# 使用 Amazon Redshift CLI 或 API 產生 IAM 身分的資料庫憑證
<a name="generating-iam-credentials-cli-api"></a>

若要以程式設計方式產生臨時資料庫使用者憑證，Amazon Redshift 為 AWS Command Line Interface (AWS CLI) 和 GetClusterCredentials API 操作提供 [get-cluster-credentials](https://docs.aws.amazon.com/cli/latest/reference/redshift/get-cluster-credentials.html) [GetClusterCredentials](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html) 命令。或者，您可以使用 Amazon Redshift JDBC 或 ODBC 驅動程式來設定 SQL 用戶端，以管理呼叫 `GetClusterCredentials` 操作、擷取資料庫使用者憑證，以及在 SQL 用戶端和 Amazon Redshift 資料庫之間建立連接的程序。如需詳細資訊，請參閱[用於建立資料庫使用者憑證的 JDBC 和 ODBC 選項](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。

**注意**  
我們建議使用 Amazon Redshift JDBC 或 ODBC 驅動程式產生資料庫使用者憑證。

您可在本節中找到程式設計的步驟，以用來呼叫 `GetClusterCredentials` 操作或 get-cluster-credentials 命令、擷取資料庫使用者登入資料，以及連線至資料庫。

**產生及使用暫時性資料庫登入資料**

1. 建立或修改具有必要許可的使用者或角色。如需 IAM 許可的相關資訊，請參閱 [步驟 3：建立具有呼叫 GetClusterCredentialsWithIAM 或 GetClusterCredentials 許可的 IAM 角色 GetClusterCredentials](generating-iam-credentials-steps.md#generating-iam-credentials-role-permissions)。

1. 以您在先前步驟中授權的使用者或角色身分，執行 get-cluster-credentials CLI 命令或呼叫 `GetClusterCredentials` API 操作，然後提供下列值：
   + **叢集識別碼** — 包含資料庫之叢集的名稱。
   + **資料庫使用者名稱** — 現有或新資料庫使用者的名稱。
     + 如果資料庫中不存在使用者，且 AutoCreate 為 true，將建立停用 PASSWORD 的新使用者。
     +  如果使用者不存在，且 AutoCreate 為 false，則請求失敗。
     + 針對此範例，資料庫使用者名稱為 `temp_creds_user`。
   +  **自動建立** — (選用) 如果資料庫使用者名稱不存在，則建立新使用者。
   +  **資料庫名稱** — (選用) 使用者授權登入之資料庫的名稱。如果未指定資料庫名稱，使用者將可登入任何的叢集資料庫。
   +  **資料庫群組** — (選用) 現有資料庫使用者群組的清單。成功登入後，資料庫使用者將新增至指定的使用者群組。如果未指定群組，使用者只會具有 PUBLIC 許可。使用者群組名稱必須符合附加至使用者或角色之 IAM 政策中指定的 dbgroup 資源 ARN。
   +  **過期時間** — (選用) 暫時性憑證過期前經過的時間 (以秒計)。您可指定 900 秒 (15 分鐘) 至 3600 秒 (60 分鐘) 之間的值。預設為 900 秒。

1. Amazon Redshift 會確定使用者具備用指定資源呼叫 `GetClusterCredentials` 操作的許可。

1. Amazon Redshift 將傳回暫時性密碼和資料庫使用者名稱。

   下列範例使用 Amazon Redshift CLI 為名為 `temp_creds_user` 的現有使用者產生暫時性資料庫憑證。

   ```
   aws redshift get-cluster-credentials --cluster-identifier examplecluster --db-user temp_creds_user --db-name exampledb --duration-seconds 3600
   ```

   結果如下所示。

   ```
   {
     "DbUser": "IAM:temp_creds_user", 
     "Expiration": "2016-12-08T21:12:53Z", 
     "DbPassword": "EXAMPLEjArE3hcnQj8zt4XQj9Xtma8oxYEM8OyxpDHwXVPyJYBDm/gqX2Eeaq6P3DgTzgPg=="
   }
   ```

   下列範例使用 Amazon Redshift CLI 與 autocreate 為新使用者產生暫時性資料庫憑證，並將使用者加入到 `example_group` 群組。

   ```
   aws redshift get-cluster-credentials --cluster-identifier examplecluster --db-user temp_creds_user --auto-create --db-name exampledb --db-groups example_group --duration-seconds 3600
   ```

   結果如下所示。

   ```
   {
     "DbUser": "IAMA:temp_creds_user:example_group", 
     "Expiration": "2016-12-08T21:12:53Z", 
     "DbPassword": "EXAMPLEjArE3hcnQj8zt4XQj9Xtma8oxYEM8OyxpDHwXVPyJYBDm/gqX2Eeaq6P3DgTzgPg=="
   }
   ```

1. 建立與 Amazon Redshift 叢集的 Secure Socket Layer (SSL) 身分驗證連線，並用來自 `GetClusterCredentials` 回應中的使用者名稱和密碼傳送登入請求。請在使用者名稱中加入 `IAM:` 或 `IAMA:` 字首，例如，`IAM:temp_creds_user` 或 `IAMA:temp_creds_user`。
**重要**  
設定 SQL 用戶端要求 SSL。否則，如果您的 SQL 用戶端自動嘗試使用 SSL 連線，發生任何類型的故障時其將切換為非 SSL。在此情況下，第一個連線嘗試可能會因為登入資料過期或失效而失敗，而第二個連線嘗試可能會因連線不是 SSL 而失敗。此時，可能會跳過第一個錯誤訊息。如需使用 SSL 連接至叢集的相關資訊，請參閱 [設定連線的安全選項](connecting-ssl-support.md)。

1. 如果連線不使用 SSL，連線嘗試將失敗。

1. 叢集會傳送 `authentication` 請求至 SQL 用戶端。

1. 接著 SQL 用戶端會傳送暫時性密碼至叢集。

1. 如果密碼為有效且尚未過期，叢集將完成連線。

# 設定 JDBC 或 ODBC 單一登入身分驗證
<a name="setup-azure-ad-identity-provider"></a>

您可以利用外部身分提供者 (IdP) 來驗證使用者身分，並授權使用者存取 Amazon Redshift 叢集，以簡化使用者管理和增強安全性。如此即可在多項服務之間集中管理使用者、啟用角色型存取控制和稽核功能。常見的使用案例包括簡化各種使用者群組的身分驗證、強制執行一致的存取政策，以及符合監管要求。

以下頁面將引導您設定與 Redshift 叢集的 IdP 整合。如需 AWS 將 設定為 IdP 服務提供者的詳細資訊，請參閱《*IAM 使用者指南*》中的[使用依賴方信任設定 SAML 2.0 IdP 和新增宣告](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html#saml_relying-party)。

# AD FS
<a name="setup-identity-provider-adfs"></a>

本教學課程說明如何使用 AD FS 作為身分提供者 (IdP) 來存取您的 Amazon Redshift 叢集。

## 步驟 1：設定 AD FS 和 AWS 您的帳戶彼此信任
<a name="setup-identity-provider-adfs-trust"></a>

 下列程序說明如何設定信任關係。

1. 建立或使用現有的 Amazon Redshift 叢集，以供 AD FS 使用者連線。若要設定連線，則需要此叢集的特定屬性，例如叢集識別碼。如需詳細資訊，請參閱[建立叢集](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 設定 AD FS 以控制 Microsoft 管理主控台上的 Amazon Redshift 存取：

   1. 選擇 **ADFS 2.0**，然後選擇 **Add Relying Party Trust (新增信賴方信任)**。在 **Add Relying Party Trust Wizard (新增信賴方信任精靈)** 頁面上，選擇 **Start (開始)**。

   1. 在 **Select Data Source (選取資料來源)** 頁面上，選擇 **Import data about the relying party published online or on a local network (匯入關於在線上或本機網路上發佈信賴方的資料)**。

   1. 針對 **Federation metadata address (host name or URL) (聯合中繼資料地址 (主機名稱或 URL))**，輸入 **https://signin.aws.amazon.com/saml-metadata.xml**。中繼資料 XML 檔案是描述 AWS 為依賴方的標準 SAML 中繼資料文件。

   1. 在 **Specify Display Name (指定顯示名稱)** 頁面上，輸入 **Display name (顯示名稱)** 的值。

   1. 在 **Choose Issuance Authorization Rules (選擇發行授權規則)** 頁面上，選擇允許或拒絕所有使用者存取此信賴方的發行授權規則。

   1. 在 **Ready to Add Trust (準備新增信任)** 頁面上檢閱您的設定。

   1. 在 **Finish (完成)** 頁面上，選擇 **Open the Edit Claim Rules dialog for this relying party trust when the wizard closes (當精靈關閉時，開啟此信賴方信任的「編輯宣告規則」對話方塊)**。

   1. 在內容 (按一下滑鼠右鍵) 功能表上，選擇 **Relying Party Trusts (依賴方信任)**。

   1. 針對您的信賴方，開啟內容 (按一下滑鼠右鍵) 功能表，然後選擇 **Edit Claim Rules (編輯宣告規則)**。在 **Edit Claim Rules (編輯宣告規則)** 頁面上，選擇 **Add Rule (新增規則)**。

   1. 在 **Claim rule template (宣告規則範本)** 中，選擇 **Transform an Incoming Claim (轉換傳入宣告)**，然後在 **Edit Rule – NameId (編輯規則 – NameId) ** 頁面上執行下列動作：
      + 針對 **Claim rule name (宣告規則名稱)**，輸入 **NameId**。
      + 針對 **Incoming claim name (傳入宣告名稱)**，選擇 **Windows Account Name (Windows 帳戶名稱)**。
      + 針對 **Outgoing claim name (傳出宣告名稱)**，選擇 **Name ID (名稱 ID)**。
      + 針對 **Outgoing name ID format (傳出名稱 ID 格式)**，選擇 **Persistent Identifier (持久性標識符)**。
      + 選擇 **Pass through all claim values (傳遞所有宣告值)**。

   1. 在 **Edit Claim Rules (編輯宣告規則)** 頁面上，選擇 **Add Rule (新增規則)**。在 **Select Rule Template (選取規則範本)** 頁面上，針對 **Claim rule template (宣告規則範本)**，選擇 **Send LDAP Attributes as Claims (將 LDAP 屬性傳送為宣告)**。

   1. 在 **Configure Rule (設定規則)** 頁面上，執行下列作業：
      + 針對 **Claim rule name (宣告規則名稱)**，輸入 **RoleSessionName**。
      + 針對 **Attribute store (屬性存放區)**，選擇 **Active Directory**。
      + 針對 **LDAP Attribute (LDAP 屬性)**，選擇 **Email Addresses (電子郵件地址)**。
      + 針對 **傳出宣告類型**，選擇 **https://aws.amazon.com/SAML/Attributes/RoleSessionName**。

   1. 在 **Edit Claim Rules (編輯宣告規則)** 頁面上，選擇 **Add Rule (新增規則)**。在 **Select Rule Template (選取規則範本)** 頁面上，針對 **Claim rule template (宣告規則範本)**，選擇 **Send Claims Using a Custom Rule (使用自訂規則傳送宣告)**。

   1. 在 **Edit Rule – Get AD Groups (編輯規則 – 取得 AD 群組)** 頁面上，針對 **Claim rule name (宣告規則名稱)**，輸入 **Get AD Groups (取得 AD 群組)**。

   1. 針對 **Custom rule (自訂規則)**，輸入下列內容。

      ```
      c:[Type ==
                                          "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",
                                          Issuer == "AD AUTHORITY"] => add(store = "Active Directory",
                                          types = ("http://temp/variable"), query = ";tokenGroups;{0}",
                                          param = c.Value);
      ```

   1. 在 **Edit Claim Rules (編輯宣告規則)** 頁面上，選擇 **Add Rule (新增規則)**。在 **Select Rule Template (選取規則範本)** 頁面上，針對 **Claim rule template (宣告規則範本)**，選擇 **Send Claims Using a Custom Rule (使用自訂規則傳送宣告)**。

   1. 在 **Edit Rule – Roles (編輯規則 – 角色)** 頁面上，針對 **Claim rule name (宣告規則名稱)**，輸入 **Roles (角色)**。

   1. 針對 **Custom rule (自訂規則)**，輸入下列內容。

      ```
      c:[Type == "http://temp/variable", Value =~ "(?i)^AWS-"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "AWS-", "arn:aws:iam::123456789012:saml-provider/ADFS,arn:aws:iam::123456789012:role/ADFS-"));
      ```

      請記下 SAML 供應商的 ARN，以及要扮演的角色。在此範例中，`arn:aws:iam:123456789012:saml-provider/ADFS` 是 SAML 供應商的 ARN，`arn:aws:iam:123456789012:role/ADFS-` 是角色的 ARN。

1. 請確定您已下載 `federationmetadata.xml` 檔案。檢查文件內容沒有無效的字元。這是您在設定與 AWS的信任關係時，使用的中繼資料檔案。

1. 在 IAM 主控台上建立 IAM SAML 身分提供者。您所提供的中繼資料文件，是您在設定 Azure 企業應用程式時儲存的聯合中繼資料 XML 檔案。如需詳細步驟，請參閱《IAM 使用者指南》**中的[建立和管理 IAM 身分提供者 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 主控台上建立 SAML 2.0 聯合的 IAM 角色。如需詳細步驟，請參閱《IAM 使用者指南》**中的[為 SAML 建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 建立 IAM 政策，您可將其附加至您在 IAM 主控台上為 SAML 2.0 聯合建立的 IAM 角色。如需詳細步驟，請參閱《IAM 使用者指南》**中的[建立 IAM 政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。如需 Azure AD 範例，請參閱[設定 JDBC 或 ODBC 單一登入身分驗證](setup-azure-ad-identity-provider.md)。

## 步驟 2：設定 JDBC 或 ODBC 以對 AD FS 進行身分驗證
<a name="setup-identity-provider-adfs-auth"></a>

------
#### [ JDBC ]

 下列程序說明如何設定 JDBC 與 AD FS 的關係。
+ 將資料庫用戶端設定為使用 AD FS 單一登入，透過 JDBC 連線到您的叢集。

  您可使用任何採用 JDBC 驅動程式的用戶端使用 AD FS 單一登入進行連線，或使用 Java 之類的語言透過指令碼進行連線。如需安裝和組態資訊，請參閱 [設定適用於 Amazon Redshift 的 JDBC 驅動器 2.x 版的連線](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作為用戶端。當您設定 SQLWorkbench /J 時，您的資料庫 URL 會使用下列格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench /J 作為用戶端，請執行下列步驟：

  1. 啟動 SQL Workbench/J。在**選取連線設定檔**頁面中，新增**設定檔群組**，例如 **ADFS**。

  1. 針對 **Connection Profile (連線設定檔)**，輸入您的連線設定檔名稱，例如 **ADFS**。

  1. 選擇 **Manage Drivers (管理驅動程式)**，然後選擇 **Amazon Redshift**。選擇**程式庫**旁邊的**開啟資料夾**圖示，然後選擇適當的 JDBC .jar 檔案。

  1. 在 **Select Connection Profile (選取連線設定檔)** 頁面上，將資訊新增至連線設定檔，如下所示：
     + 針對 **User (使用者)**，輸入您的 AD FS 使用者名稱。這是您用於單一登入之 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。
     + 針對 **Password (密碼)**，輸入您的 AD FS 密碼。
     + 針對 **Drivers (驅動程式)**，選擇 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 針對 **URL**，輸入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 選擇**延伸屬性**。針對 **plugin\$1name**，輸入 **com.amazon.redshift.plugin.AdfsCredentialsProvider**。此值會指定驅動程式使用 AD FS 單一登入做為身分驗證方法。

------
#### [ ODBC ]

**設定 ODBC 以對 AD FS 進行身分驗證**
+ 將資料庫用戶端設定為使用 AD FS 單一登入，透過 ODBC 連線到您的叢集。

  Amazon Redshift 會提供適用於 Linux、Windows 和 macOS 作業系統的 ODBC 驅動程式。安裝 ODBC 驅動程式之前，查明 SQL 用戶端工具是 32 位元或 64 位元。安裝符合 SQL 用戶端工具需求的 ODBC 驅動程式。

  在 Windows 上，於 **Amazon Redshift ODBC Driver DSN Setup (Amazon Redshift ODBC 驅動程式 DSN 設定)** 頁面的 **Connection Settings (連線設定)** 之下，輸入下列資訊：
  + 針對 **Data source name (資料來源名稱)**，輸入 ***your-DSN***。這會指定作為 ODBC 設定檔名稱的資料來源名稱。
  + 針對**驗證類型**，選擇**身分提供者：SAML**。這是 ODBC 驅動程式使用 AD FS 單一登入來進行驗證的身分驗證方法。
  + 針對 **Cluster ID (叢集 ID)**，輸入 ***your-cluster-identifier***。
  + 針對 **Region (區域)**，輸入 ***your-cluster-region***。
  + 針對 **Database (資料庫)**，輸入 ***your-database-name***。
  + 針對 **User (使用者)**，輸入 ***your-adfs-username***。這是您用於單一登入之 AD FS 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。僅在 **Auth Type (驗證類型)** 為**Identity Provider: SAML (身分提供者：SAML)** 的情況下使用此項目。
  + 針對 **Password (密碼)**，輸入 ***your-adfs-password***。僅在 **Auth Type (驗證類型)** 為**Identity Provider: SAML (身分提供者：SAML)** 的情況下使用此項目。

  在 macOS 和 Linux 上，編輯 `odbc.ini` 檔案，如下所示：
**注意**  
所有項目都不區分大小寫。
  + 針對 **clusterid**，輸入 ***your-cluster-identifier***。這是所建立 Amazon Redshift 叢集的名稱。
  + 針對 **region (區域)**，輸入 ***your-cluster-region***。這是已建立 Amazon Redshift 叢集 AWS 的區域。
  + 針對 **database (資料庫)**，輸入 ***your-database-name***。這是您嘗試在 Amazon Redshift 叢集上存取的資料庫名稱。
  + 針對 **locale**，輸入 **en-us**。這是錯誤訊息的顯示語言。
  + 針對 **iam**，輸入 **1**。此值指定驅動程式使用 IAM 登入資料進行身分驗證。
  + 針對 **plugin\$1name**，執行下列其中一項作業：
    + 若為具有 MFA 的 AD FS 單一登入組態，請輸入 **BrowserSAML**。這是 ODBC 驅動程式用來驗證 AD FS 的身分驗證方法。
    + 若為 AD FS 單一登入組態，請輸入 **ADFS**。這是 ODBC 驅動程式使用 Azure AD 單一登入來進行驗證的身分驗證方法。
  + 針對 **uid**，輸入 ***your-adfs-username***。這是您用於單一登入之 Microsoft Azure 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。僅在 **plugin\$1name** 為 **ADFS** 的情況下使用此項目。
  + 針對 **pwd**，輸入 ***your-adfs-password***。僅在 **plugin\$1name** 為 **ADFS** 的情況下使用此項目。

  在 macOS 和 Linux 上，同時編輯設定檔設定以新增下列匯出：

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

# Azure
<a name="setup-identity-provider-azure"></a>

您可以使用 Microsoft Azure AD 作為身分提供者 (IdP) 來存取您的 Amazon Redshift 叢集。本教學課程說明如何使用 Azure 作為身分提供者 (IdP) 來存取您的 Amazon Redshift 叢集。

如要了解如何搭配 Microsoft Azure AD 單一登入聯合 Amazon Redshift 存取，請觀看以下影片。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/aXs9hEgJCss/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/aXs9hEgJCss)


## 步驟 1：設定 Azure 和 AWS 您的帳戶彼此信任
<a name="setup-identity-provider-azure-trust"></a>

下列程序說明如何設定信任關係。

**設定 Azure AD 和 AWS 您的帳戶彼此信任**

1. 建立或使用現有的 Amazon Redshift 叢集，以供 Azure AD 使用者連線。若要設定連線，則需要此叢集的特定屬性，例如叢集識別碼。如需詳細資訊，請參閱[建立叢集](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 在 Microsoft Azure 入口網站 AWS 上設定用於 的 Azure Active Directory、群組和使用者。

1. 在 Microsoft Azure 入口網站上將 Amazon Redshift 新增為企業應用程式，以用於 AWS 主控台的單一登入和 Amazon Redshift 的聯合登入。選擇 **Enterprise application (企業應用程式)**。

1. 選擇 **\$1New application (新增應用程式)**。新增應用程式頁面隨即顯示。

1. 在搜尋欄位中搜尋 **AWS**。

1. 選擇 **Amazon Web Services (AWS)**，然後選擇**新增**。此操作會建立 AWS 應用程式。

1. 在 **Manage (管理)** 下方，選擇 **Single sign-on (單一登入)**。

1. 選擇 **SAML**。Amazon Web Services (AWS) \$1 以 SAML 為基礎的登入頁面隨即顯示。

1. 選擇 **Yes (是)**，繼續進行「使用 SAML 頁面設定單一登入」。此頁面會顯示預先設定的單一登入相關屬性清單。

1. 在 **Basic SAML Configuration (基本 SAML 組態)** 中，選擇編輯圖示並選擇 **Save (儲存)**。

1. 設定超過一個應用程式時，請提供識別碼值。例如，​輸入 ***https://signin.aws.amazon.com/saml\$12***。請注意，從第二個應用程式開始，請使用此格式搭配 \$1 符號來指定唯一的 SPN 值。

1. 在 **User Attributes and Claims (使用者屬性和宣告)** 區段中選擇編輯圖示。

   根據預設，唯一使用者標識符 (UID)、角色、RoleSessionName 和 SessionDuration 宣告都是預先設定的。

1. 選擇 **\$1 Add new claim (新增宣告)** 來新增資料庫使用者的宣告。

   對於**名稱**，輸入 **DbUser**。

   針對 **Namespace (命名空間)**，輸入 **https://redshift.amazon.com/SAML/Attributes**。

   針對 **Source (來源)**，選擇 **Attribute (屬性)**。

   針對 **Source attribute (來源屬性)**，選擇 **user.userprincipalname**。然後選擇 **Save (儲存)**。

1. 選擇 **\$1 Add new claim (新增宣告)** 來新增 AutoCreate 的宣告。

   對於**名稱**，輸入 **AutoCreate**。

   針對 **Namespace (命名空間)**，輸入 **https://redshift.amazon.com/SAML/Attributes**。

   針對 **Source (來源)**，選擇 **Attribute (屬性)**。

   針對 **Source attribute (來源屬性)**，選擇 **“true”**。然後選擇 **Save (儲存)**。

   在此，`123456789012` 是您的 AWS 帳戶，*`AzureSSO`* 是您建立的 IAM 角色，而 *`AzureADProvider`* 是 IAM 提供者。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/setup-identity-provider-azure.html)

1. 在 **App Registration (應用程式註冊) > ***your-application-name*** > Authentication (身分驗證)** 下方，新增 **Mobile And Desktop Application (行動和桌面應用程式)**。將 URL 指定為 http://localhost/redshift。

1. 在 **SAML Signing Certificate (SAML 簽署憑證)** 區段中，選擇 **Download (下載)** 以下載並儲存聯合中繼資料 XML 檔案，以便在建立 IAM SAML 身分提供者時使用。此檔案用於建立單一登入聯合身分。

1. 在 IAM 主控台上建立 IAM SAML 身分提供者。您所提供的中繼資料文件，是您在設定 Azure 企業應用程式時儲存的聯合中繼資料 XML 檔案。如需詳細步驟，請參閱《IAM 使用者指南》**中的[建立和管理 IAM 身分提供者 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 主控台上建立 SAML 2.0 聯合的 IAM 角色。如需詳細步驟，請參閱《IAM 使用者指南》**中的[為 SAML 建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 建立 IAM 政策，您可將其附加至您在 IAM 主控台上為 SAML 2.0 聯合建立的 IAM 角色。如需詳細步驟，請參閱《IAM 使用者指南》**中的[建立 IAM 政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。

   為您的環境修改下列政策 (JSON 格式)：
   + 將叢集 AWS 的區域替換為 `us-west-1`。
   + 將 AWS 您的帳戶替換為 *`123456789012`*。
   + 以您的叢集識別碼 (或 `*` 代表所有叢集) 代替 *`cluster-identifier`*。
   + 以您的資料庫 (或 `*` 代表所有資料庫) 代替 *`dev`*。
   + 以 IAM 角色的唯一識別碼代替 *`AROAJ2UCCR6DPCEXAMPLE`*。
   + 以您的租用戶或公司電子郵件網域代替 `example.com`。
   + 以您計劃為其指派使用者的資料庫群組代替 *`my_dbgroup`*。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentials",
               "Resource": [
                   "arn:aws:redshift:us-west-1:123456789012:dbname:cluster-identifier/dev",
                   "arn:aws:redshift:us-west-1:123456789012:dbuser:cluster-identifier/${redshift:DbUser}",
                   "arn:aws:redshift:us-west-1:123456789012:cluster:cluster-identifier"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:userid": "AROAJ2UCCR6DPCEXAMPLE:${redshift:DbUser}@example.com"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": "redshift:CreateClusterUser",
               "Resource": "arn:aws:redshift:us-west-1:123456789012:dbuser:cluster-identifier/${redshift:DbUser}"
           },
           {
               "Effect": "Allow",
               "Action": "redshift:JoinGroup",
               "Resource": "arn:aws:redshift:us-west-1:123456789012:dbgroup:cluster-identifier/my_dbgroup"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "redshift:DescribeClusters",
                   "iam:ListRoles"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

   此政策會授與許可，如下所示：
   + 第一個區段會授與 `GetClusterCredentials` API 操作的許可，以取得所指定叢集的暫時性登入資料。在此範例中，資源是 `cluster-identifier`，其具有資料庫 *`dev`*、位於帳戶 *`123456789012`*、並位於 AWS 區域 *`us-west-1`*。`${redshift:DbUser}` 子句只允許符合 Azure AD 中指定 `DbUser` 值的使用者連線。
   + 條件子句會強制只有特定使用者會取得臨時登入資料。這些是依據貴公司電子郵件網域中的電子郵件地址所識別的 IAM 帳戶中，具備角色唯一 ID *`AROAJ2UCCR6DPCEXAMPLE`* 所指定角色的使用者。如需唯一 ID 的相關資訊，請參閱《IAM 使用者指南》**中的[唯一 ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)。

     您所設定的 IdP (在此案例中為 Azure AD) 會決定條件子句的撰寫方式。如果您的員工電子郵件是 `johndoe@example.com`，請先將 `${redshift:DbUser}` 設定為符合員工使用者名稱 `johndoe` 的超級欄位。然後將 AWS SAML `RoleSessionName` 欄位設定為符合員工電子郵件 `johndoe@example.com` 的超級欄位，讓此條件發揮作用。當您採取這種方法時，請考慮下列事項：
     + 如果您將 `${redshift:DbUser}` 設定為員工的電子郵件，然後移除範例 JSON 中符合 `RoleSessionName` 的 `@example.com`。
     + 如果您將 `RoleSessionId` 設定為員工的使用者名稱，然後移除範例中符合 `RoleSessionName` 的 `@example.com`。
     + 在範例 JSON 中，`${redshift:DbUser}` 和 `RoleSessionName` 均設定為員工的電子郵件。此範例 JSON 會使用 Amazon Redshift 資料庫使用者名稱搭配 `@example.com`，讓使用者登入以存取叢集。
   + 第二個區段會授與許可，以在指定的叢集中建立 `dbuser` 名稱。在此範例 JSON 中，其會將建立限制於 `${redshift:DbUser}`。
   + 第三個區段會授與許可，以指定使用者可以加入的 `dbgroup`。在此範例 JSON 中，使用者可以加入指定叢集中的 `my_dbgroup` 群組。
   + 第四個區段會授予使用者可對所有資源執行動作的許可。在此範例 JSON 中，它允許使用者呼叫 `redshift:DescribeClusters`以取得叢集資訊，例如叢集端點、 AWS 區域和連接埠。此外，還可允許使用者呼叫 `iam:ListRoles`，以檢查使用者可以擔任哪些角色。

## 步驟 2：設定 JDBC 或 ODBC 以對 Azure 進行身分驗證
<a name="setup-identity-provider-azure-auth"></a>

------
#### [ JDBC ]

**設定 JDBC 以對 Microsoft Azure AD 進行身分驗證**
+ 將資料庫用戶端設定為使用 Azure AD 單一登入，透過 JDBC 連線到您的叢集。

  您可使用任何採用 JDBC 驅動程式的用戶端使用 Azure AD 單一登入進行連線，或使用 Java 之類的語言透過指令碼進行連線。如需安裝和組態資訊，請參閱 [設定適用於 Amazon Redshift 的 JDBC 驅動器 2.x 版的連線](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作為用戶端。當您設定 SQLWorkbench /J 時，您的資料庫 URL 會使用下列格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench /J 作為用戶端，請執行下列步驟：

  1. 啟動 SQL Workbench/J。在**選取連線設定檔**頁面上，新增名為 **AzureAuth** 的**設定檔群組**。

  1. 針對 **Connection Profile (連線設定檔)**，輸入 **Azure**。

  1. 選擇 **Manage Drivers (管理驅動程式)**，然後選擇 **Amazon Redshift**。選擇**程式庫**旁邊的**開啟資料夾**圖示，然後選擇適當的 JDBC .jar 檔案。

  1. 在 **Select Connection Profile (選取連線設定檔)** 頁面上，將資訊新增至連線設定檔，如下所示：
     + 針對 **User (使用者)**，輸入您的 Microsoft Azure 使用者名稱。這是您用於單一登入之 Microsoft Azure 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。
     + 針對 **Password (密碼)**，輸入您的 Microsoft Azure 密碼。
     + 針對 **Drivers (驅動程式)**，選擇 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 針對 **URL**，輸入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 選擇 **Extended Properties (擴充屬性)** 以將其他資訊新增至連線屬性，如下所述。

     針對 Azure AD 單一登入組態新增其他資訊，如下所示：
     + 針對 **plugin\$1name**，輸入 **com.amazon.redshift.plugin.AzureCredentialsProvider**。此值會指定驅動程式使用 Azure AD 單一登入做為身分驗證方法。
     + 針對 **idp\$1tenant**，輸入 ***your-idp-tenant***。僅用於 Microsoft Azure AD。這是您在 Azure AD 上設定的公司租用戶名稱。此值可以是租用戶名稱或租用戶唯一 ID (含連字號)。
     + 針對 **client\$1secret**，輸入 ***your-azure-redshift-application-client-secret***。僅用於 Microsoft Azure AD。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端秘密。這只適用於 com.amazon.redshift.plugin.AzureCredentialsProvider 外掛程式。
     + 針對 **client\$1id**，輸入 ***your-azure-redshift-application-client-id***。僅用於 Microsoft Azure AD。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端 ID (含連字號)。

     針對具有 MFA 的 Azure AD 單一登入組態，將其他資訊新增至連線屬性，如下所示：
     + 針對 **plugin\$1name**，輸入 **com.amazon.redshift.plugin.BrowserAzureCredentialsProvider**。此值會指定驅動程式使用具有 MFA 的 Azure AD 單一登入做為身分驗證方法。
     + 針對 **idp\$1tenant**，輸入 ***your-idp-tenant***。僅用於 Microsoft Azure AD。這是您在 Azure AD 上設定的公司租用戶名稱。此值可以是租用戶名稱或租用戶唯一 ID (含連字號)。
     + 針對 **client\$1id**，輸入 ***your-azure-redshift-application-client-id***。此選項僅用於 Microsoft Azure AD。這是您在設定具有 MFA 的 Azure AD 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端 ID (含連字號)。
     + 針對 **listen\$1port**，輸入 ***your-listen-port***。這是本機伺服器接聽的連接埠。預設值為 7890。
     + 針對 **idp\$1response\$1timeout**，輸入 ***the-number-of-seconds***。這是 IdP 伺服器傳回回應時，在逾時之前等待的秒數。秒數的下限必須為 10。如果建立連線所花的時間超過此臨界值，連線會中止。

------
#### [ ODBC ]

**設定 ODBC 以對 Microsoft Azure AD 進行身分驗證**
+ 將資料庫用戶端設定為使用 Azure AD 單一登入，透過 ODBC 連線到您的叢集。

  Amazon Redshift 會提供適用於 Linux、Windows 和 macOS 作業系統的 ODBC 驅動程式。安裝 ODBC 驅動程式之前，查明 SQL 用戶端工具是 32 位元或 64 位元。安裝符合 SQL 用戶端工具需求的 ODBC 驅動程式。

  在 Windows 上，於 **Amazon Redshift ODBC Driver DSN Setup (Amazon Redshift ODBC 驅動程式 DSN 設定)** 頁面的 **Connection Settings (連線設定)** 之下，輸入下列資訊：
  + 針對 **Data source name (資料來源名稱)**，輸入 ***your-DSN***。這會指定作為 ODBC 設定檔名稱的資料來源名稱。
  + 針對 Azure AD 單一登入組態的**驗證類型**，請選擇 **Identity Provider: Azure AD**。這是 ODBC 驅動程式使用 Azure 單一登入來進行驗證的身分驗證方法。
  + 針對具有 MFA 的 Azure AD 單一登入組態的**驗證類型**，請選擇 **Identity Provider: Browser Azure AD**。這是 ODBC 驅動程式使用具有 MFA 之 Azure 單一登入來進行驗證的身分驗證方法。
  + 針對 **Cluster ID (叢集 ID)**，輸入 ***your-cluster-identifier***。
  + 針對 **Region (區域)**，輸入 ***your-cluster-region***。
  + 針對 **Database (資料庫)**，輸入 ***your-database-name***。
  + 針對 **User (使用者)**，輸入 ***your-azure-username***。這是您用於單一登入之 Microsoft Azure 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。僅在 **Auth Type (驗證類型)** 為**Identity Provider: Azure AD (身分提供者：Azure AD)** 的情況下使用此項目。
  + 針對 **Password (密碼)**，輸入 ***your-azure-password***。僅在 **Auth Type (驗證類型)** 為**Identity Provider: Azure AD (身分提供者：Azure AD)** 的情況下使用此項目。
  + 針對 **IdP Tenant (IdP 租用戶)**，輸入 ***your-idp-tenant***。這是您在 IdP (Azure) 上設定的公司租用戶名稱。此值可以是租用戶名稱或租用戶唯一 ID (含連字號)。
  + 針對 **Azure Client Secret (Azure 用戶端密碼)**，輸入 ***your-azure-redshift-application-client-secret***。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端秘密。
  + 針對 **Azure Client ID (Azure 用戶端 ID)**，輸入 ***your-azure-redshift-application-client-id***。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端 ID (含連字號)。
  + 針對 **Listen Port (接聽連接埠)**，輸入 ***your-listen-port***。這是本機伺服器接聽的預設接聽連接埠。預設值為 7890。這僅適用於瀏覽器 Azure AD 外掛程式。
  + 針對 **Response Timeout (回應逾時)**，輸入 ***the-number-of-seconds***。這是 IdP 伺服器傳回回應時，在逾時之前等待的秒數。秒數的下限必須為 10。如果建立連線所花的時間超過此臨界值，連線會中止。此選項僅適用於瀏覽器 Azure AD 外掛程式。

  在 macOS 和 Linux 上，編輯 `odbc.ini` 檔案，如下所示：
**注意**  
所有項目都不區分大小寫。
  + 針對 **clusterid**，輸入 ***your-cluster-identifier***。這是所建立 Amazon Redshift 叢集的名稱。
  + 針對 **region (區域)**，輸入 ***your-cluster-region***。這是已建立 Amazon Redshift 叢集 AWS 的區域。
  + 針對 **database (資料庫)**，輸入 ***your-database-name***。這是您嘗試在 Amazon Redshift 叢集上存取的資料庫名稱。
  + 針對 **locale**，輸入 **en-us**。這是錯誤訊息的顯示語言。
  + 針對 **iam**，輸入 **1**。此值指定驅動程式使用 IAM 登入資料進行身分驗證。
  + 如需 Azure AD 單一登入組態的 **plugin\$1name**，請輸入 **AzureAD**。這會指定驅動程式使用 Azure 單一登入作為身分驗證方法。
  + 如需具有 MFA 的 Azure AD 單一登入組態的 **plugin\$1name**，請輸入 **BrowserAzureAD**。這會指定驅動程式使用具有 MFA 的 Azure 單一登入做為身分驗證方法。
  + 針對 **uid**，輸入 ***your-azure-username***。這是您用於單一登入之 Microsoft Azure 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。僅在 **plugin\$1name** 為 **AzureAD** 的情況下使用此項目。
  + 針對 **pwd**，輸入 ***your-azure-password***。僅在 **plugin\$1name** 為 **AzureAD** 的情況下使用此項目。
  + 針對 **idp\$1tenant**，輸入 ***your-idp-tenant***。這是您在 IdP (Azure) 上設定的公司租用戶名稱。此值可以是租用戶名稱或租用戶唯一 ID (含連字號)。
  + 針對 **client\$1secret**，輸入 ***your-azure-redshift-application-client-secret***。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端秘密。
  + 針對 **client\$1id**，輸入 ***your-azure-redshift-application-client-id***。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端 ID (含連字號)。
  + 針對 **listen\$1port**，輸入 ***your-listen-port***。這是本機伺服器接聽的連接埠。預設值為 7890。這適用於瀏覽器 Azure AD 外掛程式。
  + 針對 **idp\$1response\$1timeout**，輸入 ***the-number-of-seconds***。這是等待 Azure 回應的指定時間期間 (秒)。此選項適用於瀏覽器 Azure AD 外掛程式。

  在 macOS 和 Linux 上，同時編輯設定檔設定以新增下列匯出：

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

## 疑難排解
<a name="setup-identity-provider-azure-auth"></a>

若要對瀏覽器 Azure AD 外掛程式的問題進行故障診斷，請考慮下列事項：
+ 若要使用瀏覽器 Azure AD 外掛程式，您必須設定請求中指定的回覆 URL，以符合為您的應用程式設定的回覆 URL。瀏覽至 Microsoft Azure 入口網站上的 **Set up Single Sign-On with SAML (使用 SAML 設定單一登入)** 頁面。然後檢查**回覆網址** 是否設定為 http://localhost/redshift/。
+ 如果您收到 IdP 租用戶錯誤，請確認 **IdP 租用戶**名稱與您最初用來設定 Microsoft Azure 中使用中目錄的網域名稱相符。

  在 Windows 上，導覽至 **Amazon Redshift ODBC DSN 設定**頁面的**連線設定**區段。接著檢查您在 IdP (Azure) 上設定的公司租用戶名稱是否與您最初用來在 Microsoft Azure 中設定使用中目錄的網域名稱相符。

  在 macOS 和 Linux 上，找到這個 *odbc.ini* 檔案。接著檢查您在 IdP (Azure) 上設定的公司租用戶名稱是否與您最初用來在 Microsoft Azure 中設定使用中目錄的網域名稱相符。
+ 如果您收到請求中指定的回覆 URL 與為應用程式設定的回覆 URL 不相符的錯誤，請確認**重新導向 URI** 與回覆 URL 相同。

  瀏覽至 Microsoft Azure 入口網站上應用程式的 **App registration (應用程式註冊)** 頁面。然後檢查重新導向 URI 與回覆 URL 是否相符。
+ 如果您收到未經授權的回應：未經授權的錯誤，請確認您已完成**行動裝置和桌面應用程式**組態。

  瀏覽至 Microsoft Azure 入口網站上應用程式的 **App registration (應用程式註冊)** 頁面。然後瀏覽至 **Authentication (驗證)**，並檢查您已將**行動裝置和桌面應用程式**設定為使用 http://localhost/redshift/ 做為重新導向 URI。

# Ping 身分
<a name="setup-identity-provider-ping"></a>

您可以使用 Ping 身分做為身分提供者 (IdP) 來存取您的 Amazon Redshift 叢集。本教學課程說明如何使用 Ping Identity 作為身分提供者 (IdP) 來存取您的 Amazon Redshift 叢集。

## 步驟 1：設定 Ping Identity 和 AWS 您的帳戶彼此信任
<a name="setup-identity-provider-ping-trust"></a>

下列程序說明如何使用 PingOne 入口網站設定信任關係。

**設定 Ping Identity 和 AWS 您的帳戶彼此信任**

1. 建立或使用現有的 Amazon Redshift 叢集，以供 Ping Identity 使用者連線。若要設定連線，則需要此叢集的特定屬性，例如叢集識別碼。如需詳細資訊，請參閱[建立叢集](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 在 PingOne 入口網站上將 Amazon Redshift 新增為新的 SAML 應用程式。如需詳細步驟，請參閱 [Ping 身分文件](https://docs.pingidentity.com/)。

   1. 前往 **My Applications (我的應用程式)**。

   1. 在 **Add Application (新增應用程式)** 下方，選擇 **New SAML Application (新增 SAML 應用程式)**。

   1. 針對 **Application Name (應用程式名稱)**，輸入 **Amazon Redshift**。

   1. 針對 **Protocol Version (通訊協定版本)**，選擇 **SAML v2.0**。

   1. 針對 **Category (類別)**，選擇 ***your-application-category***。

   1. 針對 **Assertion Consumer Service (ACS) (聲明消費者服務 (ACS))**，輸入 ***your-redshift-local-host-url***。這是 SAML 聲明會重新導向至的本機主機與連接埠。

   1. 針對 **Entity ID (實體 ID)**，輸入 `urn:amazon:webservices`。

   1. 針對 **Signing (簽署)**，選擇 **Sign Assertion (簽署聲明)**。

   1. 在 **SSO Attribute Mapping (SSO 屬性映射)** 區段中，建立如下表所示的宣告。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/setup-identity-provider-ping.html)

1. 針對 **Group Access (群組存取)**，視需要設定下列群組存取：
   + **https://aws.amazon.com/SAML/Attributes/Role**
   + **https://aws.amazon.com/SAML/Attributes/RoleSessionName**
   + **https://redshift.amazon.com/SAML/Attributes/AutoCreate**
   + **https://redshift.amazon.com/SAML/Attributes/DbUser**

1. 檢閱您的設定並進行變更 (如有必要)。

1. 使用 **Initiate Single Sign-On (SSO) URL (啟動單一登入 (SSO) URL)** 做為瀏覽器 SAML 外掛程式的登入 URL。

1. 在 IAM 主控台上建立 IAM SAML 身分提供者。您所提供的中繼資料文件，是您在設定 Ping 身分時儲存的聯合中繼資料 XML 檔案。如需詳細步驟，請參閱《IAM 使用者指南》**中的[建立和管理 IAM 身分提供者 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 主控台上建立 SAML 2.0 聯合的 IAM 角色。如需詳細步驟，請參閱《IAM 使用者指南》**中的[為 SAML 建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 建立 IAM 政策，您可將其附加至您在 IAM 主控台上為 SAML 2.0 聯合建立的 IAM 角色。如需詳細步驟，請參閱《IAM 使用者指南》**中的[建立 IAM 政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。如需 Azure AD 範例，請參閱[設定 JDBC 或 ODBC 單一登入身分驗證](setup-azure-ad-identity-provider.md)。

## 步驟 2：設定 JDBC 或 ODBC 以對 Ping Identity 進行身分驗證
<a name="setup-identity-provider-ping-auth"></a>

------
#### [ JDBC ]

**設定 JDBC 以對 Ping 身分進行驗證**
+ 將資料庫用戶端設定為使用 Ping Identity 單一登入，透過 JDBC 連線到您的叢集。

  您可使用任何採用 JDBC 驅動程式的用戶端使用 Ping Identity 單一登入進行連線，或使用 Java 之類的語言透過指令碼進行連線。如需安裝和組態資訊，請參閱 [設定適用於 Amazon Redshift 的 JDBC 驅動器 2.x 版的連線](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作為用戶端。當您設定 SQLWorkbench /J 時，您的資料庫 URL 會使用下列格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench /J 作為用戶端，請執行下列步驟：

  1. 啟動 SQL Workbench/J。在**選取連線設定檔**頁面中，新增**設定檔群組**，例如 **Ping**。

  1. 針對 **Connection Profile (連線設定檔)**，輸入 ***your-connection-profile-name***，例如 **Ping**。

  1. 選擇 **Manage Drivers (管理驅動程式)**，然後選擇 **Amazon Redshift**。選擇**程式庫**旁邊的**開啟資料夾**圖示，然後選擇適當的 JDBC .jar 檔案。

  1. 在 **Select Connection Profile (選取連線設定檔)** 頁面上，將資訊新增至連線設定檔，如下所示：
     + 針對 **User (使用者)**，輸入您的 PingOne 使用者名稱。這是您用於單一登入之 PingOne 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。
     + 針對 **Password (密碼)**，輸入您的 PingOne 密碼。
     + 針對 **Drivers (驅動程式)**，選擇 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 針對 **URL**，輸入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 選擇 **Extended Properties (延伸屬性)**，然後執行下列任一項：
     + 針對 **login\$1url**，輸入 ***your-ping-sso-login-url***。此值會指定 URL 使用單一登入做為登入的身分驗證。
     + 若為 Ping 身分，請針對 **plugin\$1name** 輸入 **com.amazon.redshift.plugin.PingCredentialsProvider**。此值指定驅動程式使用 Ping Identity 單一登入作為身分驗證方法。
     + 若為具有單一登入的 Ping Identity，請針對 **plugin\$1name** 輸入 **com.amazon.redshift.plugin.BrowserSamlCredentialsProvider**。此值會指定驅動程式將 Ping 身分 PingOne 與單一登入搭配使用，以做為身分驗證方法。

------
#### [ ODBC ]

**設定 ODBC 以對 Ping 身分進行身分驗證**
+ 將資料庫用戶端設定為使用 Ping Identity PingOne 單一登入，透過 ODBC 連線到您的叢集。

  Amazon Redshift 會提供適用於 Linux、Windows 和 macOS 作業系統的 ODBC 驅動程式。安裝 ODBC 驅動程式之前，查明 SQL 用戶端工具是 32 位元或 64 位元。安裝符合 SQL 用戶端工具需求的 ODBC 驅動程式。

  在 Windows 上，於 **Amazon Redshift ODBC Driver DSN Setup (Amazon Redshift ODBC 驅動程式 DSN 設定)** 頁面的 **Connection Settings (連線設定)** 之下，輸入下列資訊：
  + 針對 **Data source name (資料來源名稱)**，輸入 ***your-DSN***。這會指定作為 ODBC 設定檔名稱的資料來源名稱。
  + 針對 **Auth Type (驗證類型)**，執行下列其中一項操作：
    + 針對 Ping 身分組態，選擇 **Identity Provider: Ping Federate (身分提供者：Ping 聯合)**。這是 ODBC 驅動程式使用 Ping Identity 單一登入用來驗證的身分驗證方法。
    + 針對具有單一登入的 Ping Identity 組態，選擇**身分提供者：瀏覽器 SAML**。這是 ODBC 驅動程式透過具有單一登入的 Ping Identity 用來進行身分驗證的身分驗證方法。
  + 針對 **Cluster ID (叢集 ID)**，輸入 ***your-cluster-identifier***。
  + 針對 **Region (區域)**，輸入 ***your-cluster-region***。
  + 針對 **Database (資料庫)**，輸入 ***your-database-name***。
  + 針對 **User (使用者)**，輸入 ***your-ping-username***。這是您用於單一登入之 PingOne FS 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。僅在 **Auth Type (驗證類型)** 為 **Identity Provider: PingFederate (身分提供者：PingFederate)** 的情況下使用此項目。
  + 針對 **Password (密碼)**，輸入 ***your-ping-password***。僅在 **Auth Type (驗證類型)** 為 **Identity Provider: PingFederate (身分提供者：PingFederate)** 的情況下使用此項目。
  + 針對 **Listen Port (接聽連接埠)**，輸入 ***your-listen-port***。這是本機伺服器接聽的連接埠。預設值為 7890。這僅適用於瀏覽器 SAML 外掛程式。
  +  針對 **Response Timeout (回應逾時)**，輸入 ***the-number-of-seconds***。這是 IdP 伺服器傳回回應時，在逾時之前等待的秒數。秒數的下限必須為 10。如果建立連線所花的時間超過此臨界值，連線會中止。這僅適用於瀏覽器 SAML 外掛程式。
  + 針對 **Login URL (登入 URL)**，輸入 ***your-login-url***。這僅適用於瀏覽器 SAML 外掛程式。

  在 macOS 和 Linux 上，編輯 `odbc.ini` 檔案，如下所示：
**注意**  
所有項目都不區分大小寫。
  + 針對 **clusterid**，輸入 ***your-cluster-identifier***。這是所建立 Amazon Redshift 叢集的名稱。
  + 針對 **region (區域)**，輸入 ***your-cluster-region***。這是已建立 Amazon Redshift 叢集 AWS 的區域。
  + 針對 **database (資料庫)**，輸入 ***your-database-name***。這是您嘗試在 Amazon Redshift 叢集上存取的資料庫名稱。
  + 針對 **locale**，輸入 **en-us**。這是錯誤訊息的顯示語言。
  + 針對 **iam**，輸入 **1**。此值指定驅動程式使用 IAM 登入資料進行身分驗證。
  + 針對 **plugin\$1name**，執行下列其中一項作業：
    + 針對 Ping 身分組態，輸入 **BrowserSAML**。這是 ODBC 驅動程式用來驗證具有 MFA 之 Ping 身分 SSO 的身分驗證方法。
    + 對於具有單一登入的 Ping Identity 組態，請輸入 **Ping**。這是 ODBC 驅動程式透過具有單一登入的 Ping Identity 用來進行身分驗證的身分驗證方法。
  + 針對 **uid**，輸入 ***your-ping-username***。這是您用於單一登入之 Microsoft Azure 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。僅在 **plugin\$1name** 為 **Ping** 的情況下使用此項目。
  + 針對 **pwd**，輸入 ***your-ping-password***。僅在 **plugin\$1name** 為 **Ping** 的情況下使用此項目。
  + 針對 **login\$1url**，輸入 ***your-login-url***。這是會傳回 SAML 回應的初始單一登入 URL。這僅適用於瀏覽器 SAML 外掛程式。
  + 針對 **idp\$1response\$1timeout**，輸入 ***the-number-of-seconds***。這是等待 PingOne 身分回應的指定時間期間 (秒)。這僅適用於瀏覽器 SAML 外掛程式。
  + 針對 **listen\$1port**，輸入 ***your-listen-port***。這是本機伺服器接聽的連接埠。預設值為 7890。這僅適用於瀏覽器 SAML 外掛程式。

  在 macOS 和 Linux 上，同時編輯設定檔設定以新增下列匯出：

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

# Okta
<a name="setup-identity-provider-okta"></a>

您可以使用 Okta 做為身分提供者 (IdP) 來存取您的 Amazon Redshift 叢集。本教學課程說明如何使用 Okta 作為身分提供者 (IdP) 來存取您的 Amazon Redshift 叢集。

## 步驟 1：設定 Okta 和 AWS 您的帳戶彼此信任
<a name="setup-identity-provider-okta-trust"></a>

下列程序說明如何設定信任關係。

**設定 Okta 和 AWS 您的帳戶彼此信任**

1. 建立或使用現有的 Amazon Redshift 叢集，以供 Okta 使用者連線。若要設定連線，則需要此叢集的特定屬性，例如叢集識別碼。如需詳細資訊，請參閱[建立叢集](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 在 Okta 入口網站上將 Amazon Redshift 新增為新的應用程式。如需詳細步驟，請參閱 [Okta 文件](https://developer.okta.com/docs/)。
   + 選擇 **Add Application (新增應用程式)**。
   + 在 **Add Application (新增應用程式)** 下方，選擇 **Create New App (建立新的應用程式)**。
   + 在 **Create a New Add Application Integration (建立新的新增應用程式整合)** 頁面上，針對 **Platform (平台)** 選擇 **Web**。
   + 針對 **Sign on method (登入方法)**，選擇 **SAML v2.0**。
   + 在 **General Settings (一般設定)** 頁面上，針對 **App name (應用程式名稱)** 輸入 ***your-redshift-saml-sso-name***。這是您的應用程式名稱。
   + 在 **SAML Settings (SAML 設定)** 頁面上，針對 **Single sign on URL (單一登入 URL)**，輸入 ***your-redshift-local-host-url***。這是 SAML 聲明會重新導向至的本機主機與連接埠，例如 `http://localhost:7890/redshift/`。

1. 使用**單一登入 URL** 值做為**收件人 URL** 和**目標 URL**。

1. 針對 **Signing (簽署)**，選擇 **Sign Assertion (簽署聲明)**。

1. 針對**對象 URI (SP 實體 ID)**，針對宣告輸入 **urn:amazon:webservices**，如下表所示。

1. 在**進階設定**區段中，針對 **SAML 發行者 ID** 輸入 ***your-Identity-Provider-Issuer-ID***，您可以在**檢視設定指示**區段中找到此值。

1. 在 **Attribute Statements (屬性陳述式)** 區段中，建立如下表所示的宣告。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/setup-identity-provider-okta.html)

1. 在 **App Embed Link (應用程式內嵌連結)** 區段中，尋找您可以用來做為瀏覽器 SAML 外掛程式登入 URL 的 URL。

1. 在 IAM 主控台上建立 IAM SAML 身分提供者。您所提供的中繼資料文件，是您在設定 Okta 時儲存的聯合中繼資料 XML 檔案。如需詳細步驟，請參閱《IAM 使用者指南》**中的[建立和管理 IAM 身分提供者 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 主控台上建立 SAML 2.0 聯合的 IAM 角色。如需詳細步驟，請參閱《IAM 使用者指南》**中的[為 SAML 建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 建立 IAM 政策，您可將其附加至您在 IAM 主控台上為 SAML 2.0 聯合建立的 IAM 角色。如需詳細步驟，請參閱《IAM 使用者指南》**中的[建立 IAM 政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。如需 Azure AD 範例，請參閱[設定 JDBC 或 ODBC 單一登入身分驗證](setup-azure-ad-identity-provider.md)。

## 步驟 2：設定 JDBC 或 ODBC 以對 Okta 進行身分驗證
<a name="setup-identity-provider-okta-auth"></a>

------
#### [ JDBC ]

**設定 JDBC 以對 Okta 進行身分驗證**
+ 將資料庫用戶端設定為使用 Okta 單一登入，透過 JDBC 連線到您的叢集。

  您可使用任何採用 JDBC 驅動程式的用戶端使用 Okta 單一登入進行連線，或使用 Java 之類的語言透過指令碼進行連線。如需安裝和組態資訊，請參閱 [設定適用於 Amazon Redshift 的 JDBC 驅動器 2.x 版的連線](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作為用戶端。當您設定 SQLWorkbench /J 時，您的資料庫 URL 會使用下列格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench /J 作為用戶端，請執行下列步驟：

  1. 啟動 SQL Workbench/J。在**選取連線設定檔**頁面中，新增**設定檔群組**，例如 **Okta**。

  1. 針對 **Connection Profile (連線設定檔)**，輸入 ***your-connection-profile-name***，例如 **Okta**。

  1. 選擇 **Manage Drivers (管理驅動程式)**，然後選擇 **Amazon Redshift**。選擇**程式庫**旁邊的**開啟資料夾**圖示，然後選擇適當的 JDBC .jar 檔案。

  1. 在 **Select Connection Profile (選取連線設定檔)** 頁面上，將資訊新增至連線設定檔，如下所示：
     + 在 **User** (使用者) 輸入您的 Okta 使用者名稱。這是您用於單一登入之 Okta 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。
     + 在 **Password** (密碼) 輸入您的 Okta 密碼。
     + 針對 **Drivers (驅動程式)**，選擇 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 針對 **URL**，輸入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 選擇 **Extended Properties (延伸屬性)**，然後執行下列任一項：
     + 針對 **login\$1url**，輸入 ***your-okta-sso-login-url***。此值會指定 URL 使用單一登入做為登入 Okta 的身分驗證。
     + 針對 Okta 單一登入，請為 **plugin\$1name** 輸入 **com.amazon.redshift.plugin.OktaCredentialsProvider**。此值指定驅動程式使用 Okta 單一登入作為身分驗證方法。
     + 針對具有 MFA 的 Okta 單一登入，請為 **plugin\$1name** 輸入 **com.amazon.redshift.plugin.BrowserSamlCredentialsProvider**。此值會指定驅動程式使用具有 MFA 的 Okta 單一登入做為身分驗證方法。

------
#### [ ODBC ]

**設定 ODBC 以對 Okta 進行身分驗證**
+ 將資料庫用戶端設定為使用 Okta 單一登入，透過 ODBC 連線到您的叢集。

  Amazon Redshift 會提供適用於 Linux、Windows 和 macOS 作業系統的 ODBC 驅動程式。安裝 ODBC 驅動程式之前，查明 SQL 用戶端工具是 32 位元或 64 位元。安裝符合 SQL 用戶端工具需求的 ODBC 驅動程式。

  在 Windows 上，於 **Amazon Redshift ODBC Driver DSN Setup (Amazon Redshift ODBC 驅動程式 DSN 設定)** 頁面的 **Connection Settings (連線設定)** 之下，輸入下列資訊：
  + 針對 **Data source name (資料來源名稱)**，輸入 ***your-DSN***。這會指定作為 ODBC 設定檔名稱的資料來源名稱。
  + 針對 **Auth Type (驗證類型)**，執行下列其中一項操作：
    + 針對 Okta 單一登入組態，請選擇 **Identity Provider: Okta**。這是 ODBC 驅動程式使用 Okta 單一登入來進行驗證的身分驗證方法。
    + 針對具有 MFA 的 Okta 單一登入組態，請選擇 **Identity Provider: Browser SAML**。這是 ODBC 驅動程式使用具有 MFA 之 Okta 單一登入來進行驗證的身分驗證方法。
  + 針對 **Cluster ID (叢集 ID)**，輸入 ***your-cluster-identifier***。
  + 針對 **Region (區域)**，輸入 ***your-cluster-region***。
  + 針對 **Database (資料庫)**，輸入 ***your-database-name***。
  + 針對 **User (使用者)**，輸入 ***your-okta-username***。這是您用於單一登入之 Okta 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。僅在 **Auth Type (驗證類型)** 為**Identity Provider: Okta (身分提供者：Okta)** 的情況下使用此項目。
  + 針對 **Password (密碼)**，輸入 ***your-okta-password***。僅在 **Auth Type (驗證類型)** 為**Identity Provider: Okta (身分提供者：Okta)** 的情況下使用此項目。

  在 macOS 和 Linux 上，編輯 `odbc.ini` 檔案，如下所示：
**注意**  
所有項目都不區分大小寫。
  + 針對 **clusterid**，輸入 ***your-cluster-identifier***。這是所建立 Amazon Redshift 叢集的名稱。
  + 針對 **region (區域)**，輸入 ***your-cluster-region***。這是已建立 Amazon Redshift 叢集 AWS 的區域。
  + 針對 **database (資料庫)**，輸入 ***your-database-name***。這是您嘗試在 Amazon Redshift 叢集上存取的資料庫名稱。
  + 針對 **locale**，輸入 **en-us**。這是錯誤訊息的顯示語言。
  + 針對 **iam**，輸入 **1**。此值指定驅動程式使用 IAM 登入資料進行身分驗證。
  + 針對 **plugin\$1name**，執行下列其中一項作業：
    + 若為具有 MFA 的 Okta 單一登入組態，請輸入 **BrowserSAML**。這是 ODBC 驅動程式用來驗證具有 MFA 之 Okta 單一登入的身分驗證方法。
    + 針對 Okta 單一登入組態，請輸入 **Okta**。這是 ODBC 驅動程式使用 Okta 單一登入來進行驗證的身分驗證方法。
  + 針對 **uid**，輸入 ***your-okta-username***。這是您用於單一登入之 Okta 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。僅在 **plugin\$1name** 為 **Okta** 的情況下使用此項目。
  + 針對 **pwd**，輸入 ***your-okta-password***。僅在 **plugin\$1name** 為 **Okta** 的情況下使用此項目。
  + 針對 **login\$1url**，輸入 ***your-login-url***。這是會傳回 SAML 回應的初始單一登入 URL。這僅適用於瀏覽器 SAML 外掛程式。
  + 針對 **idp\$1response\$1timeout**，輸入 ***the-number-of-seconds***。這是等待 PingOne 回應的指定時間期間 (秒)。這僅適用於瀏覽器 SAML 外掛程式。
  + 針對 **listen\$1port**，輸入 ***your-listen-port***。這是本機伺服器接聽的連接埠。預設值為 7890。這僅適用於瀏覽器 SAML 外掛程式。

  在 macOS 和 Linux 上，同時編輯設定檔設定以新增下列匯出：

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

# 授權 Amazon Redshift 代表您存取 AWS 服務
<a name="authorizing-redshift-service"></a>

有些 Amazon Redshift 功能需要 Amazon Redshift 代表您存取其他 AWS 服務。例如，[COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html) 和 [UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html) 命令可在使用 Amazon S3 儲存貯體的 Amazon Redshift 叢集上載入或卸載資料。[CREATE EXTERNAL FUNCTION](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html) 命令可以使用純量 AWS Lambda 使用者定義函數 (UDF) 叫用 Lambda 函數。Amazon Redshift Spectrum 可以使用 Amazon Athena 或 中的資料目錄 AWS Glue。若要讓 Amazon Redshift 叢集代替您執行作業，您需為叢集提供安全憑證。提供安全憑證的建議方式為指定 AWS Identity and Access Management (IAM) 角色。對於 COPY 和 UNLOAD，您可以提供臨時憑證。

如果使用者想要與 AWS 外部互動，則需要程式設計存取 AWS 管理主控台。授予程式設計存取權的方式取決於正在存取的使用者類型 AWS。

若要授予使用者程式設計存取權，請選擇下列其中一個選項。


****  

| 哪個使用者需要程式設計存取權？ | 到 | 根據 | 
| --- | --- | --- | 
| IAM | （建議） 使用主控台登入資料做為臨時登入資料，以簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/authorizing-redshift-service.html)  | 
|  人力資源身分 (IAM Identity Center 中管理的使用者)  | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/authorizing-redshift-service.html)  | 
| IAM | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs | 遵循《IAM 使用者指南》中[將臨時登入資料與 AWS 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)搭配使用的指示。 | 
| IAM | (不建議使用)使用長期登入資料來簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/authorizing-redshift-service.html)  | 

接下來，了解如何建立具有適當許可的 IAM 角色來存取其他 AWS 服務。您也需要在執行 Amazon Redshift 命令時將角色與您的叢集相關聯，並指定角色的 Amazon Resource Name (ARN)。如需詳細資訊，請參閱[使用 IAM 角色授權 COPY、UNLOAD、CREATE EXTERNAL FUNCTION 和 CREATE EXTERNAL SCHEMA 操作使用 IAM 角色授權操作](copy-unload-iam-role.md)。

此外，超級使用者可以將 ASSUMEROLE 權限授予特定使用者和群組，以提供 COPY 和 UNLOAD 操作角色的存取權。如需詳細資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)。

## 建立 IAM 角色以允許 Amazon Redshift 叢集存取 AWS 服務


## 建立具有許可的 IAM 角色
<a name="authorizing-redshift-service-creating-an-iam-role"></a>

若要建立 IAM 角色以允許 Amazon Redshift 叢集代表您與其他 AWS 服務進行通訊，請採取下列步驟。本節中使用的值是範例，您可以根據需要選擇值。<a name="create-iam-role-for-aws-services"></a>

**建立 IAM 角色以允許 Amazon Redshift 存取 AWS 服務**

1. 開啟 [ IAM 主控台](https://console.aws.amazon.com/iam/home?#home)。

1. 在導覽窗格中，選擇 **Roles** (角色)。

1. 選擇 **Create Role** (建立角色)。

1. 選擇 **AWS 服務**，然後選擇 **Redshift**。

1. 在**選取您的使用案例**下，選擇**Redshift – 可自訂**，然後選擇**下一步：許可**。**連接許可政策**頁面隨即出現。

1. 舉例來說，若要使用 COPY 存取 Amazon S3，您可以使用 **AmazonS3ReadOnlyAccess** 和 append。若要使用 COPY 或 UNLOAD 存取 Amazon S3，我們建議您建立受管政策，以便相應地限制對所需儲存貯體和字首的存取。對於讀取和寫入操作，我們建議您強制執行最低權限並僅限用於 Amazon Redshift 所需的 Amazon S3 儲存貯體和索引鍵字首。

   如需為 CREATE EXTERNAL FUNCTION 命令調用 Lambda 函數的存取權，請新增 **AWSLambdaRole**。

   對於 Redshift Spectrum，除了 Amazon S3 存取之外，另請新增 **AWSGlueConsoleFullAccess** 或 **AmazonAthenaFullAccess**。

   選擇下**一步：標籤**。

1. **Add tags (新增標籤)** 頁面隨即出現。您可以選擇性地新增標籤。選擇下**一步：檢閱**。

1. 針對 **Role name (角色名稱)**，輸入您的角色名稱，例如 **RedshiftCopyUnload**。選擇建****立角色****。

1. 新角色適用於叢集上使用該角色的所有使用者。若要限制只有特定叢集上的特定使用者或特定區域中的叢集可存取，請編輯角色的信任關係。如需詳細資訊，請參閱[限制對 IAM 角色的存取](authorizing-redshift-service-database-users.md)。

1. 將角色與叢集相關聯。您可在建立叢集或新增角色至現有叢集時將 IAM 角色與叢集相關聯。如需詳細資訊，請參閱[將 IAM 角色與叢集建立關聯](copy-unload-iam-role-associating-with-clusters.md)。
**注意**  
若要限制對特定資料的存取權，請使用授予所需最低權限的 IAM 角色。

# 限制對 IAM 角色的存取
<a name="authorizing-redshift-service-database-users"></a>

根據預設，Amazon Redshift 叢集上可用的 IAM 角色適用於該叢集上所有的使用者。但您可以選擇將 IAM 角色限制為只有特定叢集上的特定 Amazon Redshift 資料庫使用者或特定區域可存取。

若只要允許特定資料庫使用者使用 IAM 角色，請遵循以下步驟。<a name="identify-db-users-for-iam-role"></a>

**識別可存取 IAM 角色的特定資料庫使用者**

1. 識別 Amazon Redshift 叢集中資料庫使用者的 Amazon Resource Name (ARN)。資料庫使用者的 ARN 格式如下：`arn:aws:redshift:region:account-id:dbuser:cluster-name/user-name`。

   對於 Amazon Redshift Serverless，請使用以下 ARN 格式。`arn:aws:redshift:region:account-id:dbuser:serverless-account-id-workgroup-id/user-name`

1. 開啟 [ IAM 主控台](https://console.aws.amazon.com/iam/home?#home)。

1. 在導覽窗格中，選擇 **Roles** (角色)。

1. 選擇您想要限制只有特定 Amazon Redshift 資料庫使用者可存取的 IAM 角色。

1. 選擇 **Trust Relationships (信任關係)** 索引標籤，然後選擇 **Edit Trust Relationship (編輯信任關係)**。允許 Amazon Redshift AWS 代表您存取其他服務的新 IAM 角色具有信任關係，如下所示：

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "redshift.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 新增條件至信任關係的 `sts:AssumeRole` 動作區段，將 `sts:ExternalId` 欄位限制在您所指定的值。包含您想要授予角色存取之各資料庫使用者的 ARN。外部 ID 可以是任何唯一的字串。

   例如，以下的信任關係指定只有 `user1` 區域中 `user2` 叢集上的 `my-cluster` 和 `us-west-2` 資料庫使用者有使用此 IAM 角色的許可。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
     {
       "Effect": "Allow",
       "Principal": { 
         "Service": "redshift.amazonaws.com" 
       },
       "Action": "sts:AssumeRole",
       "Condition": {
         "StringEquals": {
           "sts:ExternalId": [
             "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user1",
             "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user2"
           ]
         }
       }
     }]
   }
   ```

------

1. 選擇 **Update Trust Policy** (更新信任政策)。

# 將 IAM 角色限制為 AWS 區域
<a name="authorizing-redshift-service-regions"></a>

您可以將 IAM 角色限制為只能在特定區域中存取 AWS 。根據預設，Amazon Redshift 的 IAM 角色不受限於任何單一區域。

若要限制區域可使用的 IAM 角色，請遵循以下步驟。<a name="identify-regionsfor-iam-role"></a>

**識別 IAM 角色的允許區域**

1. 在 https：//[https://console.aws.amazon.com/](https://console.aws.amazon.com/) 開啟 [IAM 主控台](https://console.aws.amazon.com/iam/home?#home)。

1. 在導覽窗格中，選擇**角色**。

1. 選擇您想要針對特定區域修改的角色。

1. 選擇 **Trust Relationships (信任關係)** 索引標籤，然後選擇 **Edit Trust Relationship (編輯信任關係)**。允許 Amazon Redshift AWS 代表您存取其他服務的新 IAM 角色具有信任關係，如下所示：

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "redshift.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 搭配您想要允許使用角色的特定區域清單，修改 `Service` 的 `Principal` 清單。`Service` 清單中的各區域必須使用下列格式：`redshift.region.amazonaws.com`。

   例如，以下經編輯後的信任關係僅允許在 `us-east-1` 和 `us-west-2` 區域使用 IAM 角色。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": [
             "redshift.us-east-1.amazonaws.com",
             "redshift.us-west-2.amazonaws.com"
           ]
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 選取 **Update Trust Policy** (更新信任政策)

# 在 Amazon Redshift 中鏈結 IAM 角色
<a name="authorizing-redshift-service-chaining-roles"></a>

當您將角色連接到叢集時，您的叢集可以擔任該角色來 AWS Lambda 代表您存取 Amazon S3 AWS Glue、Amazon Athena 和 。如果連接至叢集的角色無法存取必要資源，您可鏈結其他角色，該角色甚至可以來自其他帳戶。您的叢集接著會暫時擔任鏈結的角色，以存取資料。您也可以用鏈結角色的方式來授予跨帳戶存取。鏈結中的每個角色都會擔任鏈結中的下一個角色，直到叢集擔任鏈結尾端的角色為止。您可建立關聯的 IAM 角色數量上限需符合配額。如需詳細資訊，請參閱 中的配額「Amazon Redshift 存取其他服務的叢集 IAM 角色 AWS 」[Amazon Redshift 物件的配額](amazon-redshift-limits.md#amazon-redshift-limits-quota)。

**注意**  
您必須指定 IAM 角色，鏈結才能正常運作。

例如，假設 A 公司想要存取屬於 B 公司的 Amazon S3 儲存貯體中的資料。A 公司為名為 的 Amazon Redshift 建立 AWS 服務角色，`RoleA`並將其連接到其叢集。B 公司應建立一個名為 `RoleB` 的角色，允許其存取 B 公司儲存貯體內的資料。若要存取 B 公司儲存貯體內的資料，A 公司應使用鏈結 `iam_role` 和 `RoleA` 的`RoleB` 參數執行 COPY 命令。在 COPY 操作期間，`RoleA` 會暫時擔任 `RoleB`，以存取 Amazon S3 儲存貯體。

若要鏈結角色，您應建立角色間的信任關係。擔任其他角色的角色 (例如 `RoleA`) 必須擁有許可政策，允許其擔任下一個鏈結的角色 (例如 `RoleB`)。另一方面，要傳送許可的角色 (`RoleB`) 必須擁有信任政策，允許其將許可傳送給上一個鏈結的角色 (`RoleA`)。如需詳細資訊，請參閱《IAM 使用者指南》中的[使用 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)。

鏈結中的第一個角色必須為連接至叢集的角色。第一個角色，以及擔任鏈結中下一個角色的每個後續角色，必須擁有加入特定陳述式的政策。此陳述式對 `Allow`動作和 `sts:AssumeRole ` 元素中下一個角色的 Amazon Resource Name (ARN) 有 `Resource` 的效果。在我們的範例中，`RoleA` 具有下列許可政策，允許其擔任 AWS 帳戶 `210987654321` 的 `RoleB`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1487639602000",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "arn:aws:iam::111122223333:role/RoleB"        
       }
    ]
}
```

------

傳遞給另一個角色的角色必須與擔任該角色的角色或擁有該角色 AWS 的帳戶建立信任關係。在我們的範例中，`RoleB` 擁有下列與 `RoleA` 建立信任關係的信任政策。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/RoleA"
      }
    }
  ]
}
```

------

下列信任政策會與 、`RoleA` AWS 帳戶 的擁有者建立信任關係`123456789012`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      }
    }      
  ]
}
```

------

**注意**  
若要將角色鏈結授權限制為特定使用者，請定義條件。如需詳細資訊，請參閱[限制對 IAM 角色的存取](authorizing-redshift-service-database-users.md)。

執行 UNLOAD、COPY、CREATE EXTERNAL FUNCTION 或 CREATE EXTERNAL SCHEMA 命令時，您應將逗號分隔的角色 ARN 清單加入到 `iam_role` 參數內，以鏈結角色。以下顯示 `iam_role` 參數中鏈結角色的語法。

```
unload ('select * from venue limit 10') 
to 's3://acmedata/redshift/venue_pipe_'
IAM_ROLE 'arn:aws:iam::<aws-account-id-1>:role/<role-name-1>[,arn:aws:iam::<aws-account-id-2>:role/<role-name-2>][,...]';
```

**注意**  
整個角色鏈結用單引號括住，且不得包含空格。

在下列範例中，`RoleA` 連接到屬於 AWS 帳戶 `123456789012` 的叢集。`RoleB` (屬於帳戶 `210987654321`) 具備許可存取名為 `s3://companyb/redshift/` 的儲存貯體。下列範例鏈結 `RoleA` 和 `RoleB`，將資料 UNLOAD (卸載) 到 s3://companyb/redshift/ 儲存貯體。

```
unload ('select * from venue limit 10') 
to 's3://companyb/redshift/venue_pipe_'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

以下範例使用 COPY 命令載入在前一範例中卸載的資料。

```
copy venue 
from 's3://companyb/redshift/venue_pipe_'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

在以下範例中，CREATE EXTERNAL SCHEMA 使用鏈結的角色來擔任 `RoleB` 角色。

```
create external schema spectrumexample from data catalog 
database 'exampledb' region 'us-west-2' 
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

在以下範例中，CREATE EXTERNAL FUNCTION 使用鏈結的角色來擔任 `RoleB` 角色。

```
create external function lambda_example(varchar)
returns varchar
volatile
lambda 'exampleLambdaFunction'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

# 使用 IAM 角色授權 COPY、UNLOAD、CREATE EXTERNAL FUNCTION 和 CREATE EXTERNAL SCHEMA 操作
<a name="copy-unload-iam-role"></a>

您可以用 [COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html) 命令將資料載入 (或匯入) Amazon Redshift，也能使用 [UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html) 命令從 Amazon Redshift 卸載 (或匯出) 資料。您可以使用 CREATE EXTERNAL FUNCTION 命令來建立從中叫用函數的使用者定義函數 AWS Lambda。

使用 Amazon Redshift Spectrum 時，您可以使用 [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) 命令指定 Amazon S3 儲存貯體的位置 (其中包含您資料)。執行 COPY、UNLOAD 或 CREATE EXTERNAL SCHEMA 命令時，您必須提供安全憑證。這些憑證會授權 Amazon Redshift 叢集對您的目標目的地 (例如 Amazon S3 儲存貯體) 讀取或寫入資料。

執行CREATE EXTERNAL FUNCTION時，您可以使用 IAM 角色參數提供安全憑證。這些登入資料授權您的 Amazon Redshift 叢集從中調用 Lambda 函數 AWS Lambda。提供安全登入資料的偏好方法是指定 AWS Identity and Access Management (IAM) 角色。對於 COPY 和 UNLOAD，您可以提供臨時憑證。如需有關建立 IAM 角色的詳細資訊，請參閱 [授權 Amazon Redshift 代表您存取 AWS 服務](authorizing-redshift-service.md)。

如果使用者想要與 AWS 外部互動，則需要程式設計存取 AWS 管理主控台。授予程式設計存取權的方式取決於正在存取的使用者類型 AWS。

若要授予使用者程式設計存取權，請選擇下列其中一個選項。


****  

| 哪個使用者需要程式設計存取權？ | 到 | 根據 | 
| --- | --- | --- | 
| IAM | （建議） 使用主控台登入資料做為臨時登入資料，以簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/copy-unload-iam-role.html)  | 
|  人力資源身分 (IAM Identity Center 中管理的使用者)  | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/copy-unload-iam-role.html)  | 
| IAM | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs | 遵循《IAM 使用者指南》中[將臨時登入資料與 AWS 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)搭配使用中的指示。 | 
| IAM | (不建議使用)使用長期登入資料來簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/copy-unload-iam-role.html)  | 

使用 IAM 角色的步驟如下：
+ 建立要用於 Amazon Redshift 叢集的 IAM 角色。
+ 將 IAM 角色與叢集相關聯。
+ 呼叫 COPY、UNLOAD、CREATE EXTERNAL SCHEMA 或 CREATE EXTERNAL FUNCTION 命令時，請加入 IAM 角色的 ARN。

# 將 IAM 角色與叢集建立關聯
<a name="copy-unload-iam-role-associating-with-clusters"></a>

建立 IAM 角色來授權 Amazon Redshift 代表您存取其他 AWS 服務後，您必須將該角色與 Amazon Redshift 叢集相關聯。您必須執行這項操作，才能使用該角色來載入或卸載資料。

## 將 IAM 角色與叢集建立關聯所需的許可
<a name="copy-unload-iam-role-associating-with-clusters-perms"></a>

若要將 IAM 角色與叢集相關聯，使用者必須擁有該 IAM 角色的 `iam:PassRole` 許可。管理員可以運用此許可，限制使用者可將哪些 IAM 角色與 Amazon Redshift 叢集相關聯。我們建議的最佳實務是，將許可政策連接到 IAM 角色，然後根據需要將其指派給使用者和群組。如需詳細資訊，請參閱 [Amazon Redshift 中的身分和存取管理](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)。

以下範例顯示可連接到使用者的 IAM 政策，以允許使用者採取下列動作：
+ 取得該使用者帳戶所擁有之所有 Amazon Redshift 叢集的詳細資訊。
+ 將任何三個 IAM 角色與兩個 Amazon Redshift 叢集中的任一個相關聯。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "redshift:DescribeClusters",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                 "redshift:ModifyClusterIamRoles",
                 "redshift:CreateCluster"
            ],
            "Resource": [
                 "arn:aws:redshift:us-east-1:123456789012:cluster:my-redshift-cluster",
                 "arn:aws:redshift:us-east-1:123456789012:cluster:my-second-redshift-cluster"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::123456789012:role/MyRedshiftRole",
                "arn:aws:iam::123456789012:role/SecondRedshiftRole",
                "arn:aws:iam::123456789012:role/ThirdRedshiftRole"
             ]
        }
    ]
}
```

------

使用者取得適當的許可後，該使用者可以將 IAM 角色與 Amazon Redshift 叢集相關聯。然後，IAM 角色就能使用 COPY 或 UNLOAD 命令，或是其他 Amazon Redshift 命令。

如需 IAM 政策的相關資訊，請參閱《IAM 使用者指南》**中的 [IAM 政策概觀](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。

## 管理 IAM 角色與叢集的關聯
<a name="managing-iam-role-association-with-cluster"></a>

您可以在建立叢集時將 IAM 角色與 Amazon Redshift 叢集相關聯。您也可以修改現有的叢集，並新增或移除一或多個 IAM 角色關聯。

請注意以下事項：
+ 您可建立關聯的 IAM 角色數量上限需符合配額。
+ IAM 角色可以與多個 Amazon Redshift 叢集相關聯。
+ 只有在 IAM 角色和叢集都屬於相同 AWS 帳戶時，IAM 角色才能與 Amazon Redshift 叢集建立關聯。

您可在主控台中使用下列程序管理叢集的 IAM 角色關聯。

**管理 IAM 角色關聯**

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

1. 在導覽功能表上，選擇**叢集**，然後選擇您要更新的叢集。

1. 針對 **Actions (動作)**，選擇 **Manage IAM roles (管理 IAM 角色)** 以顯示與叢集相關聯的目前 IAM 角色清單。

1. 在 **Manage IAM roles (管理 IAM 角色)** 頁面上，選擇要新增的可用 IAM 角色，然後選擇 **Add IAM role (新增 IAM 角色)**。

1. 選擇 **Done (完成)** 以儲存變更。

您可以使用 AWS CLI 下列方法，透過 管理叢集的 IAM 角色關聯。

若要在建立叢集時將 IAM 角色與叢集相關聯，請用 `--iam-role-arns` 命令的 `create-cluster` 參數指定 IAM 角色的 Amazon Resource Name (ARN)。您在呼叫 `create-cluster` 命令時可新增的 IAM 角色數量上限需符合配額。

IAM 角色與 Amazon Redshift 叢集的相關聯和取消關聯是非同步的程序。您可呼叫 `describe-clusters` 命令，以取得所有 IAM 角色叢集關聯的狀態。

以下範例將兩個 IAM 角色與名為 `my-redshift-cluster` 的新建立叢集相關聯。

```
aws redshift create-cluster \
    --cluster-identifier "my-redshift-cluster" \
    --node-type "ra3.4xlarge" \
    --number-of-nodes 16 \
    --iam-role-arns "arn:aws:iam::123456789012:role/RedshiftCopyUnload" \
                    "arn:aws:iam::123456789012:role/SecondRedshiftRole"
```

若要將 IAM 角色與現有的 Amazon Redshift 叢集建立關聯，請在 `modify-cluster-iam-roles` 命令的 `--add-iam-roles` 參數中，指定 IAM 角色的 Amazon Resource Name (ARN)。您在呼叫 `modify-cluster-iam-roles` 命令時可新增的 IAM 角色數量上限需符合配額。

以下範例將一個 IAM 角色與名為 `my-redshift-cluster` 的現有叢集相關聯。

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier "my-redshift-cluster" \
    --add-iam-roles "arn:aws:iam::123456789012:role/RedshiftCopyUnload"
```

若要將 IAM 角色與叢集取消關聯，請用 `modify-cluster-iam-roles` 命令的 `--remove-iam-roles` 參數指定 IAM 角色的 ARN。`modify-cluster-iam-roles`您在呼叫 `modify-cluster-iam-roles` 命令時可移除的 IAM 角色數量上限需符合配額。

下列範例會從名為 的叢集中移除`123456789012` AWS 帳戶 IAM 角色的關聯`my-redshift-cluster`。

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier "my-redshift-cluster" \
    --remove-iam-roles "arn:aws:iam::123456789012:role/RedshiftCopyUnload"
```

### 使用 列出叢集的 IAM 角色關聯 AWS CLI
<a name="w2aac37c30c30c35c31b7b9c29"></a>

若要列出與 Amazon Redshift 叢集相關聯的所有 IAM 角色，以及 IAM 角色關聯的狀態，請呼叫 `describe-clusters` 命令。`IamRoles` 清單會傳回與叢集關聯之每個 IAM 角色的 ARN，如下列輸出範例所示。

已經與叢集相關聯的角色狀態會顯示為 `in-sync`。正在與叢集相關聯的角色狀態會顯示為 `adding`。正在與叢集取消關聯的角色狀態會顯示為 `removing`。

```
{
    "Clusters": [
        {
            "ClusterIdentifier": "my-redshift-cluster",
            "NodeType": "ra3.4xlarge",
            "NumberOfNodes": 16,
            "IamRoles": [
                {
                    "IamRoleArn": "arn:aws:iam::123456789012:role/MyRedshiftRole",
                    "IamRoleApplyStatus": "in-sync"
                },
                {
                    "IamRoleArn": "arn:aws:iam::123456789012:role/SecondRedshiftRole",
                    "IamRoleApplyStatus": "in-sync"
                }
            ],
            ...
        },
        {
            "ClusterIdentifier": "my-second-redshift-cluster",
            "NodeType": "ra3.4xlarge",
            "NumberOfNodes": 10,
            "IamRoles": [
                {
                    "IamRoleArn": "arn:aws:iam::123456789012:role/MyRedshiftRole",
                    "IamRoleApplyStatus": "in-sync"
                },
                {
                    "IamRoleArn": "arn:aws:iam::123456789012:role/SecondRedshiftRole",
                    "IamRoleApplyStatus": "in-sync"
                },
                {
                    "IamRoleArn": "arn:aws:iam::123456789012:role/ThirdRedshiftRole",
                    "IamRoleApplyStatus": "in-sync"
                }
            ],
            ...
        }
    ]
}
```

如需使用 的詳細資訊 AWS CLI，請參閱 *[AWS CLI 使用者指南](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)*。

# 建立 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"
            }
        ],
        ...
    }
}
```

# 使用聯合身分來管理 Amazon Redshift 對本機資源和 Amazon Redshift Spectrum 外部資料表的存取。
<a name="authorization-fas-spectrum"></a>

在 中使用聯合身分 AWS 搭配 提供的登入資料，`GetDatabaseCredentials`可以簡化對本機資料和外部資料的授權和存取。在本教學課程中，我們會示範如何透過 AWS 聯合身分提供對 資源的存取權，而不是使用特定的 IAM 角色。

目前，為了讓使用者能夠存取 Amazon S3 中的外部資料，您可以使用許可政策中定義的許可來建立 IAM 角色。然後，具有連接角色的使用者可以存取外部資料。這是可行的，但如果您想提供精細的規則，例如讓特定使用者無法使用特定的欄，您可能必須對外部結構描述進行其他設定。

使用 提供的登入資料，聯合身分`GetDatabaseCredentials`可以使用更易於指定 AWS Glue 和變更的精細 IAM 規則來提供對 和 Redshift Spectrum 資源的存取。這可讓您更輕鬆地應用符合業務規則的存取權限。

使用聯合憑證的好處如下：
+ 您無需為 Redshift Spectrum 管理叢集連接的 IAM 角色。
+ 叢集管理員可以建立具有不同 IAM 內容的消費者可存取的外部結構描述。舉例來說，這對於在資料表上執行欄篩選非常有用，其中不同的消費者查詢相同的外部結構描述，並在傳回的記錄中取得不同的欄位。
+ 您可以使用具有 IAM 許可的使用者來查詢 Amazon Redshift，而不是僅使用某個角色。

## 準備身分以使用聯合身分登入
<a name="authorization-fas-spectrum-getting-started-iam"></a>

使用聯合身分登入之前，您必須先執行幾個初步步驟。這些說明假設您有一個現有的 Redshift Spectrum 外部結構描述，該結構描述參考儲存在 Amazon S3 儲存貯體中的資料檔案，且該儲存貯體與您的 Amazon Redshift 叢集或 Amazon Redshift Serverless 資料倉儲位於同一帳戶中。

1. 建立 IAM 身分。這可以是使用者或 IAM 角色。使用 IAM 支援的任何名稱。

1. 將許可政策連接至身分。指定下列任一項：
   + `redshift:GetClusterCredentialsWithIAM` (適用於 Amazon Redshift 佈建的叢集)
   + `redshift-serverless:GetCredentials` (適用於 Amazon Redshift Serverless)

   您可以使用 IAM 主控台透過政策編輯器新增許可。

   IAM 身分還需要許可才能存取外部資料。直接新增下列 AWS 受管政策，以授予 Amazon S3 的存取權：
   + `AmazonS3ReadOnlyAccess`
   + `AWSGlueConsoleFullAccess`

    如果您使用 AWS Glue 準備外部資料，則需要最後一個受管政策。如需授予 Amazon Redshift Spectrum 存取權的步驟相關資訊，請參閱[為 Amazon Redshift 建立 IAM 角色](https://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum-create-role.html)，這是 Amazon Redshift 和 Redshift Spectrum 入門指南的一部分。它顯示了新增 IAM 政策以存取 Redshift Spectrum 的步驟。

1. 設定您的 SQL 用戶端以連接到 Amazon Redshift。使用 Amazon Redshift JDBC 驅動器，並將使用者的憑證新增至工具的憑證屬性。像 SQL Workbench/J 這樣的用戶端非常適合此目的。設定下列用戶端連線延伸屬性：
   + *AccessKeyID* – 您的存取金鑰識別碼。
   + *SecretAccessKey* – 您的私密存取金鑰。(如果不使用加密，請注意傳輸金鑰的安全風險。) 
   + *SessionToken* – IAM 角色的一組暫時憑證。
   + *groupFederation* - 如果您要為已佈建的叢集設定聯合身分，則設定為 `true`。如果您使用的是 Amazon Redshift Serverless，請勿設定此參數。
   + *LogLevel* - 整數日誌層級值。這是選用的。

1. 將 URL 設定為在 Amazon Redshift 或 Amazon Redshift Serverless 主控台中找到的 JDBC 端點。將您的 URL 結構描述替換為 *jdbc:redshift:iam:* 並使用以下格式：
   + Amazon Redshift 佈建叢集的格式：`jdbc:redshift:iam://<cluster_id>.<unique_suffix>.<region>.redshift.amazonaws.com:<port>/<database_name>`

     範例：`jdbc:redshift:iam://test1.12345abcdefg.us-east-1.redshift.amazonaws.com:5439/dev`
   + Amazon Redshift Serverless 的格式：`jdbc:redshift:iam://<workgroup-name>.<account-number>.<aws-region>.redshift-serverless.amazonaws.com:5439:<port>/<database_name>`

     範例：`jdbc:redshift:iam://default.123456789012.us-east-1.redshift-serverless.amazonaws.com:5439/dev`

   在您第一次使用 IAM 身分連線到資料庫之後，Amazon Redshift 會自動建立具有相同名稱的 Amazon Redshift 身分，並為使用者加上 `IAM:` 字首或為 IAM 角色加上 `IAMR:` 字首。本主題中的其餘步驟顯示使用者的範例。

   如果未自動建立 Redshift 使用者，您可以使用管理員帳戶執行 `CREATE USER` 陳述式，並以格式 `IAM:<user name>` 指定使用者名稱來建立一個使用者。

1.  身為 Amazon Redshift 叢集管理員，請授予 Redshift 使用者存取外部結構描述所需的許可。

   ```
   GRANT ALL ON SCHEMA my_schema to "IAM:my_user";
   ```

   若要授予 Redshift 使用者在外部結構描述中建立資料表的能力，他們必須是結構描述擁有者。例如：

   ```
   ALTER SCHEMA my_schema owner to "IAM:my_user";
   ```

1. 若要驗證組態，請在授予許可之後，使用 SQL 用戶端以使用者身分執行查詢。此查詢範例會從外部資料表擷取資料。

   ```
   SELECT * FROM my_schema.my_table;
   ```

## 開始將身分和授權傳播到 Redshift Spectrum
<a name="authorization-fas-spectrum-getting-started"></a>

若要傳遞聯合身分來查詢外部資料表，請將 `SESSION` 設定為 `CREATE EXTERNAL SCHEMA` 的 `IAM_ROLE` 查詢參數值。下列步驟說明如何設定及運用 `SESSION` 來授權對外部結構描述進行查詢。

1. 建立本機資料表和外部資料表。使用 AWS Glue 編目的外部資料表可以用於此目的。

1. 使用您的 IAM 身分連接到 Amazon Redshift。如上一節所述，當身分連接到 Amazon Redshift 時，便會建立一個 Redshift 資料庫使用者。如果先前不存在，則會建立使用者。如果使用者是新使用者，管理員必須授予他們在 Amazon Redshift 中執行任務 (例如查詢和建立資料表) 的許可。

1. 使用您的管理員帳戶連接到 Redshift。執行命令以使用 `SESSION` 值建立外部結構描述。

   ```
   create external schema spectrum_schema from data catalog
   database '<my_external_database>' 
   region '<my_region>'
   iam_role 'SESSION'
   catalog_id '<my_catalog_id>';
   ```

   請注意，在這種情況下會設定 `catalog_id`。這是與功能一起新增的設定，因為 `SESSION` 會取代特定角色。

   在此範例中，查詢中的值模擬真實值的顯示方式。

   ```
   create external schema spectrum_schema from data catalog
   database 'spectrum_db' 
   region 'us-east-1'
   iam_role 'SESSION'
   catalog_id '123456789012'
   ```

   在此情況下`catalog_id`的值是 AWS 您的帳戶 ID。

1. 使用您在步驟 2 中連接的 IAM 身分，執行查詢以存取外部資料。例如：

   ```
   select * from spectrum_schema.table1;
   ```

   在這種情況下，`table1` 可以是 Amazon S3 儲存貯體中檔案中的 JSON 格式資料。

1. 如果您已經擁有使用叢集連接 IAM 角色的外部結構描述 (指向外部資料庫或結構描述)，則可以取代現有結構描述並使用這些步驟中詳述的聯合身分，或建立新的結構描述。

`SESSION` 表示聯合身分憑證用於查詢外部結構描述。當您使用 `SESSION` 查詢參數時，請務必設定 `catalog_id`。這是必要的，因為它指向用於結構描述的資料目錄。先前，`catalog_id` 是從指派給 `iam_role` 的值中擷取。當您以這種方式設定身分識別和授權傳播時，例如，透過使用聯合憑證查詢外部結構描述，就不需要透過 IAM 角色進行授權。

### 使用須知
<a name="authorization-fas-access-usage-notes"></a>

一個常見的連線錯誤如下：*IAM 擷取臨時憑證時發生錯誤：無法使用提供的解組器取消封送異常回應*。此錯誤是具有舊版 JDBC 驅動器的結果。聯合身分所需的最低驅動程式版本為 2.1.0.9。您可以從[下載 Amazon Redshift JDBC 驅動器 2.x 版](https://docs.aws.amazon.com/redshift/latest/mgmt/jdbc20-download-driver.html)取得 JDBC 驅動器。

### 其他資源
<a name="authorization-fas-spectrum-resources"></a>

這些連結提供管理外部資料存取權的其他資訊。
+ 您仍然可以使用 IAM 角色存取 Redshift Spectrum 資料。如需詳細資訊，請參閱[授權 Amazon Redshift 代表您存取 AWS 服務](authorizing-redshift-service.md)。
+ 當您使用 AWS Lake Formation管理對外部資料表的存取權時，您可以使用 Redshift Spectrum 搭配聯合 IAM 身分來查詢。您不再需要為 Redshift Spectrum 管理叢集連接的 IAM 角色，就能查詢向 AWS Lake Formation註冊的資料。如需詳細資訊，請參閱[將 AWS Lake Formation 與 Amazon Redshift Spectrum 搭配使用](https://docs.aws.amazon.com/lake-formation/latest/dg/RSPC-lf.html)。