一時的な IAM 認証情報の作成 - Amazon Redshift

一時的な IAM 認証情報の作成

このセクションでは、IAM ベースの一時的データベースユーザー認証情報を生成し、新しい認証情報を使用してデータベースにログオンするようシステムを設定する方法を示しています。

プロセスのおおまかな流れは次のとおりです。

  1. ステップ 1: IAM シングルサインオンアクセス用の IAM ロールを作成する

    (任意) IAM 認証と、サードパーティー認証プロバイダ (IdP) を統合して、Amazon Redshift データベースへのアクセスをユーザーに認証できます。

  2. ステップ 2: IdP の SAML アサーションを設定する

    (任意)IdP を使って IAM 認証を使用するには、組織のユーザーまたはグループを IAM ロールにマッピングするクレームルールを IdP アプリケーションで定義する必要があります。オプションで、属性要素を含めて GetClusterCredentials パラメータを設定できます。

  3. ステップ 3: GetClusterCredentials を呼び出すアクセス許可を持つ IAM ロールを作成する

    SQL クライアントアプリケーションは、GetClusterCredentials オペレーションを呼び出すときにユーザーを引き受けます。ID プロバイダアクセス用の IAM ロールを作成したら、そのロールに必要なアクセス権限を追加できます。

  4. ステップ 4: データベースユーザーとデータベースグループを作成する

    (任意)デフォルトでは、ユーザー名が存在しない場合、GetClusterCredentials は認証情報を新しいユーザーを作成します。ログオン時にユーザーが参加するユーザーグループを指定することもできます。デフォルトでは、データベースユーザーは PUBLIC グループに参加します。

  5. ステップ 5: IAM 認証情報を使用するように JDBC または ODBC 接続を設定する

    Amazon Redshift データベースに接続するには、Amazon Redshift JDBC または ODBC ドライバーを使用するよう SQL クライアントを設定します。

ステップ 1: IAM シングルサインオンアクセス用の IAM ロールを作成する

シングルサインオンアクセスに ID プロバイダを利用しない場合は、このステップを省略できます。

既に AWSの外部でユーザー ID を管理している場合、IAM 認証とサードパーティーの SAML-2.0 ID プロバイダー (IdP) を統合して、Amazon Redshift データベースへのユーザーのアクセスを認証できます。

詳細については、IAM ユーザーガイドID プロバイダーとフェデレーション を参照してください。

Amazon Redshift IdP 認証を使用する前に、AWS SAML ID プロバイダーを作成します。IAM コンソールで IdP を作成し、IdP およびその設定について AWS に通知できます。これにより、AWS アカウントと IdP 間の信頼が確立されます。ロールを作成する手順については、IAM ユーザーガイドから SAML 2.0 フェデレーション用のロール作成 (コンソール) を参照してください。

ステップ 2: IdP の SAML アサーションを設定する

IAM ロールを作成したら、組織のユーザーまたはグループを IAM ロールにマッピングするクレームルールを IdP アプリケーションで定義する必要があります。詳細については、IAM ユーザーガイド認証応答の SAML アサーションを設定する を参照してください。

オプションの GetClusterCredentials パラメータ DbUserAutoCreateDbGroupsを使用する場合は、2 つのオプションがあります。JDBC 接続または ODBC 接続でパラメータの値を設定することも、SAML 属性要素を IdP に追加して値を設定することもできます。DbUserAutoCreateDbGroups パラメータの詳細については、ステップ 5: IAM 認証情報を使用するように JDBC または ODBC 接続を設定するを参照してください。

注記

${redshift:DbUser}」で説明されているように、IAM ポリシー変数 GetClusterCredentials のリソースポリシー を使用する場合、DbUserの値は API オペレーションのリクエストコンテキストから取得した値で置き換えられます。Amazon Redshift ドライバーは、SAML 属性として提供される値ではなく、接続 URL から提供される DbUser 変数の値を使用します。

この接続の安全性を維持するには、IAM ポリシーの条件を使用して、DbUser 値を RoleSessionNameで検証することが推奨されます。IAM ポリシーを使用して条件を設定する方法の例は、GetClusterCredentials を使用するポリシーの例で参照できます。

DbUserAutoCreateDbGroups パラメータを設定するように IdP を設定するには、次の Attribute 要素を含めます。

  • Attribute 属性を持つ Name 要素は「https://redshift.amazon.com/SAML/Attributes/DbUser」に設定します。

    AttributeValue 要素は、Amazon Redshift データベースに接続するユーザー名に設定します。

    AttributeValue 要素の値は小文字のみで、先頭は文字にし、英数字、アンダースコア (_)、プラス記号 (+)、ドット (.)、アットマーク (@)、ハイフン (_) のみを含み、128 文字未満である必要があります。通常、ユーザー名はユーザー ID (例: bobsmith) またはメールアドレス (例: bobsmith@example.com) になります。値にスペースを含めることはできません (ユーザーの表示名を Bob Smith にするなど)。

    <Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbUser"> <AttributeValue>user-name</AttributeValue> </Attribute>
  • Name 属性を持つ Attribute 要素は「https://redshift.amazon.com/SAML/Attributes/AutoCreate」に設定します。

    存在していない場合に、新しいデータベースユーザーを作成するには、AttributeValue 要素を true に設定します。データベースユーザーが Amazon Redshift データベースに存在している必要があることを指定するには、AttributeValue を false に設定します。

    <Attribute Name="https://redshift.amazon.com/SAML/Attributes/AutoCreate"> <AttributeValue>true</AttributeValue> </Attribute>
  • Attribute 属性を持つ Name 要素は「https://redshift.amazon.com/SAML/Attributes/DbGroups」に設定します。

    この要素には、1 つ以上の AttributeValue 要素が含まれています。Amazon Redshift データベースに接続するとき、セッションの期間中に DbUser が参加するデータベースグループ名に各 AttributeValue 要素を設定します。

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

ステップ 3: GetClusterCredentials を呼び出すアクセス許可を持つ IAM ロールを作成する

SQL クライアントには、自動的に GetClusterCredentials オペレーションを呼び出すための許可が必要です。その許可を付与するには、ユーザーまたはロールを作成し、必要なアクセス許可を付与するポリシーをアタッチします。

GetClusterCredentials を呼び出すアクセス許可を持つ IAM ロールを作成するには
  1. IAM サービスを使用して、ユーザーまたはロールを作成します。既存のユーザーまたはロールを使用することもできます。たとえば、アイデンティティプロバイダアクセス用の IAM ロールを作成したら、そのロールに必要な IAM ポリシーをアタッチできます。

  2. redshift:GetClusterCredentials オペレーションを呼び出すアクセス許可を持つアクセス許可ポリシーをアタッチします。指定するオプションパラメータにより、追加のアクションやリソースをポリシーで許可または制限することもできます。

    • SQL クライアントによるクラスター ID、AWS リージョン、およびポートの取得を許可するには、redshift:DescribeClusters オペレーションを呼び出すアクセス許可を Redshift クラスターリソースに含めます。

    • AutoCreate オプションを使用する場合、redshift:CreateClusterUser を呼び出すアクセス許可を dbuser リソースに含めます。次の Amazon リソースネーム (ARN) は、Amazon Redshift dbuserを指定します。regionaccount-id、および cluster-name を、お使いの AWS リージョン、アカウント、およびクラスターの値に置き換えます。dbuser-nameに、クラスターデータベースへのログインに使用するユーザー名を指定します。

      arn:aws:redshift:region:account-id:dbuser:cluster-name/dbuser-name
    • (任意)次の形式で Amazon Redshift dbname リソースを指定する ARN を追加します。regionaccount-id、および cluster-name を、お使いの AWS リージョン、アカウント、およびクラスターの値に置き換えます。database-name に、ユーザーがログインするデータベースの名前を指定します。

      arn:aws:redshift:region:account-id:dbname:cluster-name/database-name
    • DbGroups オプションを使用する場合、次の形式で、redshift:JoinGroup オペレーションを呼び出すアクセス許可を Amazon Redshift dbgroup リソースに含めます。regionaccount-id、および cluster-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 データベースにログインし、CREATE USER を使用してデータベースユーザーを作成するか、ALTER USERを使用して既存のユーザーを変更します。

  2. (任意)ユーザーがパスワードを使用することを防ぐために PASSWORD DISABLE オプションを指定します。ユーザーのパスワードが無効になると、ユーザーは一時的な認証情報を使用してのみログオンできます。パスワードが無効になっていない場合、ユーザーはパスワードまたは一時的な認証情報を使用してログオンできます。スーパーユーザーのパスワードを無効にすることはできません。

    AWS Management Console の外部で AWS を操作するには、プログラマチックアクセス権が必要です。プログラマチックアクセス権を付与する方法は、AWS にアクセスしているユーザーのタイプによって異なります。

    ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。

    プログラマチックアクセス権を必要とするユーザー 目的 方法

    ワークフォースアイデンティティ

    (IAM Identity Center で管理されているユーザー)

    一時的な認証情報を使用して、AWS CLI、AWS SDK、または AWS API へのプログラマチックリクエストに署名します。

    使用するインターフェイス用の手引きに従ってください。

    IAM 一時的な認証情報を使用して、AWS CLI、AWS SDK、または AWS API へのプログラムによるリクエストに署名します。 IAM ユーザーガイド」の「AWS リソースでの一時的な認証情報の使用」の指示に従ってください。
    IAM

    (非推奨)

    長期的な認証情報を使用して、AWS CLI、AWS SDK、AWS API へのプログラムによるリクエストに署名します。

    使用するインターフェイス用の手順に従ってください。

    次の例では、パスワードを無効にしてユーザーを作成します。

    create user temp_creds_user password disable;

    次の例では、既存のユーザーのパスワードを無効にします。

    alter user temp_creds_user password disable;
  3. CREATE GROUPを使用してデータベースユーザーグループを作成します。

  4. GRANT コマンドを使用して、グループのアクセス権限を定義します。

ステップ 5: IAM 認証情報を使用するように JDBC または ODBC 接続を設定する

Amazon Redshift JDBC または ODBC ドライバーを使用して SQL クライアントを設定できます。このドライバーは、データベースユーザーの認証情報を作成し、SQL クライアントと Amazon Redshift データベース間の接続を確立するプロセスを管理します。

認証に アイデンティティプロバイダーを使用する場合は、認証情報プロバイダープラグインの名前を指定します。Amazon Redshift JDBC および ODBC ドライバーには、次の SAML ベースの認証情報プロバイダーのプラグインが含まれます。

IAM 認証情報を使用するように JDBC 接続を設定するには
  1. Amazon Redshift での JDBC ドライバーのバージョン 2.1 による接続の構成」ページから最新の Amazon Redshift JDBC ドライバーをダウンロードします。

  2. 次のいずれかの形式で IAM 認証情報オプションを使用して JDBC URL を作成します。IAM 認証を使用するには、次の例に示すように、jdbc:redshift: に続いて Amazon Redshift JDBC URL に iam: を追加します。

    jdbc:redshift:iam://

    cluster-nameregion、および 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
  3. JDBC オプションを追加して IAM 認証情報を提供します。さまざまな組み合わせの JDBC オプションを使用して、IAM 認証情報を提供できます。詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。

    次の 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
  4. 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
IAM 認証情報を使用するように ODBC 接続を設定するには

次の手順では、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 Windows オペレーティングシステムでは、Amazon Redshift ODBC ドライバーの DSN 設定ウィンドウにアクセスします。

    1. 接続設定で以下の情報を入力します。

      • データソース名

      • サーバー (オプション)

      • ポート (オプション)

      • データベース

      ユーザーまたはロールに redshift:DescribeClusters オペレーションを呼び出すアクセス許可がある場合は、データソース名データベースのみが必要です。Amazon Redshift は ClusterIdリージョン を使用して、DescribeCluster オペレーションを呼び出すことでサーバーとポートを取得します。

      ユーザーまたはロールに redshift:DescribeClusters オペレーションを呼び出すアクセス許可がない場合は、サーバーポートを指定します。

    2. Authentication (認証)で、Auth Type (認証タイプ)の値を選択します。

      認証タイプごとに、次のように値を入力します。

      AWS プロファイル

      次の情報を入力します。

      • [ClusterID]

      • リージョン

      • プロファイル名

        ODBC 接続オプションの値を含む AWS 設定ファイルのプロファイル名を入力します。詳細については、「設定プロファイルを使用する」を参照してください。

      (任意) GetClusterCredentials API オペレーションの呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。

      IAM 認証情報

      次の情報を入力します。

      • [ClusterID]

      • リージョン

      • AccessKeyIDSecretAccessKey

        IAM データベース認証用に設定された IAM ロールまたはユーザーのアクセスキー ID とシークレットアクセスキー。

      • [SessionToken]

        SessionToken は、一時的認証情報を持つ IAM ロールに必要です。詳細については Temporary Security Credentialsを参照してください。

      GetClusterCredentials API オペレーションを呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。

      アイデンティティプロバイダ : AD FS

      AD FS を使用した Windows 統合認証の場合、ユーザー および パスワード は空白にしておきます。

      IdP の詳細を指定します。

      • IdP Host

        企業アイデンティティプロバイダホストの名前。この名前には、スラッシュ (/) を含めないでください。

      • IdP Port (任意)

        アイデンティティプロバイダが使用するポート。デフォルトは 443です。

      • 優先ロール

        SAML アサーションの AttributeValue 属性の複数の値を持つ Role 要素からの IAM ロールの Amazon リソースネーム (ARN)。IdP 管理者と連携して、目的のロールに適した値を見つけます。詳細については、「ステップ 2: IdP の SAML アサーションを設定する」を参照してください。

      (任意) GetClusterCredentials API オペレーションの呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。

      • [DbUser]

      • User AutoCreate

      • [DbGroups]

      詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。

      ID プロバイダー : PingFederate

      ユーザーパスワードに、IdP のユーザー名とパスワードを入力します。

      IdP の詳細を指定します。

      • IdP Host

        企業アイデンティティプロバイダホストの名前。この名前には、スラッシュ (/) を含めないでください。

      • IdP Port (任意)

        アイデンティティプロバイダが使用するポート。デフォルトは 443です。

      • 優先ロール

        SAML アサーションの AttributeValue 属性の複数の値を持つ Role 要素からの IAM ロールの Amazon リソースネーム (ARN)。IdP 管理者と連携して、目的のロールに適した値を見つけます。詳細については、「ステップ 2: IdP の SAML アサーションを設定する」を参照してください。

      (任意) GetClusterCredentials API オペレーションの呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。

      • [DbUser]

      • User AutoCreate

      • [DbGroups]

      詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。

      アイデンティティプロバイダー : Okta

      ユーザーパスワードに、IdP のユーザー名とパスワードを入力します。

      IdP の詳細を指定します。

      • IdP Host

        企業アイデンティティプロバイダホストの名前。この名前には、スラッシュ (/) を含めないでください。

      • IdP Port

        この値は Okta では使用されません。

      • 優先ロール

        SAML アサーションの AttributeValue 属性の Role 要素からの IAM ロールの Amazon リソースネーム (ARN)。IdP 管理者と連携して、目的のロールに適した値を見つけます。詳細については、「ステップ 2: IdP の SAML アサーションを設定する」を参照してください。

      • Okta App ID

        Okta アプリケーションの ID。アプリ ID の値は、Okta アプリケーションの埋め込みリンクの「amazon_aws」に続きます。IdP 管理者と連携して、この値を取得します。

      (任意) GetClusterCredentials API オペレーションの呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。

      • [DbUser]

      • User AutoCreate

      • [DbGroups]

      詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。

      アイデンティティプロバイダー : Azure AD

      ユーザーパスワードに、IdP のユーザー名とパスワードを入力します。

      クラスター IDリージョンにクラスター ID と Amazon Redshift クラスターの AWS リージョンを入力します。

      データベースに、Amazon Redshift クラスター用に作成したデータベースを入力します。

      IdP の詳細を指定します。

      • IdP Tenant

        Azure AD に使用されるテナント。

      • Azure Client Secret

        Azure の Amazon Redshift エンタープライズアプリのクライアントシークレット。

      • Azure Client ID

        Azure の Amazon Redshift エンタープライズアプリケーションのクライアント ID (アプリケーション ID)。

      (任意) GetClusterCredentials API オペレーションの呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。

      • [DbUser]

      • User AutoCreate

      • [DbGroups]

      詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。