

 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="iam-redshift-user-mgmt"></a>

的雲端安全性 AWS 是最高優先順序。身為 AWS 客戶，您可以受益於資料中心和網路架構，這些架構專為滿足最安全敏感組織的需求而建置。

安全性是 AWS 與您之間的共同責任。[‬共同責任模型‭](https://aws.amazon.com/compliance/shared-responsibility-model/)‬ 將此描述為雲端*‬的‭*‬安全和雲端*‬內*‬的安全：
+ **雲端的安全性** – AWS 負責保護在 AWS Cloud 中執行 AWS 服務的基礎設施。 AWS 也為您提供可安全使用的服務。第三方稽核人員定期檢測及驗證安全的效率也是我們 [AWS 合規計劃](https://aws.amazon.com/compliance/programs/)的一部分。若要了解適用於 Amazon Redshift 的合規計畫，請參閱[合規計畫範圍內的AWS 服務](https://aws.amazon.com/compliance/services-in-scope/)。
+ **雲端的安全性** – 您的責任取決於您使用 AWS 的服務。您也必須對其他因素負責，包括資料的敏感度、您組織的需求和適用的法律及法規。

對 Amazon Redshift 資源的存取會以四個層級控制：
+ **叢集管理 –** 建立、設定和刪除叢集的功能是由授予與您 AWS 安全登入資料相關聯之使用者或帳戶的許可所控制。具有適當許可的使用者可以使用 AWS 管理主控台、 AWS Command Line Interface (CLI) 或 Amazon Redshift 應用程式介面 (API) 來管理其叢集。此存取透過使用 IAM 政策來管理。
**重要**  
Amazon Redshift 集合了用於管理許可、身分和安全存取的最佳實務。建議您在開始使用 Amazon Redshift 時熟悉這些內容。如需詳細資訊，請參閱[Amazon Redshift 中的身分和存取管理](redshift-iam-authentication-access-control.md)。
+ **叢集連線 –** Amazon Redshift 安全群組會以無類別網域間路由 (CIDR) 格式指定授權連線至 Amazon Redshift 叢集的 AWS 執行個體。如需建立 Amazon Redshift、Amazon EC2 和 Amazon VPC 安全群組以及將它們與叢集建立關聯的詳細資訊，請參閱 [Amazon Redshift 安全群組](security-network-isolation.md#working-with-security-groups)。
+  **資料庫存取 —** 存取資料庫物件 (例如資料表和檢視) 的功能是透過 Amazon Redshift 資料庫中的資料庫使用者帳戶控制。使用者只能存取其使用者帳戶已獲存取許可之資料庫中的資源。您可以透過使用 [CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html)、[CREATE GROUP](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_GROUP.html)、[GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html) 和 [REVOKE](https://docs.aws.amazon.com/redshift/latest/dg/r_REVOKE.html) SQL 陳述式來建立這些 Amazon Redshift 使用者帳戶並管理許可。如需詳細資訊，請參閱《Amazon Redshift 資料庫開發人員指南》中的[管理資料庫安全](https://docs.aws.amazon.com/redshift/latest/dg/r_Database_objects.html)。
+ **暫時資料庫登入資料和單一登入 —** 除了使用 SQL 命令 (例如 CREATE USER 和 ALTER USER) 來建立和管理資料庫使用者，您可以使用自訂 Amazon Redshift JDBC 或 ODBC 驅動程式 (可在資料庫登入程序中管理資料庫使用者的建立程序和暫時密碼)，來設定 SQL 用戶端。這些驅動程式會管理隨著資料庫登入的一部分建立使用者資料庫和暫時密碼的程序。

  該驅動程式會根據 AWS Identity and Access Management (IAM) 身分驗證來驗證資料庫使用者。如果您已在 外部管理使用者身分 AWS，您可以使用 SAML 2.0 相容身分提供者 (IdP) 來管理對 Amazon Redshift 資源的存取。您可以使用 IAM 角色來設定 IdP AWS ，並允許聯合身分使用者產生臨時資料庫登入資料並登入 Amazon Redshift 資料庫。如需詳細資訊，請參閱[使用 IAM 身分驗證產生資料庫使用者憑證](generating-user-credentials.md)。

本文件有助於您了解如何在使用 Amazon Redshift 時套用共同責任模型。下列主題說明如何將 Amazon Redshift 設定為符合您的安全與合規目標。您也會了解如何使用其他 AWS 服務來協助您監控和保護 Amazon Redshift 資源。

**Topics**
+ [Amazon Redshift 中的資料保護](security-data-protection.md)
+ [Amazon Redshift 中的身分和存取管理](redshift-iam-authentication-access-control.md)
+ [使用 管理 Amazon Redshift 管理員密碼 AWS Secrets Manager](redshift-secrets-manager-integration.md)
+ [在 Amazon Redshift 中記錄和監控](security-incident-response.md)
+ [Amazon Redshift 的合規驗證](security-compliance.md)
+ [Amazon Redshift 中的復原能力](security-disaster-recovery-resiliency.md)
+ [Amazon Redshift 的基礎設施安全](security-network-isolation.md)
+ [Amazon Redshift 中的組態與漏洞分析](security-vulnerability-analysis-and-management.md)

# Amazon Redshift 中的資料保護
<a name="security-data-protection"></a>

AWS[共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)適用於 Amazon Redshift 中的資料保護。如此模型所述， AWS負責保護執行所有 的全域基礎設施AWS 雲端。您負責維護在此基礎設施上託管內容的控制權。您也同時負責所使用 AWS 服務 的安全組態和管理任務。如需資料隱私權的詳細資訊，請參閱[資料隱私權常見問答集](https://aws.amazon.com/compliance/data-privacy-faq/)。如需有關歐洲資料保護的相關資訊，請參閱*AWS安全性部落格*上的[AWS共同責任模型和 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 部落格文章。

基於資料保護目的，我們建議您保護AWS 帳戶登入資料，並使用 AWS IAM Identity Center或 AWS Identity and Access Management(IAM) 設定個別使用者。如此一來，每個使用者都只會獲得授與完成其任務所必須的許可。我們也建議您採用下列方式保護資料：
+ 每個帳戶均要使用多重要素驗證 (MFA)。
+ 使用 SSL/TLS 與 AWS資源通訊。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 使用 設定 API 和使用者活動記錄AWS CloudTrail。如需有關使用 CloudTrail 追蹤擷取AWS活動的資訊，請參閱*AWS CloudTrail《 使用者指南*》中的[使用 CloudTrail 追蹤](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用AWS加密解決方案，以及其中的所有預設安全控制AWS 服務。
+ 使用進階的受管安全服務 (例如 Amazon Macie)，協助探索和保護儲存在 Amazon S3 的敏感資料。
+ 如果您在AWS透過命令列界面或 API 存取 時需要 FIPS 140-3 驗證的密碼編譯模組，請使用 FIPS 端點。如需有關 FIPS 和 FIPS 端點的更多相關資訊，請參閱[聯邦資訊處理標準 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)。

我們強烈建議您絕對不要將客戶的電子郵件地址等機密或敏感資訊，放在標籤或自由格式的文字欄位中，例如**名稱**欄位。這包括當您使用 Amazon Redshift 或使用主控台、API AWS CLI或 AWSSDKs的其他AWS 服務 時。您在標籤或自由格式文字欄位中輸入的任何資料都可能用於計費或診斷日誌。如果您提供外部伺服器的 URL，我們強烈建議請勿在驗證您對該伺服器請求的 URL 中包含憑證資訊。

# 資料加密
<a name="security-encryption"></a>

資料保護是指保護往返 Amazon Redshift 的傳輸中資料，以及儲存在 Amazon Redshift 資料中心內磁碟的靜態資料。您可以透過 SSL 或用戶端加密來保護傳輸中的資料。在 Amazon Redshift 中保護靜態資料有下列選項。
+ **使用伺服器端加密** — 您可以請求 Amazon Redshift 來加密資料，再將它儲存至其資料中心內的磁碟，然後在您下載時解密物件。
+ **使用用戶端加密** — 您可以在用戶端加密資料，再將加密的資料上傳至 Amazon Redshift。在這種情況下，您可以管理加密程序、加密金鑰和相關工具。

# 靜態加密
<a name="security-server-side-encryption"></a>

伺服器端加密與靜態資料加密有關；亦即，Amazon Redshift 會選擇性地在將資料寫入資料中心時將其加密，以及在您存取該資料時將其解密。只要您有驗證請求並具備存取許可，存取加密資料或未加密資料的方式並無不同。

Amazon Redshift 會透過加密保護靜態資料。您可以選擇性地使用進階加密標準 AES-256 來保護儲存在叢集內磁碟上的所有資料和 Amazon S3 中的所有備份。

若要管理用於加密和解密 Amazon Redshift 資源的金鑰，您可以使用 [AWS Key Management Service(AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/).AWS KMScombines 安全、高可用性的硬體和軟體，以提供針對雲端擴展的金鑰管理系統。使用 AWS KMS，您可以建立加密金鑰並定義控制如何使用這些金鑰的政策。 AWS KMS支援AWS CloudTrail，因此您可以稽核金鑰使用情況，以確認金鑰是否適當使用。您可以搭配 Amazon Redshift 和支援的AWS 服務使用AWS KMS金鑰。如需 支援的 服務清單AWS KMS，請參閱《 *AWS Key Management Service開發人員指南*》中的[AWS服務使用方式AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services.html)。

如果您選擇使用 管理佈建叢集或無伺服器命名空間的管理員密碼AWS Secrets Manager，Amazon Redshift 也會接受使用 AWS Secrets Manager來加密憑證的額外 AWSKMS 金鑰。此額外金鑰可以是自動產生的金鑰AWS Secrets Manager，或您提供的自訂金鑰。

Amazon Redshift 查詢編輯器 v2 會安全地儲存輸入到查詢編輯器中的資訊，如下所示：
+ 用來加密查詢編輯器 v2 資料的 KMS 金鑰 Amazon Resource Name (ARN)。
+ 資料庫連線資訊。
+ 檔案和資料夾的名稱與內容。

Amazon Redshift 查詢編輯器 v2 會搭配您的 KMS 金鑰或服務帳戶 KMS 金鑰，使用區塊層級加密來加密資訊。Amazon Redshift 資料的加密會由 Amazon Redshift 叢集屬性來控制。

**Topics**
+ [Amazon Redshift 資料庫加密](working-with-db-encryption.md)

# Amazon Redshift 資料庫加密
<a name="working-with-db-encryption"></a>

在 Amazon Redshift 中，您的資料庫預設為加密狀態，以保護靜態資料。資料庫加密適用於叢集及其快照。

您可以修改未加密的叢集以使用 AWS Key Management Service (AWS KMS) 加密。若要這樣做，您可以使用 AWS擁有的金鑰或客戶受管金鑰。當您修改叢集以啟用 AWS KMS 加密時，Amazon Redshift 會自動將您的資料遷移至新的加密叢集。從加密叢集建立的快照也會加密。您也可以修改叢集和變更 **Encrypt database (加密資料庫)** 選項，將加密的叢集遷移到未加密的叢集。如需詳細資訊，請參閱[變更叢集加密](changing-cluster-encryption.md)。

雖然您仍然可以在建立叢集後，將預設加密的叢集轉換為未加密，但建議您讓包含敏感資料的叢集保持加密狀態。此外，根據控管您的資料的指導方針或規範，可能會要求您使用加密。例如，支付卡產業資料安全標準 (PCI DSS)、沙賓法案 (SOX)、健康保險流通與責任法案 (HIPAA)和其他這類法規可提供用於處理特定資料類型的指導方針。

Amazon Redshift 使用加密金鑰的階層來加密資料庫。您可以使用 AWS Key Management Service (AWS KMS) 或硬體安全模組 (HSM) 來管理此階層中最上層的加密金鑰。Amazon Redshift 用於加密的程序會因您管理金鑰的方式而有所不同。Amazon Redshift 會自動與 整合 AWS KMS ，但不與 HSM 整合。使用 HSM 時，您必須使用用戶端和伺服器憑證來設定 Amazon Redshift 與您的 HSM 之間的信任連線。

**重要**  
 當您停用客戶自管 KMS 金鑰時，Amazon Redshift 可能會失去佈建叢集或無伺服器命名空間的 KMS 金鑰存取權。在上述情況下，Amazon Redshift 會備份 Amazon Redshift 資料倉儲，並使其進入 `inaccessible-kms-key` 狀態，為期 14 天。如果您在該期間內還原 KMS 金鑰，Amazon Redshift 將會還原存取權，且倉儲將會正常運作。如果 14 天期間結束後 KMS 金鑰仍未還原，Amazon Redshift 將會刪除資料倉儲。倉儲處於 `inaccessible-kms-key` 狀態時具有下列特性：  
 您無法在資料倉儲上執行任何查詢。
 如果資料倉儲是資料共用的生產者倉儲，則您無法從取用者倉儲對其執行資料共用查詢。
 您無法建立跨區域快照副本。
如需還原已停用 KMS 金鑰的相關資訊，請參閱《AWS Key Management Service 開發人員指南》**中的[啟用和停用金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html)。如果倉儲的 KMS 金鑰已刪除，您可以在 `inaccessible-kms-key` 狀態的倉儲遭到刪除之前，使用備份建立新的資料倉儲。

## 可提升效能與可用性的加密程序改善
<a name="resize-classic-encryption"></a>

### 使用 RA3 節點進行加密
<a name="resize-classic-encryption-ra3"></a>

 RA3 節點加密程序的更新讓使用體驗變得更好了。加密程序進行期間，讀取和寫入查詢在執行時的效能比較不會因加密而受到影響了。此外，加密完成的速度也快了許多。已更新的程序步驟包括還原操作，以及將叢集中繼資料遷移至目標叢集的操作。改善的體驗適用於加密類型 AWS KMS，例如 。當您擁有 PB 規模的資料磁碟區時，操作已從幾週減少為幾天。

在加密叢集之前，如果您打算繼續執行資料庫工作負載，則可以透過新增具有彈性調整大小功能的節點來改善效能並加快程序的進行速度。加密進行期間中，您無法使用彈性調整大小功能，因此請在加密之前執行此操作。請注意，新增節點一般會導致成本上升。

### 使用其他節點類型進行加密
<a name="resize-classic-encryption-ds2"></a>

如同 RA3 節點一樣，當您使用 DC2 節點來加密叢集時，您無法執行寫入查詢。您只能執行讀取查詢。

### 使用 RA3 節點進行加密的使用須知
<a name="resize-classic-encryption-usage"></a>

下列洞察和資源可協助您為加密做好準備並監控加密程序。
+ **在啟動加密後執行查詢** — 啟動加密後，可在大約 15 分鐘內執行讀取和寫入操作。整個加密程序所需的完成時間取決於叢集上的資料量和工作負載層級。
+ **加密需要多久時間？** — 加密資料所需的時間取決於幾個因素：這些因素包括執行的工作負載數量、使用的運算資源、節點數目及節點類型。建議您一開始先在測試環境中執行加密。根據經驗，如果您要處理數 PB 的資料磁碟區，則可能需要 1 至 3 天才能完成加密。
+ **如何得知加密已完成？** - 在您啟用加密後，第一個快照完成即確認加密已完成。
+ **復原加密** — 如果您需要復原加密操作，最好的方法是從在啟動加密前所製作的最新備份進行還原。您必須重新套用在上次備份後所做過的任何新更新 (更新/刪除/插入)。
+ **執行資料表還原** — 請注意，您無法將資料表從未加密的叢集還原至已加密的叢集。
+ **加密單一節點叢集** — 加密單一節點叢集有效能限制。其所需時間比加密多節點叢集還要久。
+ **在加密後建立備份** — 當您加密叢集中的資料時，要等到整個叢集完成加密後，才會建立備份。此操作所需的時間會有所不同。視叢集大小而定，備份所需的時間從幾小時到幾天不等。加密完成後，會延遲一段時間才能建立備份。

  請注意，由於在加密程序進行期間會發生備份與還原操作，因此使用 `BACKUP NO` 所建立的任何資料表或具體化視觀表不會保留下來。如需詳細資訊，請參閱 [CREATE TABLE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html) 或 [CREATE MATERIALIZED VIEW](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-create-sql-command.html)。

**Topics**
+ [可提升效能與可用性的加密程序改善](#resize-classic-encryption)
+ [使用 加密 AWS KMS](#working-with-aws-kms)
+ [使用硬體安全模組進行加密](#working-with-HSM)
+ [加密金鑰輪換](#working-with-key-rotation)
+ [變更叢集加密](changing-cluster-encryption.md)
+ [遷移至 HSM 加密的叢集](migrating-to-an-encrypted-cluster.md)
+ [輪換加密金鑰](manage-key-rotation-console.md)

## 使用 加密 AWS KMS
<a name="working-with-aws-kms"></a>

當您選擇使用 Amazon Redshift AWS KMS 進行金鑰管理時，會有四層加密金鑰階層。這些金鑰按層次順序列出為根金鑰、叢集加密金鑰 (CEK)、資料庫加密金鑰 (DEK) 和資料加密金鑰。

當您啟動叢集時，Amazon Redshift 會傳回 Amazon Redshift AWS KMS keys 或 AWS 您的帳戶已建立或具有使用許可的 清單 AWS KMS。您可以選取 KMS 金鑰作為您在加密階層中的根金鑰。

根據預設，Amazon Redshift 會選取自動產生的 AWS擁有金鑰，做為 AWS 您的帳戶在 Amazon Redshift 中使用的根金鑰。

如果您不想使用預設金鑰，您必須在 中分別擁有 （或建立） 客戶受管 KMS 金鑰， AWS KMS 才能在 Amazon Redshift 中啟動叢集。客戶受管金鑰可為您提供更多彈性，包含建立、輪換、停用、定義存取控制，以及稽核用於協助保護您資料之加密金鑰的能力。如需建立 KMS 金鑰的相關資訊，請參閱《AWS Key Management Service 開發人員指南》**中的[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

如果您想要使用來自另一個 AWS 帳戶的 AWS KMS 金鑰，您必須擁有使用金鑰的許可，並在 Amazon Redshift 中指定其 Amazon Resource Name (ARN)。如需有關 中金鑰存取的詳細資訊 AWS KMS，請參閱《 *AWS Key Management Service 開發人員指南*》中的[控制對金鑰的存取](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)。

選擇根金鑰後，Amazon Redshift 會請求 AWS KMS 產生資料金鑰，並使用選取的根金鑰對其進行加密。此資料金鑰在 Amazon Redshift 中用作 CEK。 AWS KMS 會將加密的 CEK 匯出至 Amazon Redshift，其中，它會與 KMS 金鑰的授予和 CEK 的加密內容一併儲存在與叢集分開的網路磁碟內。只有加密的 CEK 會匯出至 Amazon Redshift；KMS 金鑰會保留在 AWS KMS中。Amazon Redshift 也會透過安全通道將加密的 CEK 傳遞到叢集，並將其載入到記憶體。然後，Amazon Redshift 會呼叫 AWS KMS 來解密 CEK，並將解密的 CEK 載入記憶體。如需授予、加密內容和其他 AWS KMS相關概念的詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)。

接下來，Amazon Redshift 會隨機產生金鑰來用作 DEK，並在叢集中將它載入記憶體。解密的 CEK 可用來加密 DEK，然後透過安全管道從 Amazon Redshift 要在內部儲存的叢集，傳遞至與叢集不同網路中的磁碟。如同 CEK，加密和解密版本的 DEK 會在叢集中載入記憶體。接著使用 DEK 的解密版本來加密為資料庫中每個資料區塊隨機產生的個別加密金鑰。

當叢集重新啟動時，Amazon Redshift 會從內部存放且加密的 CEK 和 DEK 版本開始，將它們重新載入記憶體，然後呼叫 AWS KMS 再次使用 KMS 金鑰解密 CEK，以便將其載入記憶體。然後使用解密的 CEK 來再次解密，而解密的 DEK 會載入記憶體，並視需要用來加密和解密資料區塊金鑰。

如需建立使用 AWS KMS 金鑰加密的 Amazon Redshift 叢集的詳細資訊，請參閱 [建立叢集](create-cluster.md)。

### 將 AWS KMS加密的快照複製到另一個快照 AWS 區域
<a name="configure-snapshot-copy-grant"></a>

AWS KMS 金鑰專屬於 AWS 區域。如果您想要啟用將 Amazon Redshift 快照從加密來源叢集複製到另一個叢集 AWS 區域，但想要將自己的 AWS KMS 金鑰用於目的地中的快照，則需要設定授予 Amazon Redshift 在目的地的帳戶中使用根金鑰 AWS 區域。此授權可讓 Amazon Redshift 在目的地 AWS 區域中加密快照。如果您希望目的地中的快照使用 AWS 區域擁有的金鑰加密，則不需要在目的地中設定任何授予 AWS 區域。如需跨區域快照複製的相關資訊，請參閱[將快照複製到另一個 AWS 區域](cross-region-snapshot-copy.md)。

**注意**  
如果您啟用從加密叢集複製快照並 AWS KMS 用於根金鑰，則無法重新命名叢集，因為叢集名稱是加密內容的一部分。如果您必須重新命名叢集，您可以停用來源區域中快照的複製 AWS 、重新命名叢集，然後再次設定和啟用快照的複製。

為複製快照設定授予的程序如下所示。

1. 在目的地 AWS 區域中，執行下列動作來建立快照複製授予：
   +  如果您還沒有要使用的 AWS KMS 金鑰，請建立一個。如需建立 AWS KMS 金鑰的詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
   + 指定快照複製授予的名稱。此名稱在 AWS 帳戶的該 AWS 區域中必須是唯一的。
   + 指定您要為其建立授予的 AWS KMS 金鑰 ID。如果您不指定金鑰 ID，該授予即會套用至您的預設金鑰。

1. 在來源 AWS 區域中，啟用快照的複製，並指定您在目的地 AWS 區域中建立的快照複製授予名稱。

只有在您使用 AWS CLI、Amazon Redshift API 或 SDKs 啟用快照複製時，才需要上述程序。如果是使用主控台，在啟用跨區域快照複製時，Amazon Redshift 會提供適當的工作流程來設定授予。如需使用主控台來為 AWS KMS加密叢集設定跨區域快照複製的相關資訊，請參閱[為 AWS KMS加密的叢集設定跨區域快照複本](xregioncopy-kms-encrypted-snapshot.md)。

在將快照複製到目的地 AWS 區域之前，Amazon Redshift 會使用來源區域中的根金鑰解密快照， AWS 並使用 Amazon Redshift 內部管理的隨機產生 RSA 金鑰暫時重新加密快照。然後，Amazon Redshift 透過安全通道將快照複製到目的地 AWS 區域，使用內部受管 RSA 金鑰解密快照，然後使用目的地區域中的根金鑰重新加密快照 AWS 。

## 使用硬體安全模組進行加密
<a name="working-with-HSM"></a>

如果您不使用 AWS KMS 進行金鑰管理，您可以使用硬體安全模組 (HSM) 搭配 Amazon Redshift 進行金鑰管理。

**重要**  
DC2 和 RA3 節點類型不支援 HSM 加密。

HSM 為可針對金鑰產生和管理提供直接控制的裝置。其會透過將金鑰管理與應用程式資料庫層分開以提供更好的安全性。Amazon Redshift 支援 AWS CloudHSM Classic 進行金鑰管理。當您使用 HSM 管理加密金鑰而非 時，加密程序會有所不同 AWS KMS。

**重要**  
Amazon Redshift 僅支援 AWS CloudHSM Classic。我們不支援較新的 AWS CloudHSM 服務。  
AWS CloudHSM Classic 已關閉給新客戶。如需詳細資訊，請參閱 [CloudHSM Classic Pricing](https://aws.amazon.com/cloudhsm/pricing-classic/)。並非所有 AWS 區域都提供 AWS CloudHSM Classic。如需可用 AWS 區域的詳細資訊，請參閱[AWS 區域表](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。

設定您的叢集使用 HSM 時，Amazon Redshift 會將請求傳送至 HSM 以產生和儲存要用作 CEK 的金鑰。不過，與之不同 AWS KMS，HSM 不會將 CEK 匯出至 Amazon Redshift。Amazon Redshift 會改為在叢集中隨機產生 DEK，並將它傳遞至 HSM 供 CEK 加密。HSM 會將已加密的 DEK 傳回給 Amazon Redshift，在此處使用隨機產生的內部根金鑰進行進一步加密，然後儲存在與叢集位於不同網路的磁碟內。Amazon Redshift 也會將 DEK 的解密版本載入到叢集的記憶體中，以便使用 DEK 來加密和解密資料區塊的個別金鑰。

如果叢集重新開機，Amazon Redshift 會使用內部根金鑰來解密內部儲存、雙重加密的 DEK，以讓在內部儲存的 DEK 回到 CEK 加密的狀態。然後將 CEK 加密的 DEK 傳遞至要解密的 HSM，並傳回 Amazon Redshift，在該處可將它再次載入記憶體，以搭配個別資料區塊金鑰使用。

### 設定 Amazon Redshift 與 HSM 之間的信任連線
<a name="configure-trusted-connection"></a>

選擇使用 HSM 管理您的叢集金鑰時，您必須在 Amazon Redshift 與您的 HSM 之間設定信任的網路連結。要這麼做需要對用戶端和伺服器憑證進行組態。信任的連線可用來於加密和解密操作期間，在 HSM 與 Amazon Redshift 之間傳遞加密金鑰。

Amazon Redshift 會從隨機產生的私有和公有金鑰對建立公有用戶端憑證。這些憑證會經過加密並在內部儲存。您可以在您的 HSM 中下載和註冊公有用戶端憑證，並將它指派至適用的 HSM 分割區。

您可以提供 Amazon Redshift 相關的 HSM IP 地址、HSM 分割區名稱、HSM 分割區密碼和公有 HSM 伺服器憑證 (其使用內部根金鑰進行加密)。Amazon Redshift 會完成組態程序，並驗證它可連線至 HSM。如果它無法連線，則會讓叢集處於 INCOMPATIBLE\$1HSM 狀態，並且不會建立叢集。在此情況下，您必須刪除不完整的叢集並重試。

**重要**  
修改您的叢集以使用不同的 HSM 分割區時，Amazon Redshift 會驗證它可以連線至新的分割區，但無法驗證存在有效的加密金鑰。使用新的分割區之前，您必須將金鑰複寫至新的分割區。如果叢集已重新啟動，並且 Amazon Redshift 找不到有效的金鑰，重新啟動會失敗。如需詳細資訊，請參閱[跨 HSM 複寫金鑰](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cli-clone-hapg.html)。

初始組態之後，如果 Amazon Redshift 無法連線至 HSM，即會記錄事件。如需這些事件的相關資訊，請參閱 [Amazon Redshift 事件通知](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-event-notifications.html)。

## 加密金鑰輪換
<a name="working-with-key-rotation"></a>

在 Amazon Redshift 中，您可以輪換加密的叢集的加密金鑰。當您啟動金鑰輪換程序時，Amazon Redshift 會為指定叢集以及叢集的任何自動或手動快照輪換 CEK。Amazon Redshift 也會為指定叢集輪換 DEK，但是當快照儲存在 Amazon Simple Storage Service (Amazon S3) 內並使用現有 DEK 進行加密時，則無法輪換快照的 DEK。

在輪換進行中時，叢集會處於 ROTATING\$1KEYS 狀態直到完成為止，完成時叢集會回到 AVAILABLE 狀態。Amazon Redshift 會在金鑰輪換程序期間處理解密和重新加密。

**注意**  
您無法為沒有來源叢集的快照輪換金鑰。刪除叢集之前，請考慮其快照是否仰賴於金鑰輪換。

由於叢集金鑰輪換程序期間暫時無法使用，您應該只在您的資料需求或當您懷疑金鑰可能已遭到盜用時才輪換金鑰。做為最佳實務，您應該檢閱儲存的資料類型，並計畫輪換加密該資料之金鑰的頻率。輪換金鑰的頻率因對於資料安全性的公司政策，以及有關敏感資料和法規合規的任何產業標準而有所不同。確保您的計畫可平衡您的叢集對於可用性考量的安全性需求。

如需輪換金鑰的詳細資訊，請參閱 [輪換加密金鑰](manage-key-rotation-console.md)。

# 變更叢集加密
<a name="changing-cluster-encryption"></a>

您可以使用 AWS擁有的金鑰或客戶受管金鑰，將未加密的叢集修改為使用 AWS Key Management Service (AWS KMS) 加密。當您修改叢集以啟用 AWS KMS 加密時，Amazon Redshift 會自動將資料遷移到新的加密叢集。您也可以使用 修改叢集 AWS CLI，但不能使用 ，將加密的叢集遷移至未加密的叢集 AWS 管理主控台。

在遷移操作期間，只能以唯讀模式使用您的叢集，而且叢集的狀態會顯示為 **resizing (調整大小)**。

如果您的叢集設定為啟用跨AWS 區域快照複本，您必須在變更加密之前停用它。如需詳細資訊，請參閱[將快照複製到另一個 AWS 區域](cross-region-snapshot-copy.md)及[為 AWS KMS加密的叢集設定跨區域快照複本](xregioncopy-kms-encrypted-snapshot.md)。您無法經由修改叢集來啟用硬體安全模組 (HSM) 加密。反之，請建立新的 HSM 加密叢集，然後將您的資料遷移至新叢集。如需詳細資訊，請參閱[遷移至 HSM 加密的叢集](migrating-to-an-encrypted-cluster.md)。

------
#### [ Amazon Redshift console ]

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

1. 在導覽功能表上，選擇**叢集**，然後選擇您要修改加密的叢集。

1. 選擇 **Properties (屬性)**。

1. 在**資料庫組態**區段中，選擇**編輯**，然後選擇**編輯加密**。

1. 選擇其中一個加密選項，然後選擇**儲存變更**。

------
#### [ AWS CLI ]

若要修改您未加密的叢集以使用 AWS KMS，請執行 `modify-cluster` CLI 命令並指定 `–-encrypted`，如下所示。在預設情況下會使用預設 KMS 金鑰。若要指定客戶受管金鑰，請包含 `--kms-key-id` 選項。

```
aws redshift modify-cluster --cluster-identifier <value> --encrypted --kms-key-id <value>
```

若要從叢集移除加密，請執行下列 CLI 命令。

```
aws redshift modify-cluster --cluster-identifier <value> --no-encrypted
```

------

# 遷移至 HSM 加密的叢集
<a name="migrating-to-an-encrypted-cluster"></a>

若要將未加密的叢集遷移至使用硬體安全模組 (HSM) 加密的叢集，請建立新的加密叢集，然後將您的資料移至新叢集。您無法經由修改叢集來遷移 HSM 加密的叢集。

若要從未加密的叢集遷移至 HSM 加密的叢集，請先從現有的來源叢集卸載您的資料。然後在新的目標叢集中，使用所選的加密設定將資料重新載入。如需啟動加密的叢集的相關資訊，請參閱[Amazon Redshift 資料庫加密](working-with-db-encryption.md)。

遷移程序期間，您的來源叢集可供唯讀查詢，直到最後一個步驟為止。最後一個步驟是重新命名目標和來源叢集，這會切換端點，使得所有流量會路由至新的目標叢集。在您重新命名後重新開機之前，目標叢集將無法使用。在資料傳送時，請暫停來源叢集上的所有資料載入和其他寫入操作。<a name="prepare-for-migration"></a>

**準備遷移**

1. 識別與 Amazon Redshift 互動的所有相依系統，例如商業智慧 (BI) 工具和擷取、轉換和載入 (ETL) 系統。

1. 識別驗證查詢以測試遷移。

   例如，您可以使用下列查詢來尋找使用者定義資料表的數目。

   ```
   select count(*)
   from pg_table_def
   where schemaname != 'pg_catalog';
   ```

   下列查詢會傳回所有使用者定義資料表的清單，和每個資料表中資料列的數目。

   ```
   select "table", tbl_rows
   from svv_table_info;
   ```

1. 選擇適合遷移的好時機。若要了解叢集使用率何時最低，請監控叢集指標，例如 CPU 使用率和資料庫連線數目。如需詳細資訊，請參閱[檢視叢集效能資料](performance-metrics-perf.md)。

1. 捨棄未使用的資料表。

   若要建立資料表的清單和查詢每個資料表的次數，請執行下列查詢。

   ```
   select database,
   schema,
   table_id,
   "table",
   round(size::float/(1024*1024)::float,2) as size,
   sortkey1,
   nvl(s.num_qs,0) num_qs
   from svv_table_info t
   left join (select tbl,
   perm_table_name,
   count(distinct query) num_qs
   from stl_scan s
   where s.userid > 1
   and   s.perm_table_name not in ('Internal worktable','S3')
   group by tbl,
   perm_table_name) s on s.tbl = t.table_id
   where t."schema" not in ('pg_internal');
   ```

1. 啟動新的加密叢集。

   對目標叢集使用與來源叢集相同的連線埠號碼。如需啟動加密的叢集的相關資訊，請參閱[Amazon Redshift 資料庫加密](working-with-db-encryption.md)。

1. 設定卸載和載入程序。

   您可以使用 [Amazon Redshift Unload/Copy Utility](https://github.com/awslabs/amazon-redshift-utils/tree/master/src/UnloadCopyUtility) 來幫助您在叢集之間遷移資料。該公用程式會從來源叢集匯出資料至 Amazon S3 上的位置。資料會使用 加密 AWS KMS。然後該公用程式會將資料自動匯入至目標。您可以在遷移完成之後，選擇性地使用該公用程式來清理 Amazon S3。

1. 執行測試以驗證您的程序並估計寫入操作必須暫停的時間長度。

   在卸載和載入操作期間，透過暫停資料載入和其他寫入操作來保有資料一致性。使用您的其中一個最大的資料表，執行卸載和載入程序來幫助您估計時間。

1. 建立資料庫物件，例如結構描述、檢視和資料表。為了協助您產生必要的資料定義語言 (DDL) 陳述式，您可以在 AWS GitHub 儲存庫的 [AdminViews](https://github.com/awslabs/amazon-redshift-utils/tree/master/src/AdminViews) 中使用指令碼。<a name="migration-your-cluster"></a>

**遷移叢集**

1. 停止來源叢集上的所有 ETL 處理。

   若要確認程序中沒有寫入操作，請使用 Amazon Redshift 管理主控台來監控寫入 IOPS。如需詳細資訊，請參閱[檢視叢集效能資料](performance-metrics-perf.md)。

1. 執行您稍早識別的驗證查詢，以在遷移之前收集未加密的來源叢集的相關資訊。

1. (選用) 建立一個工作負載管理 (WLM) 佇列以使用來源和目標叢集中最大可用的資源。例如，建立名為 `data_migrate` 的佇列，並設定具有 95% 記憶體和並行 4 的佇列。如需詳細資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的[根據使用者群組和查詢群組將查詢路由至佇列](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-wlm-routing-queries-to-queues.html)。

1. 使用 `data_migrate` 佇列，執行 UnloadCopyUtility。

   使用 Amazon Redshift 主控台監控 UNLOAD 和 COPY 程序。

1. 再次執行驗證查詢，並驗證該結果符合來源叢集的結果。

1. 重新命名您的來源和目標叢集以交換端點。為了避免干擾，請在上班時間以外執行此操作。

1. 驗證您可以使用您的所有 SQL 用戶端 (例如 ETL 和報表工具) 連線至目標叢集。

1. 關閉未加密的來源叢集。

# 輪換加密金鑰
<a name="manage-key-rotation-console"></a>

您可以使用下列程序，藉由使用 Amazon Redshift 主控台來輪換加密金鑰。

**輪換叢集的加密金鑰**

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

1. 在導覽功能表上，選擇**叢集**，然後選擇您要更新加密金鑰的叢集。

1. 針對 **Actions (動作)**，選擇 **Rotate encryption (輪換加密)** 以顯示 **Rotate encryption keys (輪換加密金鑰)** 頁面。

1. 在 **Rotate encryption keys (輪換加密金鑰)** 頁面上，選擇 **Rotate encryption keys (輪換加密金鑰)**。

# 傳輸中加密
<a name="security-encryption-in-transit"></a>

您可以設定您的環境以保護傳輸中的資料的機密性及完整性。

以下詳細資訊適用於在 Amazon Redshift 叢集與 SQL 用戶端之間透過 JDBC/ODBC 加密傳輸中的資料：
+ 您可以從 SQL 用戶端工具透過 Java 資料庫連線 (JDBC) 和開放式資料庫連線 (ODBC) 來連線至 Amazon Redshift 叢集。
+ Amazon Redshift 支援 Secure Sockets Layer (SSL) 連線，可將資料和伺服器憑證加密，以驗證用戶端所連線的伺服器憑證。用戶端會連線到 Amazon Redshift 叢集的領導節點。如需詳細資訊，請參閱[設定連線的安全選項](connecting-ssl-support.md)。
+ 為了支援 SSL 連線，Amazon Redshift 會在每個叢集上建立並安裝 AWS Certificate Manager(ACM) 發行的憑證。如需詳細資訊，請參閱[將 SSL 連線轉換為使用 ACM 憑證](connecting-transitioning-to-acm-certs.md)。
+ 為了保護您的AWS雲端內傳輸中的資料，Amazon Redshift 使用硬體加速 SSL 與 Amazon S3 或 Amazon DynamoDB 通訊，以進行 COPY、UNLOAD、備份和還原操作。

以下詳細資訊適用於在 Amazon Redshift 叢集與 Amazon S3 或 DynamoDB 之間加密傳輸中的資料：
+ Amazon Redshift 使用硬體加速的 SSL 來與 Amazon S3 或 DynamoDB 通訊，以進行 COPY、UNLOAD、備份和還原操作。
+ Redshift Spectrum 使用由 (KMS) 管理的帳戶預設金鑰，支援 Amazon S3 伺服器端加密 AWS Key Management Service(SSE)。
+ 您可以使用 Amazon S3 和 加密 Amazon Redshift 負載AWS KMS。如需詳細資訊，請參閱[使用 Amazon S3 加密 Amazon Redshift Loads 和AWS KMS](https://aws.amazon.com/blogs/big-data/encrypt-your-amazon-redshift-loads-with-amazon-s3-and-aws-kms/) 。

下列詳細資訊適用於在 AWS CLISDK 或 API 用戶端與 Amazon Redshift 端點之間傳輸中的資料的加密和簽署：
+ Amazon Redshift 會提供 HTTPS 端點用於加密傳輸中資料。
+ 為了保護向 Amazon Redshift 發出之 API 請求的完整性，必須由發起人簽署 API 呼叫。根據 Signature 第 4 版簽署程序 (Sigv4)，呼叫由 X.509 憑證或客戶的AWS私密存取金鑰進行簽署。如需詳細資訊，請參閱 *AWS 一般參考* 中的 [Signature 第 4 版簽署程序](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。
+ 使用 AWS CLI或其中一個 AWSSDKs 向 提出請求AWS。這些工具會自動使用您設定工具時指定的存取金鑰，替您簽署請求。

以下詳細資訊適用於在 Amazon Redshift 叢集與 Amazon Redshift 查詢編輯器 v2 之間加密傳輸中的資料：
+ 資料會透過 TLS 加密的通道在查詢編輯器 v2 和 Amazon Redshift 叢集之間傳輸。

# Amazon Redshift 的 VPC 加密控制
<a name="security-vpc-encryption-controls"></a>

Amazon Redshift 支援 [ VPC 加密控制](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-encryption-controls.html)，這項安全功能可協助您針對區域內 VPCs內的所有流量，強制執行傳輸中加密。本文件說明如何搭配 Amazon Redshift 叢集和無伺服器工作群組使用 VPC 加密控制。

VPC 加密控制提供集中式控制，以監控和強制執行 VPCs內傳輸中的加密。在強制執行模式中啟用時，可確保所有網路流量都會在硬體層 （使用 AWSNitro System) 或應用程式層 （使用 TLS/SSL) 加密。

Amazon Redshift 與 VPC 加密控制整合，協助您符合醫療保健 (HIPAA)、政府 (FedRAMP) 和金融 (PCI DSS) 等產業的合規要求。

## VPC 加密控制如何與 Amazon Redshift 搭配使用
<a name="security-vpc-encryption-controls-sypnosis"></a>

VPC 加密控制以兩種模式運作：
+ 監控模式：提供流量加密狀態的可見性，並協助識別允許未加密流量的資源。
+ 強制模式：防止建立或使用允許 VPC 內未加密流量的資源。所有流量都必須在硬體層 (Nitro 型執行個體） 或應用程式層 (TLS/SSL) 加密。

## 使用 VPC 加密控制的需求
<a name="security-vpc-encryption-controls-requirements"></a>

**執行個體類型需求**

Amazon Redshift 需要 Nitro 型執行個體來支援 VPC 加密控制。所有現代 Redshift 執行個體類型都支援必要的加密功能。

**SSL/TLS 要求**

在強制執行模式下啟用 VPC 加密控制時，必須將 require\$1ssl 參數設定為 true，且無法停用。這可確保所有用戶端連線都使用加密的 TLS 連線。

## 遷移至 VPC 加密控制項
<a name="security-vpc-encryption-controls-migration"></a>

**對於現有叢集和工作群組**

您無法在包含現有 Redshift 叢集或無伺服器工作群組的 VPC 上，以強制執行模式啟用 VPC 加密控制。如果您有現有的叢集或工作群組，請參閱下列步驟以使用加密控制：

1. 建立現有叢集或命名空間的快照

1. 使用強制執行模式中啟用的 VPC 加密控制建立新的 VPC

1. 使用下列其中一個操作，從快照還原至新的 VPC：
   + 對於佈建的叢集：使用 `restore-from-cluster-snapshot`操作
   + 對於無伺服器：在您的工作群組上使用 `restore-from-snapshot`操作

**在已啟用加密控制的 VPC 中建立新的叢集或工作群組時，需將 require\$1ssl 參數設為 true。**

Amazon Redshift 需要 Nitro 型執行個體來支援 VPC 加密控制。所有現代 Redshift 執行個體類型都支援必要的加密功能。

**SSL/TLS 要求**

在強制執行模式下啟用 VPC 加密控制時，必須將 require\$1ssl 參數設定為 true，且無法停用。這可確保所有用戶端連線都使用加密的 TLS 連線。

## 考量和限制
<a name="security-vpc-encryption-controls-limitations"></a>

在 Amazon Redshift 中使用 VPC 加密控制時，請考慮下列事項：

**VPC 狀態限制**
+ 當 VPC 加密控制處於 `enforce-in-progress` 狀態時，會封鎖叢集和工作群組建立
+ 您必須等到 VPC 達到 `enforce` 模式，才能建立新的資源

**SSL 組態**
+ require\$1ssl 參數：必須一律`true`適用於在加密強制執行 VPCs 中建立的叢集和工作群組
+ 在加密強制執行的 VPC 中建立叢集或工作群組後，就`require_ssl`無法在其生命週期內停用

**區域可用性**

在下列區域中，Amazon Redshift Serverless 的強制執行模式中無法使用此功能：
+ 南美洲 (聖保羅)
+ 歐洲 (蘇黎世)

# 金鑰管理
<a name="security-key-management"></a>

您可以設定您的環境以使用金鑰保護資料：
+ Amazon Redshift 會自動與 key management.AWS KMSuses 信封加密的 AWS Key Management Service(AWS KMS) 整合。如需詳細資訊，請參閱[信封加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)。
+ 在 中管理加密金鑰時AWS KMS，Amazon Redshift 會使用以金鑰為基礎的四層架構進行加密。架構包含隨機產生的 AES-256 資料加密金鑰、資料庫金鑰、叢集金鑰和根金鑰。如需詳細資訊，請參閱 [Amazon Redshift 的使用方式AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-redshift.html)。
+ 您可以在 AWS KMS 中建立您自己的客戶受管金鑰。如需詳細資訊，請參閱[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
+ 您也可以為新的 匯入自己的金鑰材料AWS KMS keys。如需詳細資訊，請參閱在 [AWS Key Management Service(AWS KMS) 中匯入金鑰材料](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html)。
+ Amazon Redshift 支援在外部硬體安全模組 (HSM) 中加密金鑰的管理。HSM 可以是內部部署，也可以是 AWS CloudHSM。使用 HSM 時，您必須使用用戶端和伺服器憑證來設定 Amazon Redshift 與您的 HSM 之間的信任連線。Amazon Redshift 僅支援 AWS CloudHSMClassic 進行金鑰管理。如需詳細資訊，請參閱[使用硬體安全模組進行加密](working-with-db-encryption.md#working-with-HSM)。如需 的資訊AWS CloudHSM，請參閱[什麼是AWS CloudHSM？](https://docs.aws.amazon.com/cloudhsm/latest/userguide/introduction.html) 
+ 您可以輪換加密的叢集的加密金鑰。如需詳細資訊，請參閱[加密金鑰輪換](working-with-db-encryption.md#working-with-key-rotation)。

# 資料字符化
<a name="data-tokenization"></a>

字符化**是出於資料安全目的，用不透明值替換實際值的程序。對安全敏感的應用程式會使用字符化，以字符替換敏感資料 (例如，個人身分識別資訊 (PII) 或受保護的醫療資訊 (PHI)) 來降低安全風險。去字符化**會為授權使用者使用適當的安全政策將字符逆轉為實際值。

若要與第三方字符化服務整合，您可以使用您透過 [AWS Lambda](https://aws.amazon.com/lambda/) 建立的 Amazon Redshift 使用者定義函數 (UDF)。如需詳細資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的 [Lambda 使用者定義的函數](https://docs.aws.amazon.com/redshift/latest/dg/udf-creating-a-lambda-sql-udf.html)。例如，請參閱 [Protegrity](https://www.protegrity.com/how-we-work/partners/aws-data-protection)。

Amazon Redshift 會將字符化請求傳送至透過 REST API 或預先定義的端點所存取的字符化伺服器。有兩個以上免費的 Lambda 函數會處理字符化和去字符化請求。對於此處理，您可以使用第三方字符化提供者所提供的 Lambda 函數。您也可以使用在 Amazon Redshift 中註冊為 Lambda UDF 的 Lambda 函數。

例如，假設您提交的查詢會在資料欄叫用字符化或去字符化 UDF。Amazon Redshift 叢集會對適用的引數資料列進行多工緩衝處理，並以批次方式將這些資料列平行傳送至 Lambda 函數。資料會在 Amazon Redshift 運算節點與 Lambda 之間另外以用戶端無法存取的隔離網路連線進行傳輸。Lambda 函數會將資料傳遞至字符化伺服器端點。字符化伺服器會根據需要對資料進行字符化或去字符化，並將其傳回。然後，Lambda 函數會將結果傳輸到 Amazon Redshift 叢集以進行進一步處理 (如有必要)，然後傳回查詢結果。

# 在 Amazon Redshift 中路由網際網路流量
<a name="network-isolation"></a>

您可以在 Amazon Redshift 中透過已知和私有網路路由來路由流量。本頁涵蓋如何在企業網路上以及相同 AWS 區域 中的資源之間路由流量。

若要在 Amazon Redshift 與企業網路上的用戶端和應用程式之間路由流量：
+ 在虛擬私有雲端 (VPC) 和公司網路之間設定私有連線。透過網際網路設定 IPsec VPN 連線或使用 Direct Connect連線建立私有實體連線。 Direct Connect可讓您直接從內部部署網路建立私有虛擬介面到您的 Amazon VPC，在您的網路和 VPC 之間提供私有、高頻寬的網路連線。您可使用多個虛擬界面，甚至能與多個 VPC 建立私有連線，同時保持網路隔離性。如需詳細資訊，請參閱[什麼是 AWS Site-to-Site VPN？](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)和[什麼是 Direct Connect？](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 

若要在 VPC 中的 Amazon Redshift 叢集與相同AWS區域中的 Amazon S3 儲存貯體之間路由流量：
+ 設定 Amazon S3 私有 VPC 端點，以私密地存取來自 ETL 載入或卸載的 Amazon S3 資料。如需詳細資訊，請參閱 [Amazon S3 的端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html)。
+ 為 Amazon Redshift 叢集啟用「增強型 VPC 路由」，指定目標 Amazon S3 VPC 端點。然後 Amazon Redshift COPY、UNLOAD 或 CREATE LIBRARY 命令產生的流量會透過私有端點路由。如需詳細資訊，請參閱[開啟增強型 VPC 路由](enhanced-vpc-enabling-cluster.md)。

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

# 使用 管理 Amazon Redshift 管理員密碼 AWS Secrets Manager
<a name="redshift-secrets-manager-integration"></a>

 Amazon Redshift 可與 整合 AWS Secrets Manager ，以在加密的秘密內產生和管理管理員憑證。使用 時 AWS Secrets Manager，您可以將管理員密碼取代為 API 呼叫，以程式設計方式在需要時擷取秘密。使用機密而非硬式編碼憑證可降低這些憑證遭到洩露或遭到入侵的風險。如需 的詳細資訊 AWS Secrets Manager，請參閱[https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)。

您可以在執行下列其中一個操作 AWS Secrets Manager 時，指定 Amazon Redshift 使用 管理您的管理員密碼：
+ 建立佈建叢集或無伺服器命名空間
+ 編輯、更新或修改佈建叢集或無伺服器命名空間的管理員憑證
+ 從快照還原叢集或無伺服器命名空間

當您指定 Amazon Redshift 管理 中的管理員密碼時 AWS Secrets Manager，Amazon Redshift 會產生密碼並將其存放在 Secrets Manager 中。您可以直接在 中存取秘密 AWS Secrets Manager ，以擷取管理員使用者的登入資料。或者，如果您需要從另一個 AWS 帳戶存取秘密，您可以指定客戶受管金鑰來加密秘密。您也可以使用 AWS Secrets Manager 提供的 KMS 金鑰。

Amazon Redshift 會管理機密的設定，並依預設每 30 天輪換一次密碼。您可以隨時手動輪換機密。如果您刪除管理秘密的佈建叢集或無伺服器命名空間 AWS Secrets Manager，則也會刪除秘密及其相關聯的中繼資料。

若要使用秘密管理的登入資料連線至叢集或無伺服器命名空間，您可以使用 AWS Secrets Manager Secrets Manager 主控台或 Secrets Manager API 呼叫從 擷取`GetSecretValue`秘密。如需詳細資訊，請參閱*AWS Secrets Manager 《 使用者指南*》中的[從 擷取秘密 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets.html)[，並使用 AWS Secrets Manager 秘密中的登入資料連線至 SQL 資料庫](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_jdbc.html)。

## AWS Secrets Manager 整合所需的許可
<a name="redshift-secrets-manager-integration-permissions"></a>

使用者必須具有必要的權限，才能執行與 AWS Secrets Manager 整合相關的操作。建立 IAM 政策，授予對其需要的指定資源執行特定 API 操作的許可。然後，將這些政策附加至需要這些許可的 IAM 許可集或角色。如需詳細資訊，請參閱[Amazon Redshift 中的身分和存取管理](redshift-iam-authentication-access-control.md)。

指定 Amazon Redshift 在 中管理管理員密碼的使用者 AWS Secrets Manager 必須具有執行下列操作的許可：
+ `secretsmanager:CreateSecret`
+ `secretsmanager:RotateSecret`
+ `secretsmanager:DescribeSecret`
+ `secretsmanager:UpdateSecret`
+ `secretsmanager:DeleteSecret`
+ `secretsmanager:GetRandomPassword`
+ `secretsmanager:TagResource`

如果使用者想要在佈建叢集的 `MasterPasswordSecretKmsKeyId` 參數中傳遞 KMS 金鑰，或在無伺服器命名空間的 `AdminPasswordSecretKmsKeyId` 參數中傳遞 KMS 金鑰，除了上面所列的許可外，其還需要下列許可。
+ `kms:Decrypt`
+ `kms:GenerateDataKey`
+ `kms:CreateGrant`
+ `kms:RetireGrant`

## 管理員密碼機密輪換
<a name="redshift-secrets-manager-integration-rotation"></a>

根據預設，Amazon Redshift 會每 30 天自動輪換您的機密，以確保您的憑證不會長時間保持不變。當 Amazon Redshift 輪換管理員密碼秘密時， 會 AWS Secrets Manager 更新現有的秘密以包含新的管理員密碼。Amazon Redshift 會變更叢集的管理員密碼，以符合已更新之機密中的密碼。

您可以使用 AWS Secrets Manager立即輪換機密，而無需等待排程的輪換。如需輪換機密的相關資訊，請參閱《AWS Secrets Manager 使用者指南》**中的[輪換 AWS Secrets Manager 機密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_jdbc.html)。

## 搭配使用 AWS Secrets Manager 與 Amazon Redshift 的考量事項
<a name="redshift-secrets-manager-integration-considerations"></a>

 使用 AWS Secrets Manager 管理佈建叢集或無伺服器命名空間的管理員登入資料時，請考慮下列事項：
+  當您暫停由其管理管理員憑證的叢集時 AWS Secrets Manager，將不會刪除叢集的秘密，您將繼續支付秘密的費用。只有刪除叢集時才會刪除機密。
+  如果您的叢集在 Amazon Redshift 嘗試輪換其附加的機密時暫停了，輪換會失敗。在這種情況下，即使您繼續叢集，Amazon Redshift 還是會停止自動輪換，而且不會嘗試再次輪換。您必須使用 `secretsmanager:RotateSecret` API 呼叫重新啟動自動輪換排程，才能繼續讓 AWS Secrets Manager 自動輪換機密。
+  如果在 Amazon Redshift 嘗試輪換其附加的機密時，您的無伺服器命名空間沒有相關聯的工作群組，則輪換會失敗，且不會嘗試再次輪換，即使在您附加工作群組之後也是如此。您必須使用 `secretsmanager:RotateSecret` API 呼叫重新啟動自動輪換排程，才能繼續讓 AWS Secrets Manager 自動輪換機密。

# 在 Amazon Redshift 中擷取機密的 Amazon Resource Name (ARN)
<a name="redshift-secrets-manager-integration-retrieving-secret"></a>

您可以使用 Amazon Redshift 主控台，檢視由 AWS Secrets Manager 管理之任何機密的 Amazon Resource Name (ARN)。取得秘密的 ARN 後，您可以使用 檢視秘密的詳細資訊，以及秘密中的加密資料 AWS Secrets Manager。如需使用 ARN 擷取機密的相關資訊，請參閱《AWS Secrets Manager 使用者指南》**中的[擷取機密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets.html)。

**檢視 Amazon Redshift 佈建叢集之機密的詳細資訊**  
請透過下列程序，使用 Amazon Redshift 主控台檢視叢集機密的 Amazon Resource Name (ARN)：  

1. 登入 AWS 管理主控台 並開啟 Amazon Redshift 主控台。

1. 在**叢集概觀**窗格中，選擇您要檢視其機密的叢集。

1. 選擇**屬性**索引標籤。

1. 在**管理員憑證 ARN** 下檢視機密的 ARN。此 ARN 是秘密的識別符，您可以在 中使用它 AWS Secrets Manager 來檢視秘密的詳細資訊。

**檢視 Amazon Redshift Serverless 命名空間之機密的詳細資訊**  
請透過下列程序，使用 Amazon Redshift 主控台檢視無伺服器命名空間機密的 Amazon Resource Name (ARN)：  

1. 登入 AWS 管理主控台 並開啟 Amazon Redshift 主控台。

1. 從**佈建叢集**儀表板中，選擇頁面右上角的**前往無伺服器**。

1. 在 **Serverless 儀表板**中，捲動至**命名空間/工作群組**窗格，然後選擇您要檢視其機密的命名空間。

1. 在**一般資訊**窗格中，於**管理員憑證 ARN** 下檢視機密的 ARN。此 ARN 是秘密的識別符，您可以在 中使用它 AWS Secrets Manager 來檢視秘密的詳細資訊。

# 建立資料庫連線憑證的機密
<a name="redshift-secrets-manager-integration-create"></a>

您可以建立 Secrets Manager 機密，以儲存用來連線至 Amazon Redshift 佈建叢集或 Redshift Serverless 命名空間和工作群組的憑證。您在 Amazon Redshift 查詢編輯器 v2 中排程查詢時，也可以使用此機密。

**使用 Secrets Manager 主控台在 Amazon Redshift 佈建叢集中建立資料庫的機密**

1. 開啟 Secrets Manager 主控台 ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/))。

1. 瀏覽至**機密**清單，並選擇**儲存新機密**。

1. 選擇 **Amazon Redshift 資料倉儲的憑證**。在建立機密的步驟中輸入您的資訊，如下所示：
   + 在**使用者名稱**的**憑證**中，輸入資料倉儲管理使用者的名稱。
   + 在**密碼**的**憑證**中，輸入**使用者名稱**的密碼。
   + 針對**加密金鑰**，選擇您的加密金鑰。
   + 針對**資料倉儲**，選擇包含您的資料的 Amazon Redshift 佈建叢集。
   + 針對**機密名稱**，輸入機密的名稱。
   + 針對**說明**，輸入機密的說明。
   + 針對**標籤**，輸入包含 **Redshift** 這個字的**標籤索引鍵**。當您嘗試使用 Amazon Redshift 查詢編輯器 v2 連線至資料倉儲時，須有此標籤索引鍵才能列出機密。機密必須具有開頭為字串 **Redshift** 的標籤索引鍵，您才能在管理主控台的 AWS Secrets Manager 下列出機密。

1. 繼續進行數個步驟並輸入有關機密的資訊，直到您在**檢閱**步驟中**儲存**變更為止。

   憑證、引擎、主機、連接埠和叢集識別碼的特定值都會儲存在機密中。此外，機密會加上具有標籤索引鍵 `Redshift` 的標籤。

**使用 Redshift Serverless 主控台在 Redshift Serverless 命名空間中建立資料庫的機密**

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

1. 選擇 **Redshift 無伺服器**並瀏覽至**命名空間組態**。

1. 選擇要為其建立機密憑證的命名空間。

1. 開啟**動作**、**編輯管理員憑證**。

1. 針對**管理員密碼**，選擇**在 AWS Secrets Manager中管理管理員憑證**。

1. 選擇**儲存變更**，以儲存您所做的變更。

確認出現密碼變更成功的訊息。您也可以在 Secrets Manager 主控台中檢視機密。您可以使用此秘密，透過連線 AWS Secrets Manager 方法，在 Redshift Serverless 主控台和 Amazon Redshift 查詢編輯器 v2 中連線至工作群組中的資料庫。機密必須具有開頭為字串 "Redshift" 的標籤索引鍵，該機密才能在查詢編輯器 v2 Web 應用程式中列出。秘密必須具有以字串開頭的標籤金鑰**Redshift**，才能在 管理主控台 AWS Secrets Manager 的 下列出秘密。

**使用 Secrets Manager 主控台在 Redshift Serverless 命名空間中建立資料庫的機密**

1. 開啟 Secrets Manager 主控台 ([https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/))。

1. 瀏覽至**機密**清單，並選擇**儲存新機密**。

1. 選擇 **Amazon Redshift 資料倉儲的憑證**。在建立機密的步驟中輸入您的資訊，如下所示：
   + 在**使用者名稱**的**憑證**中，輸入資料倉儲管理使用者的名稱。
   + 在**密碼**的**憑證**中，輸入**使用者名稱**的密碼。
   + 針對**加密金鑰**，選擇您的加密金鑰。
   + 針對**資料倉儲**，選擇包含您的資料的 Redshift Serverless 命名空間。
   + 針對**機密名稱**，輸入機密的名稱。
   + 針對**說明**，輸入機密的說明。
   + 針對**標籤**，輸入包含 **Redshift** 這個字的**標籤索引鍵**。當您嘗試使用 Amazon Redshift 查詢編輯器 v2 連線至資料倉儲時，須有此標籤索引鍵才能列出機密。機密必須具有開頭為字串 **Redshift** 的標籤索引鍵，您才能在管理主控台的 AWS Secrets Manager 下列出機密。

1. 繼續進行數個步驟並輸入有關機密的資訊，直到您在**檢閱**步驟中**儲存**變更為止。

   憑證、資料庫名稱、主機、連接埠、命名空間和引擎的特定值都會儲存在機密中。此外，機密會加上具有標籤索引鍵 `Redshift` 的標籤。

**使用 在 Redshift Serverless 命名空間中建立資料庫的秘密 AWS CLI**

您可以使用 AWS CLI 來建立秘密。其中一種方法是使用 AWS CloudShell 執行 Secrets Manager AWS CLI 命令，如下所示。您必須有適當許可才能執行下列程序中顯示的 AWS CLI 命令。

1. 在 AWS 主控台上，開啟 AWS CloudShell 命令提示字元。如需詳細資訊 AWS CloudShell，請參閱*AWS CloudShell 《 使用者指南*》中的[什麼是 AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html) 。

1. 例如，針對機密 `MyTestSecret` 輸入 Secrets Manager 命令，以儲存用來連線至資料庫或排程 Amazon Redshift 查詢編輯器 v2 查詢的機密。將命令中的下列值取代為您環境的值：
   + *admin* 是資料倉儲的管理員使用者名稱。
   + *passw0rd* 是管理員的密碼。
   + *dev* 是資料倉儲中的初始資料庫名稱。
   + *region* 是 AWS 區域 包含資料倉儲的 。例如 `us-east-1`。
   + *123456789012* 是 AWS 帳戶。
   + *namespace-id* 是類似 `c3928f0e-c889-4d2b-97a5-5738324d5d3e` 的命名空間識別碼。您可以在 Amazon Redshift 主控台詳細資訊頁面上找到無伺服器命名空間的此識別碼。

   ```
   aws secretsmanager create-secret \
   --name MyTestSecret \
   --description "My test secret created with the CLI." \
   --secret-string "{\"username\":\"admin\",\"password\":\"passw0rd\",\"dbname\":\"dev\",\"engine\":\"redshift\"}" \
   --tags "[{\"Key\":\"redshift-serverless:namespaceArn\",\"Value\":\"arn:aws:redshift-serverless:region:123456789012:namespace/namespace-id\"}]"
   ```

# 在 Amazon Redshift 中記錄和監控
<a name="security-incident-response"></a>

監控是維護 Amazon Redshift 和 AWS 解決方案可靠性、可用性和效能的重要部分。您可以從 AWS 解決方案的所有部分收集監控資料，以便在發生多點失敗時更輕鬆地偵錯。 AWS 提供數種工具來監控 Amazon Redshift 資源並回應潛在事件：

**Amazon CloudWatch 警示**  
使用 Amazon CloudWatch 警示，您可在自己指定的一段時間內監看單一指標。如果指標超過指定的閾值，則會傳送通知至 Amazon SNS 主題或 AWS Auto Scaling 政策。CloudWatch 警示不會因為處於特定狀態而調用動作。必須是狀態已變更並維持了所指定的時間長度，才會呼叫動作。如需詳細資訊，請參閱[建立 警示](performance-metrics-alarms.md)。如需指標的清單，請參閱 [Amazon Redshift 中的效能資料](metrics-listing.md)。

**AWS CloudTrail 日誌**  
CloudTrail 提供由使用者、IAM 角色或 Amazon Redshift 中的 AWS 服務所採取的 API 操作記錄。您可以利用 CloudTrail 所收集的資訊來判斷向 Amazon Redshift 發出的請求，以及發出請求的 IP 地址、人員、時間和其他詳細資訊。如需詳細資訊，請參閱[使用 CloudTrail 進行記錄](logging-with-cloudtrail.md)。

# 資料庫稽核記錄日誌
<a name="db-auditing"></a>

Amazon Redshift 會記錄您資料庫中連線和使用者活動的相關資訊。這些日誌可協助您基於安全和故障診斷之目的監控資料庫，此程序稱為*資料庫稽核*。日誌可以儲存在：
+ *Amazon S3 儲存貯體* — 這會讓負責監控資料庫中活動的使用者能夠存取資料安全功能。
+ *Amazon CloudWatch* — 您可以使用 CloudWatch 內建的功能 (例如視覺化功能和動作設定) 來檢視稽核記錄資料。

**注意**  
[SYS\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_CONNECTION_LOG.html) 會收集 Amazon Redshift Serverless 的連線日誌資料。請注意，當您收集 Amazon Redshift Serverless 的稽核記錄資料時，並無法將資料傳送至日誌檔，只能傳送至 CloudWatch。

**Topics**
+ [Amazon Redshift 日誌](#db-auditing-logs)
+ [稽核日誌和 Amazon CloudWatch](#db-auditing-cloudwatch-provisioned)
+ [啟用稽核記錄](db-auditing-console.md)
+ [安全記錄](db-auditing-secure-logging.md)

## Amazon Redshift 日誌
<a name="db-auditing-logs"></a>

Amazon Redshift 會將資訊記錄在下列日誌檔中：
+ *連線日誌* — 記錄身分驗證嘗試、連線和中斷連線。
+ *使用者日誌* — 記錄對資料庫使用者定義所做之變更的相關資訊。
+ *使用者活動日誌* — 在每個查詢於資料庫上執行之前先行記錄。

連線和使用者日誌主要用於安全目的。您可以使用連線日誌，來監控正在連線至資料庫的使用者相關資訊，以及相關的連線資訊。此資訊可能是使用者的 IP 地址、使用者何時提出請求、使用者使用哪種類型的身分驗證等等。您可以利用使用者日誌，來監控對資料庫使用者之定義所做的變更。

使用者活動日誌主要用於故障診斷目的。它會追蹤使用者和系統在資料庫中執行之查詢類型的相關資訊。

連線日誌和使用者日誌對應至儲存在資料庫中系統資料表的資訊。您可以使用系統資料表來取得相同資訊，但是日誌檔提供更簡單的擷取和檢閱機制。日誌檔依賴 Amazon S3 許可而非資料庫許可，針對資料表執行查詢。此外，藉由檢視日誌檔中的資訊，而非查詢系統資料表，您可以減少與資料庫互動的任何影響。

**注意**  
日誌檔不如系統日誌資料表 [STL\$1USERLOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_USERLOG.html) 和 [STL\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_CONNECTION_LOG.html) 一樣新。比最新記錄舊的記錄 (但不含最新記錄) 會複製到日誌檔。

**注意**  
若為 Amazon Redshift Serverless，[SYS\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_CONNECTION_LOG.html) 會收集連線日誌資料。當您收集 Amazon Redshift Serverless 的稽核記錄資料時，並無法將資料傳送至日誌檔，只能傳送至 CloudWatch。

### 連線日誌
<a name="db-auditing-connection-log"></a>

記錄身分驗證嘗試以及連線和中斷連線。下表說明連線日誌中的資訊。如需這些欄位的相關資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的 [STL\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_CONNECTION_LOG.html)。如需 Amazon Redshift Serverless 所收集連線日誌資料的相關資訊，請參閱 [SYS\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_CONNECTION_LOG.html)。

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

### 使用者日誌
<a name="db-auditing-user-log"></a>

 記錄資料庫使用者之下列變更的詳細資訊：
+ 建立使用者
+ 捨棄使用者
+ 更改使用者 (重新命名)
+ 更改使用者 (更改屬性)

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

查詢 [SYS\$1USERLOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_USERLOG.html) 系統檢視可尋找有關使用者變更的其他資訊。此檢視包含來自 Amazon Redshift Serverless 的日誌資料。

### 使用者活動日誌
<a name="db-auditing-user-activity-log"></a>

在每個查詢於資料庫上執行之前先行記錄。

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

## 稽核日誌和 Amazon CloudWatch
<a name="db-auditing-cloudwatch-provisioned"></a>

 根據預設，Amazon Redshift 不會開啟稽核記錄。當您在叢集上開啟記錄時，Amazon Redshift 會將日誌匯出至 Amazon CloudWatch，或建立日誌並將其上傳至 Amazon S3，擷取從啟用稽核記錄起到目前為止的資料。每個記錄更新都會接續先前的日誌。

目標為 CloudWatch 或 Amazon S3 的稽核記錄是選擇性程序。目標為系統資料表的記錄則非選用，而且會自動發生。如需目標為系統資料表之記錄的相關資訊，請參閱《Amazon Redshift 資料庫開發人員指南》中的[系統資料表參考](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_system-tables.html)。

使用 、Amazon Redshift API 參考或 AWS Command Line Interface () 一起啟用連線日誌 AWS 管理主控台、使用者日誌和使用者活動日誌AWS CLI。對於使用者活動日誌，您也須啟用 `enable_user_activity_logging` 資料庫參數。如果您只啟用稽核記錄功能，但未啟用相關聯參數，則資料庫稽核日誌將只記錄連線日誌和使用者日誌的日誌資訊，但不記錄使用者活動日誌的日誌資訊。預設不會啟用 `enable_user_activity_logging` 參數 (`false`)。您可以將其設為 `true` 來啟用使用者活動日誌。如需詳細資訊，請參閱[Amazon Redshift 參數群組](working-with-parameter-groups.md)。

當您啟用目標為 CloudWatch 的記錄時，Amazon Redshift 會將叢集連線、使用者和使用者活動日誌資料匯出到 Amazon CloudWatch Logs 日誌群組。日誌資料在結構描述方面不會變更。CloudWatch 專為監控應用程式而建置，您可以使用它來執行即時分析或為其進行設定以採取動作。您可以使用 Amazon CloudWatch Logs 將日誌記錄儲存在耐用的儲存體中。

若不要在 Amazon S3 中存放日誌檔，建議的替代方法是使用 CloudWatch 來檢視日誌。其不需要太多的組態設定，並可能適合您的監控要求，特別是如果您已經使用它來監控其他服務和應用程式的話。

### Amazon CloudWatch 中的日誌群組和日誌事件
<a name="db-auditing-cloudwatch-provisioned-log-group"></a>

選取要匯出的 Amazon Redshift 日誌後，您就可以在 Amazon CloudWatch Logs 中監控日誌事件。系統會自動在下列字首下，為 Amazon Redshift Serverless 建立新的日誌群組，其中 `log_type` 代表日誌類型。

```
/aws/redshift/cluster/<cluster_name>/<log_type>
```

例如，如果您選擇匯出連線日誌，則日誌資料會儲存在下列日誌群組中。

```
/aws/redshift/cluster/cluster1/connectionlog
```

日誌事件會使用日誌串流匯出至日誌群組。若要在日誌事件內搜尋無伺服器端點的資訊，請使用 Amazon CloudWatch Logs 主控台、 AWS CLI或 Amazon CloudWatch Logs API。如需有關搜尋和篩選日誌資料的資訊，請參閱[使用篩選條件從日誌事件建立指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html)。

在 CloudWatch 中，您可以使用能提供精細度和彈性的查詢語法來搜尋日誌資料。如需詳細資訊，請參閱 [CloudWatch Logs Insights 查詢語法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html)。

### 遷移到 Amazon CloudWatch 稽核記錄
<a name="db-auditing-cloudwatch-provisioned-migration"></a>

無論何時，如果您要將日誌傳送到 Amazon S3，而且您變更了組態 (例如，將日誌傳送到 CloudWatch)，留在 Amazon S3 中的日誌不會受到影響。您仍可在日誌資料所在的 Amazon S3 儲存貯體中查詢日誌資料。

### Amazon S3 中的日誌檔案
<a name="db-auditing-manage-log-files"></a>

Amazon S3 中 Amazon Redshift 日誌檔案的數目和大小極度取決於叢集中的活動。如果您有作用中叢集，正在產生大量日誌，則 Amazon Redshift 可能更頻繁地產生日誌檔案。對於相同類型的活動，您可能具有一系列日誌檔案，例如在同一小時內具有多個連線日誌。

當 Amazon Redshift 使用 Amazon S3 來儲存日誌時，您在 Amazon S3 中使用的儲存會產生費用。在設定目標為 Amazon S3 的記錄之前，請計劃您需要儲存日誌檔案多長時間。這包括根據您的稽核需求，決定何時可刪除或封存日誌檔案。您建立的計劃極度取決於您儲存的資料類型，例如受制於合規或法規需求的資料。如需 Amazon S3 定價的相關資訊，請前往 [Amazon Simple Storage Service (Amazon S3) 定價](https://aws.amazon.com/s3/pricing/)。

#### 啟用目標為 Amazon S3 的記錄時的限制
<a name="db-auditing-enable-logging-limitations"></a>

稽核記錄有下列限制：
+ 您只能使用 Amazon S3 受管金鑰 (SSE-S3) 加密 (AES-256)。
+ Amazon S3 儲存貯體必須關閉 S3 物件鎖定功能。

#### Amazon Redshift 稽核記錄的儲存貯體許可
<a name="db-auditing-bucket-permissions"></a>

當您開啟目標為 Amazon S3 的記錄功能時，Amazon Redshift 會收集記錄資訊，並將其上傳到儲存在 Amazon S3 的日誌檔案。您可以使用現有的儲存貯體，或建立新的儲存貯體。Amazon Redshift 需要儲存貯體的以下 IAM 許可：
+ `s3:GetBucketAcl` 服務對 Amazon S3 儲存貯體需有讀取許可，才能識別儲存貯體擁有者。
+ `s3:PutObject` 服務需有放置物件許可，才能上傳物件。此外，開啟記錄功能的使用者或 IAM 角色還必須具有 Amazon S3 儲存貯體的 `s3:PutObject` 許可。每次上傳日誌，服務就會判斷目前儲存貯體擁有者是否符合啟用記錄時的儲存貯體擁有者。如果這些擁有者不相符，您會收到錯誤。

當您啟用稽核記錄時，如果您選取建立新儲存貯體的選項，系統便會為其套用正確的許可。不過，如果您在 Amazon S3 建立自己的儲存貯體，或使用現有的儲存貯體，則請務必新增包含儲存貯體名稱的儲存貯體政策。日誌會使用服務主體憑證來傳送。對於大多數 AWS 區域，您可以新增 Redshift 服務主體名稱，https：//*redshift.amazonaws.com*。

儲存貯體政策會使用以下格式。*ServiceName* 和 *BucketName* 是您自己值的預留位置。此外，還要在儲存貯體政策中指定相關聯的動作和資源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Put bucket policy needed for audit logging",
            "Effect": "Allow",
            "Principal": {
                "Service": "ServiceName"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetBucketAcl"
            ],
            "Resource": [
                "arn:aws:s3:::BucketName",
                "arn:aws:s3:::BucketName/*"
            ]
        }
    ]
}
```

------

下列範例是美國東部 (維吉尼亞北部) 區域的儲存貯體政策，以及名為 `AuditLogs` 的儲存貯體。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Put bucket policy needed for audit logging",
            "Effect": "Allow",
            "Principal": {
                "Service": "redshift.amazonaws.com"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetBucketAcl"
            ],
            "Resource": [
                "arn:aws:s3:::AuditLogs",
                "arn:aws:s3:::AuditLogs/*"
            ]
        }
    ]
}
```

------

預設未啟用的區域 (也稱為「選擇加入」區域) 需要區域特定的服務主體名稱。對於這些區域，服務主體名稱會包含 `redshift.region.amazonaws.com` 格式的區域。例如，對於亞太區域 (香港) 區域，名稱是 *redshift.ap-east-1.amazonaws.com*。如需預設未啟用的區域清單，請參閱《AWS 一般參考》**中的[管理 AWS 區域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)。

**注意**  
區域特定服務主體名稱會對應到叢集所在的區域。

##### 日誌檔案的最佳實務
<a name="db-auditing-bucket-permissions-confused-deputy"></a>

 當 Redshift 將日誌檔案上傳到 Amazon S3 時，大型檔案可以分段上傳。如果分段上傳不成功，檔案的這些分段可能會留在 Amazon S3 儲存貯體中。這可能會導致額外的儲存成本，因此請務必了解分段上傳失敗時會發生什麼情況。如需有關稽核日誌分段上傳的詳細說明，請參閱[使用分段上傳來上傳和複製物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)和[中止分段上傳](https://docs.aws.amazon.com/AmazonS3/latest/userguide/abort-mpu.html)。

如需建立 S3 儲存貯體和新增儲存貯體政策的詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[建立一般用途儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)和 [Amazon S3 的儲存貯體政策](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)。

#### Amazon Redshift 稽核記錄的儲存貯體結構
<a name="db-auditing-bucket-structure"></a>

依預設，Amazon Redshift 會使用下列儲存貯體和物件結構來組織 Amazon S3 儲存貯體中的日誌檔案：``

`AWSLogs/AccountID/ServiceName/Region/Year/Month/Day/AccountID_ServiceName_Region_ClusterName_LogType_Timestamp.gz` 

範例為：`AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz`

如果您提供 Amazon S3 金鑰字首，請將字首置於金鑰開頭處。

例如，如果您指定 myprefix 的字首：`myprefix/AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz`

Amazon S3 金鑰字首不能超過 512 個字元。它不能包含空格 ( )、雙引號 (“)、單引號 (‘)、反斜線 (\$1)。也有一些不允許的特殊字元和控制字元。這些字元的十六進位碼如下：
+ x00 到 x20
+ x22
+ x27
+ x5c
+ x7f 或更大

### Amazon S3 中稽核記錄的考量事項
<a name="db-auditing-failures"></a>

 Amazon Redshift 稽核記錄可能會由於下列原因而中斷：
+  Amazon Redshift 沒有將日誌上傳至 Amazon S3 儲存貯體的許可。驗證儲存貯體是使用正確 IAM 政策設定的。如需詳細資訊，請參閱[Amazon Redshift 稽核記錄的儲存貯體許可](#db-auditing-bucket-permissions)。
+  儲存貯體擁有者已變更。當 Amazon Redshift 上傳日誌時，其會驗證儲存貯體擁有者是否與啟用記錄時的儲存貯體擁有者相同。如果儲存貯體擁有者已變更，則 Amazon Redshift 無法上傳日誌，直到您設定另一個用於稽核記錄的儲存貯體為止。
+  找不到儲存貯體。如果在 Amazon S3 中刪除該儲存貯體，Amazon Redshift 便無法上傳日誌。您必須重建儲存貯體，或設定 Amazon Redshift 以將日誌上傳至不同的儲存貯體。

### 使用 的 API 呼叫 AWS CloudTrail
<a name="rs-db-auditing-cloud-trail"></a>

Amazon Redshift 已與 服務整合 AWS CloudTrail，此服務提供由 Amazon Redshift AWS 中的使用者、角色或服務所採取之動作的記錄。CloudTrail 會將 Amazon Redshift 的所有 API 呼叫擷取為事件。如需 Amazon Redshift 與 整合的詳細資訊 AWS CloudTrail，請參閱[使用 CloudTrail 記錄](https://docs.aws.amazon.com/redshift/latest/mgmt/logging-with-cloudtrail.html)。

您可以獨立於或除了 Amazon Redshift 資料庫稽核記錄之外使用 CloudTrail。

若要進一步了解 CloudTrail，請參閱《AWS CloudTrail 使用者指南》[https://docs.aws.amazon.com/awscloudtrail/latest/userguide/](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。

# 啟用稽核記錄
<a name="db-auditing-console"></a>

設定 Amazon Redshift 以匯出稽核日誌資料。日誌可以匯出到 CloudWatch，或以檔案形式匯出至 Amazon S3 儲存貯體。

## 使用主控台啟用稽核記錄日誌
<a name="enable-auditing-logging-task"></a>

### 主控台步驟
<a name="cluster-audit-logging"></a>

**啟用叢集的稽核記錄**

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

1. 在導覽功能表上，選擇**叢集**，然後選擇您要更新的叢集。

1. 選擇**屬性**索引標籤。在**資料庫組態**面板上，選擇**編輯**，然後選擇**編輯稽核記錄**。

1. 在**編輯稽核記錄**頁面上，選擇**開啟**，然後選取 **S3 儲存貯體**或 **CloudWatch**。建議您使用 CloudWatch，因為其管理簡單，並且具有實用的資料視覺化功能。

1. 選擇要匯出的日誌。

1. 若要儲存您的選擇，請選擇**儲存變更**。

# 安全記錄
<a name="db-auditing-secure-logging"></a>

當 Amazon Redshift 記錄參考一或多個 AWS Glue Data Catalog 檢視的查詢時，Amazon Redshift 會在記錄有關該查詢的中繼資料時自動遮罩特定系統資料表中的欄位和檢視資料欄。

安全日誌遮罩適用於 Amazon Redshift 在執行符合遮罩條件的查詢時，產生的所有系統資料表和檢視項目。下表列出已套用安全記錄、文字加上 `******` 遮罩，以及數字加上 `-1` 遮罩的系統檢視和欄。用於遮罩文字的星號數目與原始文字中的字元數相符，最多 6 個字元。超過 6 個字元的字串仍會顯示為 6 個星號。


****  

| 系統資料表 | 敏感的欄 | 
| --- | --- | 
| [SYS\$1EXTERNAL\$1QUERY\$1DETAIL](https://docs.aws.amazon.com/redshift/latest/dg/SYS_EXTERNAL_QUERY_DETAIL.html) | **欄：**source\$1type、total\$1partitions、qualified\$1partitions、scanned\$1files、returned\$1rows、returned\$1bytes、file\$1format、file\$1location、external\$1query\$1text、warning\$1message。 | 
| [SYS\$1EXTERNAL\$1QUERY\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/SYS_EXTERNAL_QUERY_ERROR.html) | **欄：**file\$1location、rowid、column\$1name、original\$1value、modified\$1value、trigger、action、action\$1value、error\$1code。 | 
| [SYS\$1QUERY\$1DETAIL](https://docs.aws.amazon.com/redshift/latest/dg/SYS_QUERY_DETAIL.html) | **欄：**step\$1id、step\$1name、table\$1id、table\$1name、input\$1bytes、input\$1rows、output\$1bytes、output\$1rows、blocks\$1read、blocks\$1write、local\$1read\$1IO、remote\$1read\$1IO、spilled\$1block\$1local\$1disk、spilled\$1block\$1remote\$1disk、step\$1attribute。 | 
| [SYS\$1QUERY\$1HISTORY](https://docs.aws.amazon.com/redshift/latest/dg/SYS_QUERY_HISTORY.html) | **欄：**returned\$1rows、returned\$1bytes。 | 
| [STL\$1AGGR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_AGGR.html) | **欄：**rows、bytes、tbl、type。 | 
| [STL\$1BCAST](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_BCAST.html) | **欄：**rows、bytes、packets。 | 
| [STL\$1DDLTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_DDLTEXT.html) | **欄：**label、text。 | 
| [STL\$1DELETE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_DELETE.html) | **欄：**rows、tbl。 | 
| [STL\$1DIST](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_DIST.html) | **欄：**rows、bytes、packets。 | 
| [STL\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_ERROR.html) | **欄：**file、linenum、context、error。 | 
| [STL\$1EXPLAIN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_EXPLAIN.html) | **欄：**plannode、info。 | 
| [STL\$1FILE\$1SCAN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_FILE_SCAN.html) | **欄：**name、line、bytes。 | 
| [STL\$1HASH](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_HASH.html) | **欄：**rows、bytes、tbl、est\$1rows。 | 
| [STL\$1HASHJOIN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_HASHJOIN.html) | **欄：**rows、tbl、num\$1parts、join\$1type。 | 
| [STL\$1INSERT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_INSERT.html) | **欄：**rows、tbl。 | 
| [STL\$1LIMIT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_LIMIT.html) | **欄：**rows。 | 
| [STL\$1MERGE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_MERGE.html) | **欄：**rows。 | 
| [STL\$1MERGEJOIN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_MERGEJOIN.html) | **欄：**rows、tbl。 | 
| [STL\$1NESTLOOP](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_NESTLOOP.html) | **欄：**rows、tbl。 | 
| [STL\$1PARSE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_PARSE.html) | **欄：**rows。 | 
| [STL\$1PLAN\$1INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_PLAN_INFO.html) | **欄：**startupcost、totalcost、rows、bytes。 | 
| [STL\$1PROJECT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_PROJECT.html) | **欄：**rows、tbl。 | 
| [STL\$1QUERY](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_QUERY.html) | **欄：**querytxt。 | 
| [STL\$1QUERY\$1METRICS](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_QUERY_METRICS.html) | **欄：**max\$1rows、rows、max\$1blocks\$1read、blocks\$1read、max\$1blocks\$1to\$1disk、blocks\$1to\$1disk、max\$1query\$1scan\$1size、query\$1scan\$1size。 | 
| [STL\$1QUERYTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_QUERYTEXT.html) | **欄：**text。 | 
| [STL\$1RETURN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_RETURN.html) | **欄：**rows、bytes。 | 
| [STL\$1S3CLIENT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_S3CLIENT.html) | **欄：**bucket、key、transfer\$1size、data\$1size。 | 
| [STL\$1S3CLIENT\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_S3CLIENT_ERROR.html) | **欄：**bucket、key、error、transfer\$1size。 | 
| [STL\$1儲存](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SAVE.html) | **欄：**rows、bytes、tbl。 | 
| [STL\$1SCAN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SCAN.html) | **欄：**rows、bytes、fetches、type、tbl、rows\$1pre\$1filter、rows\$1pre\$1user\$1filter、perm\$1table\$1name、scanned\$1mega\$1value。 | 
| [STL\$1SORT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SORT.html) | **欄：**rows、bytes、tbl。 | 
| [STL\$1SSHCLIENT\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SSHCLIENT_ERROR) | **欄：**ssh\$1username、endpoint、command、error。 | 
| [STL\$1TR\$1CONFLICT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_TR_CONFLICT.html) | **欄：**table\$1id。 | 
| [STL\$1UNDONE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_UNDONE.html) | **欄：**table\$1id。 | 
| [STL\$1UNIQUE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_UNIQUE.html) | **欄：**rows、type、bytes。 | 
| [STL\$1UTILITYTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_UTILITYTEXT.html) | **欄：**label、text。 | 
| [STL\$1WINDOW](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_WINDOW.html) | **欄：**rows。 | 
| [STV\$1BLOCKLIST](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_BLOCKLIST.html) | **欄：**col、tbl、num\$1values、minvalue、maxvalue。 | 
| [STV\$1EXEC\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_EXEC_STATE.html) | **欄：**rows、bytes、label。 | 
| [STV\$1INFLIGHT](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_INFLIGHT.html) | **欄：**label、text。 | 
| [STV\$1LOCKS](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_LOCKS.html) | **欄：**table\$1id。 | 
| [STV\$1QUERY\$1METRICS](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_QUERY_METRICS.html) | **欄：**rows、max\$1rows、blocks\$1read、max\$1blocks\$1read、max\$1blocks\$1to\$1disk、blocks\$1to\$1disk、max\$1query\$1scan\$1size、query\$1scan\$1size。 | 
| [STV\$1STARTUP\$1RECOVERY\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_STARTUP_RECOVERY_STATE.html) | **欄：**table\$1id、table\$1name。 | 
| [STV\$1TBL\$1PERM](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_TBL_PERM.html) | **欄：**id、name、rows、sorted\$1rows、temp、block\$1count、query\$1scan\$1size。 | 
| [STV\$1TBL\$1TRANS](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_TBL_TRANS.html) | **欄：**id、rows、size。 | 
| [SVCS\$1EXPLAIN](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_EXPLAIN.html) | **欄：**plannode、info。 | 
| [SVCS\$1PLAN\$1INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_PLAN_INFO.html) | **欄：**rows、bytes。 | 
| [SVCS\$1QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_QUERY_SUMMARY.html) | **欄：**step、rows、bytes、rate\$1row、rate\$1byte、label、rows\$1pre\$1filter。 | 
| [SVCS\$1S3LIST](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3LIST.html) | **欄：**bucket、prefix、retrieved\$1files、max\$1file\$1size、avg\$1file\$1size。 | 
| [SVCS\$1S3LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3LOG.html) | **欄：**message。 | 
| [SVCS\$1S3PARTITION\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3PARTITION_SUMMARY.html) | **欄：**total\$1partitions、qualified\$1partitions、min\$1assigned\$1partitions、max\$1assigned\$1partitions、avg\$1assigned\$1partitions。 | 
| [SVCS\$1S3QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3QUERY_SUMMARY.html) | **欄：**external\$1table\$1name、file\$1format、s3\$1scanned\$1rows、s3\$1scanned\$1bytes、s3query\$1returned\$1rows、s3query\$1returned\$1bytes。 | 
| [SVL\$1QUERY\$1METRICS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_METRICS.html) | **欄：**step\$1label、scan\$1row\$1count、join\$1row\$1count、nested\$1loop\$1join\$1row\$1count、return\$1row\$1count、spectrum\$1scan\$1row\$1count、spectrum\$1scan\$1size\$1mb。 | 
| [SVL\$1QUERY\$1METRICS\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_METRICS_SUMMARY.html) | **欄：**step\$1label、scan\$1row\$1count、join\$1row\$1count、nested\$1loop\$1join\$1row\$1count、return\$1row\$1count、spectrum\$1scan\$1row\$1count、spectrum\$1scan\$1size\$1mb。 | 
| [SVL\$1QUERY\$1REPORT](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_REPORT.html) | **欄：**rows、bytes、label、rows\$1pre\$1filter。 | 
| [SVL\$1QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_SUMMARY.html) | **欄：**rows、bytes、rows\$1pre\$1filter。 | 
| [SVL\$1S3LIST](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3LIST.html) | **欄：**bucket、prefix、retrieved\$1files、max\$1file\$1size、avg\$1file\$1size。 | 
| [SVL\$1S3LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3LOG.html) | **欄：**message。 | 
| [SVL\$1S3PARTITION](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3PARTITION.html) | **欄：**rows、bytes、label、rows\$1pre\$1filter。 | 
| [SVL\$1S3PARTITION\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3PARTITION_SUMMARY.html) | **欄：**total\$1partitions、qualified\$1partitions、min\$1assigned\$1partitions、max\$1assigned\$1partitions、avg\$1assigned\$1partitions。 | 
| [SVL\$1S3QUERY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3QUERY.html) | **欄：**external\$1table\$1name、file\$1format、s3\$1scanned\$1rows、s3\$1scanned\$1bytes、s3query\$1returned\$1rows、s3query\$1returned\$1bytes、files。 | 
| [SVL\$1S3QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3QUERY_SUMMARY.html) | **欄：**external\$1table\$1name、file\$1format、s3\$1scanned\$1rows、s3\$1scanned\$1bytes、s3query\$1returned\$1rows、s3query\$1returned\$1bytes。 | 
| [SVL\$1S3RETRIES](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3RETRIES.html) | **欄：**file\$1size、location、message。 | 
| [SVL\$1SPECTRUM\$1SCAN\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_SPECTRUM_SCAN_ERROR.html) | **欄：**location、rowid、colname、original\$1value、modified\$1value、trigger、action、action\$1value、error\$1code。 | 
| [SVL\$1STATEMENTTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_STATEMENTTEXT.html) | **欄：**type、text。 | 
| [SVL\$1STORED\$1PROC\$1CALL](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_STORED_PROC_CALL.html) | **欄：**querytxt。 | 
| [SVL\$1STORED\$1PROC\$1MESSAGES](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_STORED_PROC_MESSAGES.html) | **欄：**message、linenum、querytext。 | 
| [SVL\$1UDF\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_UDF_LOG.html) | **欄：**message、funcname。 | 
| [SVV\$1DISKUSAGE](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_DISKUSAGE.html) | **欄：**name、col、tbl、blocknum、num\$1values、minvalue、maxvalue。 | 
| [SVV\$1QUERY\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_QUERY_STATE.html) | **欄：**rows、bytes、label。 | 
| [SVV\$1TABLE\$1INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_TABLE_INFO.html) | **欄：**table\$1id、table。 | 
| [SVV\$1TRANSACTIONS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_TRANSACTIONS.html) | **欄：**relation。 | 

如需系統資料表和檢視的詳細資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的[系統資料表和檢視參考](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_system-tables.html)。如需有關 Amazon Redshift 的動態遮罩查詢結果功能的資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的[動態資料遮罩](https://docs.aws.amazon.com/redshift/latest/dg/t_ddm.html)。如需 AWS Glue Data Catalog 使用 Amazon Redshift 在 中建立檢視的資訊，請參閱《*Amazon Redshift 資料庫開發人員指南*》中的[AWS Glue Data Catalog 檢視](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html)。

# 使用 CloudTrail 進行記錄
<a name="logging-with-cloudtrail"></a>

Amazon Redshift、資料共用、Amazon Redshift Serverless、Amazon Redshift 資料 API 和查詢編輯器 v2 都會與 AWS CloudTrail 整合。CloudTrail 服務會提供由 Amazon Redshift 中的使用者、角色或 AWS 服務所執行之動作的記錄。CloudTrail 會將 Amazon Redshift 的所有 API 呼叫擷取為事件。擷取的呼叫包括從 Redshift 主控台進行的呼叫，以及針對 Redshift 操作的程式碼呼叫。

如果您建立 CloudTrail 追蹤，就可以持續傳送 CloudTrail 事件至 Amazon S3 儲存貯體，包括 Redshift 的事件。即使您未設定追蹤，依然可以透過 CloudTrail 主控台中的**事件歷史記錄**檢視最新事件。使用由 CloudTrail 收集的資訊，您就可以判斷特定事情。這些事情包括向 Redshift 提出的請求、提出請求的 IP 地址、提出請求的人員、提出請求的時間，以及其他詳細資訊。

您可以獨立於或除了 Amazon Redshift 資料庫稽核記錄之外使用 CloudTrail。

若要進一步了解 CloudTrail，請參閱[AWS CloudTrail《使用者指南》](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。

## CloudTrail 中的資訊
<a name="working-with-info-in-cloudtrail"></a>

當您建立帳戶時，即會開啟您 AWS 帳戶的 CloudTrail。在發生活動時，該活動會記錄在 CloudTrail 事件中，其他 AWS 服務事件則記錄於**事件歷史記錄**中。您可以檢視、搜尋和下載 AWS 帳戶的最新事件。如需詳細資訊，請參閱《AWS CloudTrail 使用者指南》**中的[使用 CloudTrail 事件歷史記錄檢視事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

如需您 AWS 帳戶中正在進行事件的記錄 (包含 Redshift 的事件)，請建立追蹤。CloudTrail 會使用「追蹤」**將日誌檔案傳送至 Amazon S3 儲存貯體。根據預設，當您在主控台建立線索時，線索會套用到所有 AWS 區域。該追蹤會記錄來自 AWS 分割區中所有區域的事件，並將日誌檔案交付到您指定的 Amazon S3 儲存貯體。此外，您可以設定其他 AWS 服務，以進一步分析和處理 CloudTrail 日誌中所收集的事件資料。如需詳細資訊，請參閱《AWS CloudTrail 使用者指南》** 中的下列主題：
+ [建立追蹤的概觀](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 支援的服務和整合](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [設定 CloudTrail 的 Amazon SNS 通知](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [從多個區域接收 CloudTrail 日誌檔案](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)，以及[從多個帳戶接收 CloudTrail 日誌檔案](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

CloudTrail 會記錄所有 Amazon Redshift、Amazon Redshift Serverless、資料 API、資料共用和查詢編輯器 v2 動作。例如，對 `AuthorizeDatashare`、`CreateNamespace`、`ExecuteStatement` 以及 `CreateConnection` 動作發出的呼叫會在 CloudTrail 日誌檔案中產生項目。

每一筆事件或日誌專案都會包含產生請求者的資訊。身分資訊可協助您判斷下列事項：
+ 該請求是否使用根或使用者憑證提出。
+ 提出該請求時，是否使用了特定角色或聯合身分使用者的暫時安全憑證。
+ 該請求是否由另一項 AWS 服務提出。

如需詳細資訊，請參閱《AWS CloudTrail 使用者指南》**中的 [CloudTrail userIdentity 元素](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

## 日誌檔案項目
<a name="understanding-cloudtrail-log-files"></a>

追蹤**是一種組態，允許事件以日誌檔案的形式交付至您指定的 Amazon S3 儲存貯體。CloudTrail 日誌檔案包含一或多個日誌專案。一個*事件*為任何來源提出的單一請求，並包含請求動作、請求的日期和時間、請求參數等資訊。CloudTrail 日誌檔並非依公有 API 呼叫的堆疊追蹤排序，因此不會以任何特定順序出現。

## Amazon Redshift 資料共用範例
<a name="datashare-cloudtrail-example"></a>

以下範例顯示的 CloudTrail 日誌項目會說明 `AuthorizeDataShare` 操作。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AKIAIOSFODNN7EXAMPLE:janedoe",
        "arn": "arn:aws:sts::111122223333:user/janedoe",
        "accountId": "111122223333",
        "accessKeyId": "AKIAI44QH8DHBEXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AKIAIOSFODNN7EXAMPLE:janedoe",
                "arn": "arn:aws:sts::111122223333:user/janedoe",
                "accountId": "111122223333",
                "userName": "janedoe"
            },
            "attributes": {
                "creationDate": "2021-08-02T23:40:45Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2021-08-02T23:40:58Z",
    "eventSource": "redshift.amazonaws.com",
    "eventName": "AuthorizeDataShare",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "3.227.36.75",
    "userAgent":"aws-cli/1.18.118 Python/3.6.10 Linux/4.9.217-0.1.ac.205.84.332.metal1.x86_64 botocore/1.17.41", 
    "requestParameters": {
        "dataShareArn": "arn:aws:redshift:us-east-1:111122223333:datashare:4c64c6ec-73d5-42be-869b-b7f7c43c7a53/testshare",
        "consumerIdentifier": "555555555555"
    },
    "responseElements": {
        "dataShareArn": "arn:aws:redshift:us-east-1:111122223333:datashare:4c64c6ec-73d5-42be-869b-b7f7c43c7a53/testshare",
        "producerNamespaceArn": "arn:aws:redshift:us-east-1:123456789012:namespace:4c64c6ec-73d5-42be-869b-b7f7c43c7a53",
        "producerArn": "arn:aws:redshift:us-east-1:111122223333:namespace:4c64c6ec-73d5-42be-869b-b7f7c43c7a53",
        "allowPubliclyAccessibleConsumers": true,
        "dataShareAssociations": [
            {
                "consumerIdentifier": "555555555555",
                "status": "AUTHORIZED",
                "createdDate": "Aug 2, 2021 11:40:56 PM",
                "statusChangeDate": "Aug 2, 2021 11:40:57 PM"
            }
        ]
    },
    "requestID": "87ee1c99-9e41-42be-a5c4-00495f928422",
    "eventID": "03a3d818-37c8-46a6-aad5-0151803bdb09",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

## Amazon Redshift Serverless 範例
<a name="serverless-cloudtrail-example"></a>

Amazon Redshift Serverless 已與 AWS CloudTrail 整合，以提供在 Amazon Redshift Serverless 中所採取動作的記錄。CloudTrail 會將 Amazon Redshift Serverless 的所有 API 呼叫擷取為事件。如需 Amazon Redshift Serverless 功能的詳細資訊，請參閱 [Amazon Redshift Serverless 功能概觀](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-considerations.html)。

以下範例顯示的是展示 `CreateNamespace` 動作的 CloudTrail 日誌項目。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AAKEOFPINEXAMPLE:admin",
        "arn": "arn:aws:sts::111111111111:assumed-role/admin/admin",
        "accountId": "111111111111",
        "accessKeyId": "AAKEOFPINEXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AAKEOFPINEXAMPLE",
                "arn": "arn:aws:iam::111111111111:role/admin",
                "accountId": "111111111111",
                "userName": "admin"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2022-03-21T20:51:58Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2022-03-21T23:15:40Z",
    "eventSource": "redshift-serverless.amazonaws.com",
    "eventName": "CreateNamespace",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "56.23.155.33",
    "userAgent": "aws-cli/2.4.14 Python/3.8.8 Linux/5.4.181-109.354.amzn2int.x86_64 exe/x86_64.amzn.2 prompt/off command/redshift-serverless.create-namespace",
    "requestParameters": {
        "adminUserPassword": "HIDDEN_DUE_TO_SECURITY_REASONS",
        "adminUsername": "HIDDEN_DUE_TO_SECURITY_REASONS",
        "dbName": "dev",
        "namespaceName": "testnamespace"
    },
    "responseElements": {
        "namespace": {
            "adminUsername": "HIDDEN_DUE_TO_SECURITY_REASONS",
            "creationDate": "Mar 21, 2022 11:15:40 PM",
            "defaultIamRoleArn": "",
            "iamRoles": [],
            "logExports": [],
            "namespaceArn": "arn:aws:redshift-serverless:us-east-1:111111111111:namespace/befa5123-16c2-4449-afca-1d27cb40fc99",
            "namespaceId": "8b726a0c-16ca-4799-acca-1d27cb403599",
            "namespaceName": "testnamespace",
            "status": "AVAILABLE"
        }
    },
    "requestID": "ed4bb777-8127-4dae-aea3-bac009999163",
    "eventID": "1dbee944-f889-4beb-b228-7ad0f312464",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111111111111",
    "eventCategory": "Management",
}
```

## Amazon Redshift 資料 API 範例
<a name="data-api-cloudtrail"></a>

以下範例顯示的是展示 `ExecuteStatement` 動作的 CloudTrail 日誌項目。

```
{
    "eventVersion":"1.05",
    "userIdentity":{
        "type":"IAMUser",
        "principalId":"AKIAIOSFODNN7EXAMPLE:janedoe",
        "arn":"arn:aws:sts::123456789012:user/janedoe",
        "accountId":"123456789012",
        "accessKeyId":"AKIAI44QH8DHBEXAMPLE",
        "userName": "janedoe"
    },
    "eventTime":"2020-08-19T17:55:59Z",
    "eventSource":"redshift-data.amazonaws.com",
    "eventName":"ExecuteStatement",
    "awsRegion":"us-east-1",
    "sourceIPAddress":"192.0.2.0",
    "userAgent":"aws-cli/1.18.118 Python/3.6.10 Linux/4.9.217-0.1.ac.205.84.332.metal1.x86_64 botocore/1.17.41",
    "requestParameters":{
        "clusterIdentifier":"example-cluster-identifier",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "sql":"***OMITTED***"
    },
    "responseElements":{
        "clusterIdentifier":"example-cluster-identifier",
        "createdAt":"Aug 19, 2020 5:55:58 PM",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "id":"5c52b37b-9e07-40c1-98de-12ccd1419be7"
    },
    "requestID":"00c924d3-652e-4939-8a7a-cd0612eeb8ac",
    "eventID":"c1fb7076-102f-43e5-9ec9-40820bcc1175",
    "readOnly":false,
    "eventType":"AwsApiCall",
    "recipientAccountId":"123456789012"
}
```

以下範例顯示的是展示 `ExecuteStatement` 動作、顯示用於等冪性之 `clientToken` 的 CloudTrail 日誌項目。

```
{
    "eventVersion":"1.05",
    "userIdentity":{
        "type":"IAMUser",
        "principalId":"AKIAIOSFODNN7EXAMPLE:janedoe",
        "arn":"arn:aws:sts::123456789012:user/janedoe",
        "accountId":"123456789012",
        "accessKeyId":"AKIAI44QH8DHBEXAMPLE",
        "userName": "janedoe"
    },
    "eventTime":"2020-08-19T17:55:59Z",
    "eventSource":"redshift-data.amazonaws.com",
    "eventName":"ExecuteStatement",
    "awsRegion":"us-east-1",
    "sourceIPAddress":"192.0.2.0",
    "userAgent":"aws-cli/1.18.118 Python/3.6.10 Linux/4.9.217-0.1.ac.205.84.332.metal1.x86_64 botocore/1.17.41",
    "requestParameters":{
        "clusterIdentifier":"example-cluster-identifier",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "sql":"***OMITTED***",
        "clientToken":"32db2e10-69ac-4534-b3fc-a191052616ce"
    },
    "responseElements":{
        "clusterIdentifier":"example-cluster-identifier",
        "createdAt":"Aug 19, 2020 5:55:58 PM",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "id":"5c52b37b-9e07-40c1-98de-12ccd1419be7"
    },
    "requestID":"00c924d3-652e-4939-8a7a-cd0612eeb8ac",
    "eventID":"c1fb7076-102f-43e5-9ec9-40820bcc1175",
    "readOnly":false,
    "eventType":"AwsApiCall",
    "recipientAccountId":"123456789012"
}
```

## Amazon Redshift 查詢編輯器 v2 範例
<a name="query-editor-cloudtrail"></a>

以下範例顯示的是展示 `CreateConnection` 動作的 CloudTrail 日誌項目。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AAKEOFPINEXAMPLE:session",
        "arn": "arn:aws:sts::123456789012:assumed-role/MyRole/session",
        "accountId": "123456789012",
        "accessKeyId": "AKIAI44QH8DHBEXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AAKEOFPINEXAMPLE",
                "arn": "arn:aws:iam::123456789012:role/MyRole",
                "accountId": "123456789012",
                "userName": "MyRole"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2022-09-21T17:19:02Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2022-09-21T22:22:05Z",
    "eventSource": "sqlworkbench.amazonaws.com",
    "eventName": "CreateConnection",
    "awsRegion": "ca-central-1",
    "sourceIPAddress": "192.2.0.2",
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0",
    "requestParameters": {
        "password": "***",
        "databaseName": "***",
        "isServerless": false,
        "name": "***",
        "host": "redshift-cluster-2.c8robpbxvbf9.ca-central-1.redshift.amazonaws.com",
        "authenticationType": "***",
        "clusterId": "redshift-cluster-2",
        "username": "***",
        "tags": {
            "sqlworkbench-resource-owner": "AAKEOFPINEXAMPLE:session"
        }
    },
    "responseElements": {
        "result": true,
        "code": "",
        "data": {
            "id": "arn:aws:sqlworkbench:ca-central-1:123456789012:connection/ce56b1be-dd65-4bfb-8b17-12345123456",
            "name": "***",
            "authenticationType": "***",
            "databaseName": "***",
            "secretArn": "arn:aws:secretsmanager:ca-central-1:123456789012:secret:sqlworkbench!7da333b4-9a07-4917-b1dc-12345123456-qTCoFm",
            "clusterId": "redshift-cluster-2",
            "dbUser": "***",
            "userSettings": "***",
            "recordDate": "2022-09-21 22:22:05",
            "updatedDate": "2022-09-21 22:22:05",
            "accountId": "123456789012",
            "tags": {
                "sqlworkbench-resource-owner": "AAKEOFPINEXAMPLE:session"
            },
            "isServerless": false
        }
    },
    "requestID": "9b82f483-9c03-4cdd-bb49-a7009e7da714",
    "eventID": "a7cdd442-e92f-46a2-bc82-2325588d41c3",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management"
}
```

## AWS CloudTrail 日誌中的 Amazon Redshift 帳戶 ID
<a name="cloudtrail-rs-acct-ids"></a>

當 Amazon Redshift 代表您呼叫另一個 AWS 服務時，即會使用屬於 Amazon Redshift 的帳戶 ID 來記錄呼叫。而不會使用您的帳戶 ID 來記錄呼叫。例如，假設 Amazon Redshift 呼叫 AWS Key Management Service (AWS KMS) 操作 (例如 `CreateGrant`、`Decrypt`、`Encrypt` 和 `RetireGrant`) 來管理叢集上的加密。在此情況下，AWS CloudTrail 會使用 Amazon Redshift 帳戶 ID 來記錄呼叫。

呼叫其他 AWS 服務時，Amazon Redshift 會使用下表中的帳戶 ID。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/logging-with-cloudtrail.html)

下列範例顯示 Amazon Redshift 所呼叫之 AWS KMS Decrypt 操作的 CloudTrail 日誌項目。

```
{

    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAI5QPCMKLTL4VHFCYY:i-0f53e22dbe5df8a89",
        "arn": "arn:aws:sts::790247189693:assumed-role/prod-23264-role-wp/i-0f53e22dbe5df8a89",
        "accountId": "790247189693",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2017-03-03T16:24:54Z"
            },
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAI5QPCMKLTL4VHFCYY",
                "arn": "arn:aws:iam::790247189693:role/prod-23264-role-wp",
                "accountId": "790247189693",
                "userName": "prod-23264-role-wp"
            }
        }
    },
    "eventTime": "2017-03-03T17:16:51Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "52.14.143.61",
    "userAgent": "aws-internal/3",
    "requestParameters": {
        "encryptionContext": {
            "aws:redshift:createtime": "20170303T1710Z",
            "aws:redshift:arn": "arn:aws:redshift:us-east-2:123456789012:cluster:my-dw-instance-2"
        }
    },
    "responseElements": null,
    "requestID": "30d2fe51-0035-11e7-ab67-17595a8411c8",
    "eventID": "619bad54-1764-4de4-a786-8898b0a7f40c",
    "readOnly": true,
    "resources": [
        {
            "ARN": "arn:aws:kms:us-east-2:123456789012:key/f8f4f94f-e588-4254-b7e8-078b99270be7",
            "accountId": "123456789012",
            "type": "AWS::KMS::Key"
        }
    ],
    "eventType": "AwsApiCall",
    "recipientAccountId": "123456789012",
    "sharedEventID": "c1daefea-a5c2-4fab-b6f4-d8eaa1e522dc"

}
```

# Amazon Redshift 的合規驗證
<a name="security-compliance"></a>

在多個合規計畫中，第三方稽核人員會評估 Amazon Redshift 的安全與AWS合規。這些計劃包括 SOC、PCI、FedRAMP、HIPAA 等等。

如需特定合規計劃範圍內AWS的服務清單，請參閱[AWS合規計劃範圍內的服務](https://aws.amazon.com/compliance/services-in-scope/)。如需一般資訊，請參閱 [AWS 合規計劃](https://aws.amazon.com/compliance/programs/)。

您可以使用 下載第三方稽核報告AWS Artifact。如需詳細資訊，請參閱在 [AWSArtifact 中下載報告](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)。

使用 Amazon Redshift 時的合規責任會取決於資料的敏感度、組織的合規目標，以及適用法律和法規。如果您使用 Amazon Redshift 符合 HIPAA、PCI 或 FedRAMP 等標準， AWS會提供資源來協助：
+ [安全與合規快速入門指南](https://aws.amazon.com/quickstart/?awsf.quickstart-homepage-filter=categories%23security-identity-compliance)，討論部署以安全與合規為中心之基準環境的架構考量和步驟AWS。
+ [HIPAA 安全與合規架構白皮書](https://docs.aws.amazon.com/whitepapers/latest/architecting-hipaa-security-and-compliance-on-aws/architecting-hipaa-security-and-compliance-on-aws.html)說明公司如何使用 AWS來建立符合 HIPAA 規範的應用程式。
+ 可能適用於您產業和據點的[AWS合規資源](https://aws.amazon.com/compliance/resources/)、工作手冊和指南。
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html)AWS服務可以評估資源組態符合內部實務、產業準則和法規的程度。
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)AWS服務提供 內安全狀態的全方位檢視AWS，可協助您檢查是否符合安全產業標準和最佳實務。Security Hub CSPM 使用安全控制來評估資源組態和安全標準，以協助您符合各種合規架構。如需使用 Security Hub CSPM 評估 Amazon Redshift 資源的詳細資訊，請參閱*AWS Security Hub《 使用者指南*》中的 [Amazon Redshift 控制項](https://docs.aws.amazon.com/securityhub/latest/userguide/redshift-controls.html)。

以下合規和安全文件涵蓋 Amazon Redshift，可透過 隨需提供AWS Artifact。如需詳細資訊，請參閱[AWS Artifact](https://aws.amazon.com/artifact)。
+ Cloud Computing Compliance Controls Catalogue (C5)
+ ISO 27001:2013 適用性聲明 (SoA)
+ ISO 27001:2013 認證
+ ISO 27017:2015 適用性聲明 (SoA)
+ ISO 27017:2015 認證
+ ISO 27018:2015 適用性聲明 (SoA)
+ ISO 27018:2014 認證
+ ISO 9001:2015 認證
+ PCI DSS 合規聲明文件 (AOC) 與責任摘要
+ 服務組織控制 (SOC) 1 報告
+ 服務組織控制 (SOC) 2 報告
+ 服務組織控制 (SOC) 2 報告，針對機密性

# Amazon Redshift 中的復原能力
<a name="security-disaster-recovery-resiliency"></a>

AWS 全球基礎設施是以 AWS 區域與可用區域 (AZ) 為中心建置的。AWS區域提供多個分開且隔離的實際可用區域，並以具備低延遲、高輸送量和高度備援特性的聯網相互連結。透過可用區域，您所設計與操作的應用程式和資料庫，就能夠在可用區域之間自動容錯移轉，而不會發生中斷。可用區域的可用性、容錯能力和擴展性都比傳統單一或多個資料中心的基礎設施高。

幾乎所有 AWS 區域都有多個可用區域和資料中心。您可以在相同區域中的多個可用區域間部署應用程式，以提供容錯能力與低延遲效能。

若要將叢集移至另一個可用區域，而不遺失任何資料或應用程式變更，您可以為叢集設定重新定位。透過重新定位，您可以在叢集上發生服務中斷時繼續操作，將所受影響降到最低。開啟叢集重新定位時，Amazon Redshift 可能會在某些情況下選擇將叢集重新定位。如需 Amazon Redshift 中重新定位的相關資訊，請參閱[重新定位叢集](managing-cluster-recovery.md)。

在可用區域發生意外事件的故障案例中，您可以設定多個可用區域 (多可用區) 部署，以確保 Amazon Redshift 資料倉儲能夠繼續運作。Amazon Redshift 會在可透過單一端點存取的兩個可用區域中部署相等的運算資源。如果整個可用區域發生故障，便可使用第二個可用區域中的剩餘運算資源繼續處理工作負載。如需異地同步備份部署的相關資訊，請參閱[多可用區域部署](managing-cluster-multi-az.md)。

如需 AWS 區域與可用區域的相關資訊，請參閱 [AWS 全球基礎設施](https://aws.amazon.com/about-aws/global-infrastructure/)。如需使用 Amazon Redshift 進行災難復原的詳細資訊，請參閱[使用 Amazon Redshift 實作災難復原](https://aws.amazon.com/blogs/big-data/implement-disaster-recovery-with-amazon-redshift/)。

. 

# Amazon Redshift 的基礎設施安全
<a name="security-network-isolation"></a>

Amazon Redshift 是受管服務，受到 AWS 全球網路安全的保護。如需 AWS 安全服務以及如何 AWS 保護基礎設施的資訊，請參閱[AWS 雲端安全](https://aws.amazon.com/security/)。若要使用基礎設施安全的最佳實務來設計您的 AWS 環境，請參閱*安全支柱 AWS Well-Architected Framework* 中的[基礎設施保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 發佈的 API 呼叫，透過網路存取 Amazon Redshift。使用者端必須支援下列專案：
+ Transport Layer Security (TLS)。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 具備完美轉送私密(PFS)的密碼套件，例如 DHE (Ephemeral Diffie-Hellman)或 ECDHE (Elliptic Curve Ephemeral Diffie-Hellman)。現代系統(如 Java 7 和更新版本)大多會支援這些模式。

## 網路隔離
<a name="network-isolation"></a>

以 Amazon VPC 服務為基礎的虛擬私有雲端 (VPC) 是您在 AWS 雲端中以邏輯方式隔離的私有網路。您可以執行下列步驟，在 VPC 內部署 Amazon Redshift 叢集或 Redshift Serverless 工作群組：
+ 在 區域中建立 VPC AWS 。如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[什麼是 Amazon VPC？](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)。
+ 建立兩個或多個私有 VPC 子網路。如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的 [VPC 和子網路](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html)。
+ 部署 Amazon Redshift 叢集或 Redshift Serverless 工作群組。如需詳細資訊，請參閱 [Redshift 資源的子網路](working-with-cluster-subnet-groups.md) 或 [工作群組和命名空間](serverless-workgroup-namespace.md) 。

依預設會在佈建時鎖定 Amazon Redshift 叢集。若要允許來自 Amazon Redshift 用戶端的傳入網路流量，請將 VPC 安全群組與 Amazon Redshift 叢集相關聯。如需詳細資訊，請參閱[Redshift 資源的子網路](working-with-cluster-subnet-groups.md)。

若要僅允許往返特定 IP 位址範圍的流量，請更新您的 VPC 的安全群組。一個例子是僅允許往返您的企業網路的流量。

設定與 Amazon Redshift 叢集加上標籤之子網路相關聯的網路存取控制清單時，請確保將個別 AWS 區域的 S3 CIDR 範圍新增至輸入和輸出規則的允許清單。這樣做可讓您執行以 S3 為基礎的操作，例如 Redshift Spectrum、COPY 和 UNLOAD，而不會造成中斷。

以下範例命令會在 us-east-1 區域中剖析 Amazon S3 所使用的所有 IPv4 地址的 JSON 回應。

```
curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.region=="us-east-1") | select(.service=="S3") | .ip_prefix'

54.231.0.0/17

52.92.16.0/20

52.216.0.0/15
```

如需如何取得特定區域之 S3 IP 範圍的指示，請參閱 [AWS IP 地址範圍](https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)。

Amazon Redshift 支援將叢集部署至專用租用 VPC。如需詳細資訊，請參閱《Amazon EC2 使用者指南》**中的[專用預留執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)。

## Amazon Redshift 安全群組
<a name="working-with-security-groups"></a>

當您佈建 Amazon Redshift 叢集時，依預設它會遭鎖定，以便沒有人可以存取它。若要授予其他使用者 Amazon Redshift 叢集的傳入存取，您可使叢集與安全群組建立關聯。如果您是在 EC2-VPC 平台上，則可以使用現有的 Amazon VPC 安全群組，或定義新的安全群組，然後使它與叢集建立關聯。如需在 EC2-VPC 平台上管理叢集的相關資訊，請參閱[VPC 中的 Redshift 資源](managing-clusters-vpc.md)。

## 介面 VPC 端點
<a name="security-private-link"></a>

您可以在虛擬私有雲端 (VPC) 中使用介面 VPC 端點 (AWS PrivateLink) 直接連線至 Amazon Redshift 和 Amazon Redshift Serverless API 服務，而非透過網際網路進行連線。如需 Amazon Redshift API 動作的相關資訊，請參閱《Amazon Redshift API 參考》**中的[動作](https://docs.aws.amazon.com/redshift/latest/APIReference/API_Operations.html)。如需 Redshift Serverless API 動作的相關資訊，請參閱《Amazon Redshift Serverless API 參考》**中的[動作](https://docs.aws.amazon.com/redshift-serverless/latest/APIReference/API_Operations.html)。如需 AWS PrivateLink的相關資訊，請參閱《Amazon VPC 使用者指南》**中的[界面 VPC 端點 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)。請注意，叢集或工作群組的 JDBC/ODBC 連線不屬於 Amazon Redshift API 服務的一部分。

當您使用界面 VPC 端點時，VPC 與 Amazon Redshift 或 Redshift Serverless 之間的通訊會完全在 AWS 網路中執行，這可提供更高的安全性。每個 VPC 端點皆會由一個或多個具私有 IP 地址彈性網路界面來表示，而該界面位於 VPC 子網路中。如需彈性網路界面的詳細資訊，請參閱 *Amazon EC2 使用者指南*中的[彈性網路界面](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。

界面 VPC 端點會將 VPC 直接連線到 Amazon Redshift。它不使用網際網路閘道、網路位址轉譯 (NAT) 裝置、虛擬私有網路 (VPN) 連線或 Direct Connect 連線。VPC 中的執行個體不需要公有 IP 地址，就能與 Amazon Redshift API 進行通訊。

若要透過 VPC 使用 Amazon Redshift 或 Redshift Serverless，您有兩個選項。一個是從 VPC 內部的執行個體進行連線。另一個方法是使用 Site-to-Site VPN 選項 或 將私有網路連接到 VPC Direct Connect。如需 Site-to-Site VPN 選項的詳細資訊，請參閱《*Amazon VPC 使用者指南*》中的 [VPN 連線](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)。如需有關 Direct Connect的資訊，請參閱《Direct Connect 使用者指南》**中的[建立連線](https://docs.aws.amazon.com/directconnect/latest/UserGuide/create-connection.html)。

您可以使用 AWS 管理主控台 或 AWS Command Line Interface (AWS CLI) 命令，建立介面 VPC 端點以連線至 Amazon Redshift。如需詳細資訊，請參閱[建立界面端點](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpce-interface.html#create-interface-endpoint)。

在您建立界面 VPC 端點後，您可以為該端點啟用私有 DNS 主機名稱。若您這樣做，預設端點如下所示：
+ **Amazon Redshift 佈建**：`https://redshift.Region.amazonaws.com`
+ **Amazon Redshift Serverless**：`https://redshift-serverless.Region.amazonaws.com`

如果您未啟用私有 DNS 主機名稱，Amazon VPC 會透過下列格式提供 DNS 端點名稱供您使用。
+ **Amazon Redshift 佈建**：`VPC_endpoint_ID.redshift.Region.vpce.amazonaws.com`
+ **Amazon Redshift Serverless**：`VPC_endpoint_ID.redshift-serverless.Region.vpce.amazonaws.com`

如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[介面 VPC 端點 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)。

Amazon Redshift 和 Redshift Serverless 支援會在 VPC 內呼叫所有 [Amazon Redshift API 操作](https://docs.aws.amazon.com/redshift/latest/APIReference/API_Operations.html)和 [Redshift Serverless API 操作](https://docs.aws.amazon.com/redshift-serverless/latest/APIReference/API_Operations.html)。

可以將 VPC 端點政策附接至某個 VPC 端點，以控制 AWS Identity and Access Management (IAM) 主體的存取權。您也可以將安全群組與 VPC 端點建立關聯，以根據網路流量的來源和目的地來控制傳入和傳出存取。範例是 IP 地址範圍。如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[使用 VPC 端點控制服務的存取](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。

### Amazon Redshift 的 VPC 端點政策
<a name="security-private-link-vpc_endpoint-policy"></a>

您可以為 Amazon Redshift 的 VPC 端點建立政策，以指定下列各項：
+ 可執行或不可執行動作的主體
+ 可執行的動作
+ 可在其中執行動作的資源

如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[使用 VPC 端點控制對服務的存取](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。

接下來，您可以找到 VPC 端點政策的範例。

#### Amazon Redshift 佈建端點政策範例
<a name="security-private-link-examples-provisioned"></a>

接下來，您可以找到 Amazon Redshift 佈建的 VPC 端點政策範例。

##### 範例：拒絕來自指定 AWS 帳戶的所有存取的 VPC 端點政策
<a name="security-private-link-example-1"></a>

下列 VPC 端點政策會拒絕 AWS 帳戶使用此端點存取資源`123456789012`。

```
{
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 範例：可用來只向指定 IAM 角色允許 VPC 存取的 VPC 端點政策
<a name="security-private-link-example-1.1"></a>

下列 VPC 端點政策僅允許完整存取 AWS 帳戶 *123456789012* *`redshiftrole`*中的 IAM 角色。所有其他 IAM 主體均無法存取該端點。

```
   {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:role/redshiftrole"
                ]
            }
        }]
}
```

這只是範例。在大多數使用案例中，建議您附加特定動作的許可，以縮小許可範圍。

##### 範例：可用來只向指定 IAM 主體 (使用者) 允許 VPC 存取的 VPC 端點政策
<a name="security-private-link-example-2"></a>

下列 VPC 端點政策僅允許 AWS 帳戶 *123456789012* *`redshiftadmin`*中的 IAM 使用者完整存取。所有其他 IAM 主體均無法存取該端點。

```
   {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:user/redshiftadmin"
                ]
            }
        }]
}
```

這只是範例。在大多數使用案例中，建議您先附加許可給某個角色，再指派給使用者。此外，也建議您使用特定動作來縮小許可範圍。

##### 範例：可用來允許唯讀 Amazon Redshift 操作的 VPC 端點政策
<a name="security-private-link-example-3"></a>

下列 VPC 端點政策僅允許 AWS 帳戶*`123456789012`*執行指定的 Amazon Redshift 動作。

指定的動作會為 Amazon Redshift 提供等效的唯讀存取權。拒絕指定的帳戶存取在該 VPC 上的所有其他動作。此外，也會拒絕所有其他帳戶的任何存取。如需 Amazon Redshift 動作的清單，請參閱《IAM 使用者指南》**中的 [Amazon Redshift 的動作、資源和條件金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshift.html)。

```
  {
    "Statement": [
        {
            "Action": [
                "redshift:DescribeAccountAttributes",
                "redshift:DescribeClusterParameterGroups",
                "redshift:DescribeClusterParameters",
                "redshift:DescribeClusterSecurityGroups",
                "redshift:DescribeClusterSnapshots",
                "redshift:DescribeClusterSubnetGroups",
                "redshift:DescribeClusterVersions",
                "redshift:DescribeDefaultClusterParameters",
                "redshift:DescribeEventCategories",
                "redshift:DescribeEventSubscriptions",
                "redshift:DescribeHsmClientCertificates",
                "redshift:DescribeHsmConfigurations",
                "redshift:DescribeLoggingStatus",
                "redshift:DescribeOrderableClusterOptions",
                "redshift:DescribeQuery",
                "redshift:DescribeReservedNodeOfferings",
                "redshift:DescribeReservedNodes",
                "redshift:DescribeResize",
                "redshift:DescribeSavedQueries",
                "redshift:DescribeScheduledActions",
                "redshift:DescribeSnapshotCopyGrants",
                "redshift:DescribeSnapshotSchedules",
                "redshift:DescribeStorage",
                "redshift:DescribeTable",
                "redshift:DescribeTableRestoreStatus",
                "redshift:DescribeTags",
                "redshift:FetchResults",
                "redshift:GetReservedNodeExchangeOfferings"            
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 範例：拒絕指定叢集存取的 VPC 端點政策
<a name="security-private-link-example-4"></a>

下列 VPC 端點政策會允許所有帳戶和主體擁有完整存取權。同時，它會拒絕 AWS 帳戶*`123456789012`*對叢集 ID 為 的 Amazon Redshift 叢集上執行動作的任何存取`my-redshift-cluster`。仍然允許其他不支援叢集資源層級許可的 Amazon Redshift 動作。如需 Amazon Redshift 動作及其對應資源類型的清單，請參閱《IAM 使用者指南》**中的 [Amazon Redshift 的動作、資源和條件金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshift.html)。

```
 {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "arn:aws:redshift:us-east-1:123456789012:cluster:my-redshift-cluster",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

#### Amazon Redshift Serverless 端點政策範例
<a name="security-private-link-examples-serverless"></a>

接下來，您可以找到 Redshift Serverless 的 VPC 端點政策範例。

##### 範例：允許唯讀 Redshift Serverless 操作的 VPC 端點政策
<a name="security-private-link-serverless-example-1"></a>

下列 VPC 端點政策僅允許 AWS 帳戶*`123456789012`*執行指定的 Redshift Serverless 動作。

指定的動作會為 Redshift Serverless 提供同等的唯讀存取權。拒絕指定的帳戶存取在該 VPC 上的所有其他動作。此外，也會拒絕所有其他帳戶的任何存取。如需 Redshift Serverless 動作的清單，請參閱《IAM 使用者指南》**中的 [Redshift Serverless 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshiftserverless.html)。

```
  {
    "Statement": [
        {
            "Action": [
                "redshift-serverless:DescribeOneTimeCredit",
                "redshift-serverless:GetCustomDomainAssociation",
                "redshift-serverless:GetEndpointAccess",
                "redshift-serverless:GetNamespace",
                "redshift-serverless:GetRecoveryPoint",
                "redshift-serverless:GetResourcePolicy",
                "redshift-serverless:GetScheduledAction",
                "redshift-serverless:GetSnapshot",
                "redshift-serverless:GetTableRestoreStatus",
                "redshift-serverless:GetUsageLimit",
                "redshift-serverless:GetWorkgroup"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 範例：拒絕指定工作群組進行存取的 VPC 端點政策
<a name="security-private-link-serverless-example-2"></a>

下列 VPC 端點政策會允許所有帳戶和主體擁有完整存取權。同時，它會拒絕 AWS 帳戶*`123456789012`*對工作群組 ID 為 的 Amazon Redshift 工作群組上執行動作的任何存取`my-redshift-workgroup`。仍然允許其他不支援工作群組的資源層級許可的 Amazon Redshift 動作。如需 Redshift Serverless 動作及其對應資源類型的清單，請參閱《IAM 使用者指南》**中的 [Redshift Serverless 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshiftserverless.html)。

```
 {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "arn:aws:redshift-serverless:us-east-1:123456789012:workgroup:my-redshift-workgroup",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

# Amazon Redshift 中的組態與漏洞分析
<a name="security-vulnerability-analysis-and-management"></a>

AWS 會處理訪客作業系統 (OS) 和資料庫修補、防火牆組態和災難復原 (DR) 等基本安全任務。這些程序已由認證的第三方進行檢閱。如需詳細資訊，請參閱 [Amazon Redshift 的合規驗證](security-compliance.md)、[共同責任模式](https://aws.amazon.com/compliance/shared-responsibility-model/)與[安全、身分和合規的最佳實務](https://aws.amazon.com/architecture/security-identity-compliance/)。

Amazon Redshift 會自動套用升級並修補資料倉儲，這樣您就能專注於應用程式本身，而不是管理。修補和升級會在可設定的維護時間期間套用。如需更多詳細資訊，請參閱 [維護時段](managing-cluster-considerations.md#rs-maintenance-windows)。

Amazon Redshift 查詢編輯器 v2 是 AWS 受管應用程式。所有修補程式和更新都會視需要由 AWS 套用。