建立臨時IAM認證 - Amazon Redshift

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

建立臨時IAM認證

在本節中,您可以瞭解如何將系統設定為產生暫時IAM型資料庫使用者認證,以及如何使用新認證登入資料庫。

高階的程序流程如下:

  1. 步驟 1:建立IAM單一登入存取權的IAM角色

    (選擇性) 您可以透過整合身分驗證和第三方身分供應商 (IdP) 來IAM驗證使用者以存取 Amazon Redshift 資料庫。

  2. 步驟 2:設定 SAML IdP 的宣告

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

  3. 步驟 3:建立具有呼叫權限的IAM角色 GetClusterCredentials

    您的SQL客戶端應用程序在調用GetClusterCredentials操作時假定用戶。如果您建立了身分識別提供者存取的IAM角色,則可以將必要的權限新增至該角色。

  4. 步驟 4:建立資料庫使用者和資料庫群組

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

  5. 步驟 5:設定JDBC或ODBC連線以使用IAM認證

    若要連接到您的 Amazon Redshift 資料庫,您可以將用SQL戶端設定為使用 Amazon Redshift JDBC 或ODBC驅動程式。

步驟 1:建立IAM單一登入存取權的IAM角色

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

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

如需詳細資訊,請參閱IAM使用指南中的身分識別提供者和同盟

在您可以使用 Amazon Redshift IdP 身份驗證之前,請先建立 AWS SAML身份提供者。您可以在IAM主控台中建立 IdP 以通知 AWS 關於 IdP 及其組態。這樣做建立你之間的信任 AWS 帳戶和 IdP。如需建立角色的步驟,請參閱《IAM使用者指南》中的〈建立 SAML 2.0 同盟 (主控台) 的角色〉

步驟 2:設定 SAML IdP 的宣告

建立IAM角色後,您可以在 IdP 應用程式中定義宣告規則,以將組織中的使用者或群組對應至IAM角色。如需詳細資訊,請參《IAM使用指南》中的 < 設定驗證回應的SAML宣告 >

如果您選擇使用選用的 GetClusterCredentials 參數 DbUserAutoCreate、和 DbGroups,則有兩個選項。您可以使用您的JDBC或ODBC連接設定參數的值,也可以透過將SAML屬性元素新增至 IdP 來設定值。如需 DbUserAutoCreateDbGroups 參數的詳細資訊,請參閱 步驟 5:設定JDBC或ODBC連線以使用IAM認證

注意

如果您使用IAM原則變數${redshift:DbUser},則會的資源策略 GetClusterCredentials取代DbUser為API作業要求內容所擷取的值,如的值所述。Amazon Redshift 驅動程式會使用連線所提供的DbUser變數值URL,而非作為SAML屬性提供的值。

為了協助保護此組態的安全,我們建議您使用IAM原則中的條件來驗證DbUser值,方法是使用RoleSessionName。您可以在中找到如何使用IAM策略設定條件的範例使用政策範例 GetClusterCredentials

若要設定 IdP 以設定 DbUserAutoCreateDbGroups 參數,請包含下列 Attribute 元素:

  • AttributeName性設置為「https://redshift.amazon.com/SAML/屬性DbUser/」的元素

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

    AttributeValue 元素中的值長度必須為小寫,開頭需為英文字母,只能包含英數字元、底線 (「_」)、加號 (「+」)、點號 (「.」)、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/屬性AutoCreate元素

    將 AttributeValue 元素設置為 true 以創建一個新的數據庫用戶(如果不存在)。將設定 AttributeValue 為 false 以指定資料庫使用者必須存在於 Amazon Redshift 資料庫中。

    <Attribute Name="https://redshift.amazon.com/SAML/Attributes/AutoCreate"> <AttributeValue>true</AttributeValue> </Attribute>
  • AttributeName性設置為設置為「屬性/」https://redshift.amazon.com/SAML/ 的元素 DbGroups

    此元素包含一或多個 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:建立具有呼叫權限的IAM角色 GetClusterCredentials

您的SQL客戶需要授權才能代表您調用GetClusterCredentials操作。若要提供授權,您應建立使用者或角色,並附加授予必要許可的政策。

建立具有呼叫權限的IAM角色 GetClusterCredentials
  1. 使用IAM服務建立使用者或角色。也可使用現有的使用者或角色,例如,如果您建立了身分識別提供者存取的IAM角色,您可以將必要的IAM原則附加至該角色。

  2. 連接具有呼叫 redshift:GetClusterCredentials 操作許可的許可政策。根據指定的選用參數而定,您也能在政策中允許或限制其他動作和資源:

    • 若要允許您的SQL用戶端擷取叢集 ID, AWS 區域和連接埠包括使用 Redshift 叢集資源呼叫redshift:DescribeClusters作業的權限。

    • 如果使用 AutoCreate 選項,請在 dbuser 資源中包含呼叫 redshift:CreateClusterUser 的許可。以下 Amazon 資源名稱(ARN)指定了 Amazon Redshift dbuser。Replace (取代) region, account-idcluster-name 與您的價值觀 AWS 地區、帳戶和叢集。用於 德布士名字」下方,指定登入叢集資料庫時使用的使用者名稱。

      arn:aws:redshift:region:account-id:dbuser:cluster-name/dbuser-name
    • (選擇性) 新增一ARN個以下列格式指定 Amazon Redshift dbname 資源的資源。Replace (取代) region, account-idcluster-name 與您的價值觀 AWS 地區、帳戶和叢集。針對 database-name,指定使用者將登入的資料庫名稱。

      arn:aws:redshift:region:account-id:dbname:cluster-name/database-name
    • 如果您使用 DbGroups 選項,請包含對 Amazon Redshift dbgroup 資源呼叫 redshift:JoinGroup 操作的許可,格式如下。Replace (取代) region, account-idcluster-name 與您的價值觀 AWS 地區、帳戶和叢集。針對 dbgroup-name,指定使用者登入時要加入的使用者群組名稱。

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

如需詳細資訊和範例,請參閱 的資源策略 GetClusterCredentials

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

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

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

重要

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

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

下列範例顯示允許IAM角色呼叫GetClusterCredentials作業的策略,其中包含自動建立新使用者並指定使用者登入時加入的群組的選項。"Resource": "*" 子句授予角色任何資源的存取權,包括叢集、資料庫使用者或使用者群組。

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

如需詳細資訊,請參閱 Amazon Redshift ARN 語法

步驟 4:建立資料庫使用者和資料庫群組

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

您可以使用您希望資料庫使用者在登入時加入的權限來建立IAM資料庫使用者群組。呼叫 GetClusterCredentials 操作時,您可指定新使用者於登入時加入的使用者群組名稱清單。這些群組成員資格僅適用於使用指定請求產生之登入資料所建立的工作階段。

建立資料庫使用者和資料庫群組
  1. 登入您的 Amazon Redshift 資料庫,然後使用以下方式建立資料庫使用者,CREATEUSER或使用變更現有使用ALTERUSER者。

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

    如果用戶想要與之互動,則需要以程式設計方式存取 AWS 的之外 AWS Management Console。 授與程式設計存取權的方式取決於存取的使用者類型 AWS.

    若要授與使用者程式設計存取權,請選擇下列其中一個選項。

    哪個使用者需要程式設計存取權? By

    人力身分

    (在IAM身分識別中心管理的使用者)

    使用臨時登入資料來簽署程式設計要求 AWS CLI, AWS SDKs,或 AWS APIs.

    請依照您要使用的介面所提供的指示操作。

    IAM 使用臨時登入資料來簽署程式設計要求 AWS CLI, AWS SDKs,或 AWS APIs. 遵循使用臨時登入資料中的指示 AWS《IAM使用者指南》中的資源。
    IAM

    (不建議使用)

    使用長期認證來簽署程式設計要求 AWS CLI, AWS SDKs,或 AWS APIs.

    請依照您要使用的介面所提供的指示操作。

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

    create user temp_creds_user password disable;

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

    alter user temp_creds_user password disable;
  3. 使用建立資料庫使用者群組CREATEGROUP

  4. 使用指GRANT令定義群組的存取權限。

步驟 5:設定JDBC或ODBC連線以使用IAM認證

您可以使用 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單一登入驗證

設定JDBC連線以使用IAM身分證明
  1. 為 Amazon Redshift 設定 2.1 版JDBC驅動程式的連線頁面下載最新的 Amazon Redshift JDBC 驅動程序。

  2. JDBCURL使用下列其中一種格式的IAM認證選項建立。若要使用IAM身份驗證,請按jdbc:redshift:照JDBCURL以下範例所示新增iam:至 Amazon Redshift。

    jdbc:redshift:iam://

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

    jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev
  3. 新增JDBC選項以提供IAM認證。您可以使用不同的JDBC選項組合來提供IAM認證。如需詳細資訊,請參閱 JDBC和建立資料庫使用者認證的ODBC選項

    以下URL指定 AccessKey ID 和 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
  4. 新增JDBC驅動程JDBC式用來呼叫GetClusterCredentialsAPI作業的選項。如果以程式設計方式呼叫GetClusterCredentialsAPI作業,請勿包含這些選項。

    下列範例包含選JDBCGetClusterCredentials項。

    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
設定ODBC連線以使用IAM認證

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

  1. 為您的作業系統安裝和設定最新的 Amazon Redshift OBDC 驅動程式。如需詳細資訊,請參閱 為 Amazon Redshift 設定ODBC驅動程式 2.x 版的連線 頁面。

    重要

    Amazon Redshift ODBC 驅動程序必須是 1.3.6.1000 或更高版本。

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

  3. 在 Microsoft 視窗作業系統上,存取 Amazon Redshift ODBC 驅動程式DSN設定視窗。

    1. Connection Settings (連線設定) 下,輸入下列資訊:

      • Data Source Name (資料來源名稱)

      • Server (伺服器) (選用)

      • Port (連接埠) (選用)

      • 資料庫

      如果您的使用者或角色具有呼叫 redshift:DescribeClusters 操作的許可,則只需要資料來源名稱資料庫。Amazon Redshift 使用ClusterId區域通過調用DescribeCluster操作來獲取服務器和端口。

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

    2. Authentication (身分驗證) 下方,選擇 Auth Type (驗證類型) 的值。

      針對每個驗證類型,輸入下列的值:

      AWS 設定檔

      輸入下列資訊:

      • ClusterID (ClusterID)

      • 區域

      • Profile name (設定檔名稱)

        輸入設定檔的名稱 AWS 包含ODBC連線選項值的組態檔案。如需詳細資訊,請參閱使用組態設定描述檔

      (選擇性) 提供ODBC驅動程式用來呼叫GetClusterCredentialsAPI作業之選項的詳細資訊:

      IAM認證

      輸入下列資訊:

      • ClusterID (ClusterID)

      • 區域

      • AccessKey身份證SecretAccessKey

        為IAM資料庫驗證設定之IAM角色或使用者的存取金鑰 ID 和秘密存取金鑰。

      • SessionToken

        SessionToken對於具有臨時認證的IAM角色是必需的。如需詳細資訊,請參閱暫時性安全登入資料

      提供ODBC驅動程式用來呼叫GetClusterCredentialsAPI作業之選項的詳細資訊:

      身分提供者:AD FS

      針對使用 AD FS 的 Windows 整合式身分驗證,請讓 User (使用者)Password (密碼) 保持空白。

      提供 IdP 詳細資訊:

      • IdP Host (IdP 主機)

        企業身分提供商主機的名稱。該名稱不得包含任何斜線 (/)。

      • IdP Port (IdP 連接埠) (選用)

        身分提供者使用的連接埠。預設為 443。

      • Preferred Role (偏好的角色)

        SAML聲明中Role屬性的多值AttributeValue元素中IAM角色的 Amazon 資源名稱 (ARN)。若要尋找偏好角色適用的值,請洽詢 IdP 管理員。如需詳細資訊,請參閱步驟 2:設定 SAML IdP 的宣告

      (選擇性) 提供ODBC驅動程式用來呼叫GetClusterCredentialsAPI作業之選項的詳細資訊:

      • DbUser

      • 使用者 AutoCreate

      • DbGroups

      如需詳細資訊,請參閱JDBC和建立資料庫使用者認證的ODBC選項

      身份提供者: PingFederate

      針對 User (使用者)Password (密碼),輸入 IdP 的使用者名稱和密碼。

      提供 IdP 詳細資訊:

      • IdP Host (IdP 主機)

        企業身分提供商主機的名稱。該名稱不得包含任何斜線 (/)。

      • IdP Port (IdP 連接埠) (選用)

        身分提供者使用的連接埠。預設為 443。

      • Preferred Role (偏好的角色)

        SAML聲明中Role屬性的多值AttributeValue元素中IAM角色的 Amazon 資源名稱 (ARN)。若要尋找偏好角色適用的值,請洽詢 IdP 管理員。如需詳細資訊,請參閱步驟 2:設定 SAML IdP 的宣告

      (選擇性) 提供ODBC驅動程式用來呼叫GetClusterCredentialsAPI作業之選項的詳細資訊:

      • DbUser

      • 使用者 AutoCreate

      • DbGroups

      如需詳細資訊,請參閱JDBC和建立資料庫使用者認證的ODBC選項

      身分提供者:Okta

      針對 User (使用者)Password (密碼),輸入 IdP 的使用者名稱和密碼。

      提供 IdP 詳細資訊:

      • IdP Host (IdP 主機)

        企業身分提供商主機的名稱。該名稱不得包含任何斜線 (/)。

      • IdP Port (IdP 連接埠)

        Okta 不會使用此值。

      • Preferred Role (偏好的角色)

        來自SAML宣告中Role屬性AttributeValue元素之IAM角色的 Amazon 資源名稱 (ARN)。若要尋找偏好角色適用的值,請洽詢 IdP 管理員。如需詳細資訊,請參閱步驟 2:設定 SAML IdP 的宣告

      • Okta App ID (Okta 應用程式 ID)

        Okta 應用程式的 ID。Okta 應用程式嵌入連結中「amazon_aws」後方的 App ID 值。請洽詢 IdP 管理員,以取得此值。

      (選擇性) 提供ODBC驅動程式用來呼叫GetClusterCredentialsAPI作業之選項的詳細資訊:

      • DbUser

      • 使用者 AutoCreate

      • DbGroups

      如需詳細資訊,請參閱JDBC和建立資料庫使用者認證的ODBC選項

      身分提供者:Azure AD

      針對 User (使用者)Password (密碼),輸入 IdP 的使用者名稱和密碼。

      針對叢集 ID區域,輸入叢集 ID 和 AWS 您的亞 Amazon Redshift 集群的區域。

      針對資料庫,輸入您為 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驅動程式用來呼叫GetClusterCredentialsAPI作業之選項的詳細資訊:

      • DbUser

      • 使用者 AutoCreate

      • DbGroups

      如需詳細資訊,請參閱JDBC和建立資料庫使用者認證的ODBC選項