Azure - Amazon Redshift

Azure

Amazon Redshift クラスターにアクセスするためのアイデンティティプロバイダー (IdP) として Microsoft の Azure AD を使用できます。このチュートリアルでは、Azure を ID プロバイダー (IdP) として使用して、Amazon Redshift クラスターにアクセスする方法を説明します。

Microsoft Azure AD シングルサインオンで Amazon Redshift アクセスをフェデレーションする方法については、次の動画をご覧ください。

ステップ 1: Azure と AWS アカウントを相互に信頼するように設定する

以下の手順では、信頼関係を設定する方法を説明します。

相互に信頼するように Azure AD と AWS アカウントを設定するには
  1. Azure AD ユーザーが接続するための既存の Amazon Redshift クラスターを作成または使用します。接続を設定するには、クラスター識別子など、このクラスターの特定のプロパティが必要です。詳細については、「クラスターの作成」を参照してください。

  2. Microsoft Azure ポータルで AWS に使用される Azure Active Directory、グループ、ユーザーを設定します。

  3. AWS コンソールへのシングルサインオンおよび Amazon Redshift へのフェデレーテッドログインに使用する Microsoft Azure ポータルに、エンタープライズアプリケーションとして Amazon Redshift を追加します。Enterprise application を選択します。

  4. +New application を選択します。[アプリケーションを追加] ページが表示されます。

  5. 検索フィールドで AWS を検索します。

  6. Amazon Web Services (AWS) を選択し、追加 をクリックします。これにより、AWS アプリケーションが作成されます。

  7. 管理 で、シングルサインオンを選択します。

  8. SAML を選択します。[Amazon Web Services (AWS) | SAML ベースのサインオン] ページが表示されます。

  9. はい を選択して、[SAML によるシングルサインオンのセットアップ] ページに進みます。このページには、事前設定されたシングルサインオン関連属性のリストが表示されます。

  10. ベーシック SAML 設定 で、編集アイコンを選択し、保存 を選択します。

  11. 複数のアプリケーションを設定する場合は、識別子の値を指定します。たとえば、https://signin.aws.amazon.com/saml#2と入力します。2 番目のアプリケーション以降では、この形式を # 記号とともに使用して、一意の SPN 値を指定します。

  12. ユーザー属性とクレーム セクションで、編集アイコンを選択します。

    既定では、一意のユーザー識別子 (UID)、ロール、RoleSessionName、SessionDuration クレームは事前に設定されています。

  13. + 新しいクレームの追加 を選択して、データベースユーザーのクレームを追加します。

    [名前]DbUser と入力します。

    [Namespace] に https://redshift.amazon.com/SAML/Attributes と入力します。

    [出典] で、[属性] を選択します。

    出典属性で、user.userprincipalnameを選択します。次に、[保存] を選択します。

  14. + 新しいクレームの追加 を選択して、AutoCreate のクレームを追加します。

    [名前]AutoCreate と入力します。

    [Namespace] に https://redshift.amazon.com/SAML/Attributes と入力します。

    [出典] で、[属性] を選択します。

    出典属性で、trueを選択します。次に、[保存] を選択します。

    ここでは、123456789012が AWS アカウント、AzureSSOが作成した IAM ロール、AzureADProviderが IAM プロバイダーになります。

    クレーム名

    一意のユーザー識別子 (名前 ID)

    user.userprincipalname

    https://aws.amazon.com/SAML/Attributes/SessionDuration

    "900"

    https://aws.amazon.com/SAML/Attributes/Role

    arn:aws:iam::123456789012:role/AzureSSO,arn:aws:iam::123456789012:saml-provider/AzureADProvider

    https://aws.amazon.com/SAML/Attributes/RoleSessionName

    user.userprincipalname

    https://redshift.amazon.com/SAML/Attributes/AutoCreate

    "true"

    https://redshift.amazon.com/SAML/Attributes/DbGroups

    user.assignedroles

    https://redshift.amazon.com/SAML/Attributes/DbUser

    user.userprincipalname

  15. アプリの登録 > your-application-name > 認証で、モバイルとデスクトップアプリケーションを追加します。URL を http://localhost/redshift と指定します。

  16. 証明書の SAML 署名 セクションで ダウンロード を選択し、IAM SAMLアイデンティティプロバイダーを作成するときに使用するフェデレーションメタデータ XML ファイルをダウンロードして保存します。このファイルは、シングルサインオンアイデンティティの作成に使用されます。

  17. IAM コンソールで、IAM SAML アイデンティティプロバイダーを作成します。指定したメタデータドキュメントは、Azure エンタープライズアプリケーションの設定時に保存したフェデレーションメタデータ XML ファイルです。詳細なステップついては IAM ユーザーガイドIAMアイデンティティプロバイダー (コンソール) の作成と管理 を参照してください。

  18. IAM コンソールで、SAML 2.0 フェデレーション用の IAM ロールを作成します。詳細なステップについては、「IAM ユーザーガイド」の「SAML 用のロールの作成」を参照してください。

  19. IAM コンソールで SAML 2.0 フェデレーション用に作成した IAM ロールにアタッチできる IAM ポリシーを作成します。詳細な手順については、「IAM ユーザーガイド」の「IAM ポリシーの作成 (コンソール)」を参照してください。

    環境に合わせて次のポリシー (JSON 形式) を変更します。

    • クラスターの AWS リージョンを us-west-1に置き換えます。

    • AWS アカウントを 123456789012に置き換えます。

    • クラスター識別子 (またはすべてのクラスターの *) を cluster-identifierに置き換えます。

    • データベース (またはすべてのクラスターの *) を devに置き換えます。

    • IAM ロールの一意の識別子を AROAJ2UCCR6DPCEXAMPLEに置き換えます。

    • テナントまたは会社の E メールドメインを 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 値に一致するユーザーのみが接続できます。

    • 条件句は、特定のユーザーだけが強制的に一時認証情報を取得します。これらのユーザーは、会社の E メールドメインの E メールアドレスで識別される IAM アカウントのロール固有 ID AROAJ2UCCR6DPCEXAMPLE で指定されたロールのユーザーです。固有 ID の詳細については、IAM ユーザーガイド固有 ID を参照してください。

      IdP (この場合は Azure AD) を使用したセットアップによって、条件句の記述方法が決まります。従業員の E メールが johndoe@example.com の場合は、まず、${redshift:DbUser} を従業員のユーザー名 johndoeに一致するスーパーフィールドに設定します。次に、この条件を機能させるため、AWS SAML RoleSessionName フィールドを従業員の E メール johndoe@example.comに一致するスーパーフィールドに設定します。このアプローチを使用する場合は、以下の点を考慮します。

      • ${redshift:DbUser} を従業員の E メールに設定した場合は、例の JSON の @example.com を削除して、RoleSessionNameに一致させます。

      • 従業員のユーザー名だけ RoleSessionId に設定した場合は、例の @example.com を削除してRoleSessionNameと一致させます。

      • 例の JSON では、${redshift:DbUser}RoleSessionName の両方が従業員の E メールに設定されます。この例では、JSONで Amazon Redshift データベースのユーザー名 @example.com を使用して、クラスターにアクセスするためにユーザーをサインインします。

    • 2 番目のセクションでは、指定したクラスターに dbuser 名を作成する権限を付与します。この例の JSON では、作成を ${redshift:DbUser} に制限しています。

    • 3 番目のセクションでは、どの dbgroup にユーザーが参加できるかを指定する権限を付与します。この例の JSON では、ユーザーは指定したクラスターの my_dbgroup グループに参加できます。

    • 4 番目のセクションでは、ユーザーがすべてのリソースに対して実行できるアクションへのアクセス許可を付与します。この例の JSON では、ユーザーは redshift:DescribeClusters を呼び出し、クラスターエンドポイント、AWS リージョン、ポートなどのクラスター情報を取得できます。また、ユーザーは iam:ListRoles を呼び出して、ユーザーが引き受けることができるロールを確認することもできます。

ステップ 2: Azure への認証用に JDBC または ODBC を設定する

JDBC
Microsoft Azure AD への認証用に JDBC を設定するには
  • Azure AD シングルサインオンを使用して JDBC 経由でクラスターに接続するようにデータベースクライアントを構成します。

    JDBC ドライバーを使用する任意のクライアントを使用して Azure AD シングルサインオンを使用して接続、または Java などの言語を使用してスクリプトを使用して接続することもできます。インストールおよび設定の詳細については、「Amazon Redshift での JDBC ドライバーのバージョン 2.1 による接続の構成」を参照してください。

    たとえば、SQLWorkbench/J をクライアントとして使用できます。SQLWorkbench/J を設定する場合、データベースの URL は次の形式を使用します。

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

    SQLWorkbench/J をクライアントとして使用する場合は、次の手順を実行します。

    1. SQL Workbench/J を起動します。 接続プロファイルの選択 ページで、AzureAuthという プロファイルグループ を追加します。

    2. 接続プロファイルには、Azureと入力します。

    3. [ドライバの管理] を選択し、[Amazon Redshift] を選択します。[フォルダを開く] アイコン、[ライブラリ] を選択し、適切な JDBC .jar ファイルを選択します。

    4. 接続プロファイルの選択ページで、次のように接続プロファイルに情報を追加します。

      • ユーザーには、マイクロソフトの Azure ユーザー名を入力します。これは、使用認証しようとしているクラスターに対するアクセス許可を持つ、シングルサインオンに使用しているマイクロソフトの Azure アカウントのユーザー名です。

      • パスワードには、マイクロソフトの Azure のパスワードを入力します。

      • [ドライバ] では、[Amazon Redshift (com.amazon.redshift.jdbc.Driver)] を選択します。

      • [URL] には、jdbc:redshift:iam://your-cluster-identifier:your-cluster-region/your-database-name と入力します。

    5. 拡張されたプロパティ を選択して、次のように接続プロパティに情報を追加します。

      Azure AD シングルサインオン設定の場合は、次のように追加情報を追加します。

      • plugin_name には、com.amazon.redshift.plugin.AzureCredentialsProvider と入力します。この値は、認証方法として Azure Single Sign-On を使用するドライバーに指定します。

      • [idp_tenant] には、your-idp-tenant と入力します。Microsoft Azure AD のみに使用されます。これは、Azure AD で設定されている会社のテナント名です。この値は、テナント名またはハイフン付きのテナント固有 ID のいずれかになります。

      • [client_secret] には、your-azure-redshift-application-client-secret と入力します。Microsoft Azure AD のみに使用されます。これは、Azure Single Sign-On 設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアントシークレットです。これは、ccom.amazon.redshift.plugin.AzureCredentialsProvider プラグインにのみ適用されます。

      • [client_id] には、your-azure-redshift-application-client-id と入力します。Microsoft Azure AD のみに使用されます。これは、Azure シングルサインオン設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアント ID (ハイフン付き) です。

      MFA 設置を使用した Azure AD シングルサインオンの場合は、次のように接続プロパティに情報を追加します。

      • [plugin_name] には、com.amazon.redshift.plugin.BrowserAzureCredentialsProvider と入力します。この値は、認証方法として MFA と Azure シングルサインオンを使用するようドライバに指定します。

      • [idp_tenant] には、your-idp-tenant と入力します。Microsoft Azure AD のみに使用されます。これは、Azure AD で設定されている会社のテナント名です。この値は、テナント名またはハイフン付きのテナント固有 ID のいずれかになります。

      • [client_id] には、your-azure-redshift-application-client-id と入力します。Microsoft Azure AD のみに使用されます。これは、MFA 設定で Azure AD シングルサインオン設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアント ID (ハイフン付き) です。

      • [listen_port] には、your-listen-portと入力します。これは、ローカルサーバーがリッスンしているポートです。デフォルト値は 7890 です。

      • [idp_response_timeout] には、the-number-of-seconds と入力します。IdP サーバーが応答を返すときにタイムアウトするまで待機する秒数です。最小秒数は 10 である必要があります。接続を確立するときにこのしきい値よりも時間がかかると、接続は中止されます。

ODBC
Microsoft Azure AD への認証用に ODBC を設定するには
  • Azure AD シングルサインオンを使用して ODBC 経由でクラスターに接続するようにデータベースクライアントを構成します。

    Amazon Redshift には Linux、Windows、macOS オペレーティングシステム用の ODBC ドライバが用意されています。ODBC ドライバをインストールする前に、SQL クライアントツールが 32 ビットであるか 64 ビットであるかを調べます。SQL クライアントツールの要件と一致する ODBC ドライバをインストールします。

    Windows の場合、Amazon Redshift ODBC ドライバ DSN セットアップ ページの [接続設定] で、次の情報を入力します。

    • [データソース名] には、your-DSN と入力します。ODBC プロファイル名として使用するデータソース名を指定します。

    • Azure AD シングルサインオン設定の Auth type には、Identity Provider: Azure AD を選択します。これは、ODBC ドライバが Azure シングルサインオンを使用した認証に使用する認証方法です。

    • MFA設定の Azure AD シングルサインオンの Auth type には、Identity Provider: Browser Azure AD を選択します。これは、ODBC ドライバが MFA と Azure シングルサインオンを使用した認証に使用する認証方法です。

    • [クラスター ID] には、your-cluster-identifier と入力します。

    • [リージョン] には、your-cluster-region と入力します。

    • [データベース] には、your-database-name と入力します。

    • [ユーザー] には、your-azure-username と入力します。これは、使用認証しようとしているクラスターに対するアクセス許可を持つ、シングルサインオンに使用しているマイクロソフトの Azure アカウントのユーザー名です。これは、Auth Typeアイデンティティプロバイダー: Azure AD のみに使用します。

    • [パスワード] には、your-azure-password と入力します。これは、Auth Typeアイデンティティプロバイダー: Azure ADのみに使用します。

    • IdP Tenantには、your-idp-tenantと入力します。これは、IdP (Azure) で設定されている会社のテナント名です。この値は、テナント名またはハイフン付きのテナント固有 ID のいずれかになります。

    • Azure Client Secretには、your-azure-redshift-application-client-secretと入力します。これは、Azure シングルサインオン設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアントの秘密です。

    • Azure Client IDには、your-azure-redshift-application-client-idと入力します。これは、Azure シングルサインオン設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアント ID (ハイフン付き) です。

    • [Listen Port] には、your-listen-port と入力します。これは、ローカルサーバーがリッスンしているデフォルトのリッスンポートです。デフォルト値は 7890 です。これは、ブラウザ Azure AD プラグインのみに適用されます。

    • [応答タイムアウト] には、the-number-of-seconds と入力します。IdP サーバーが応答を返すときにタイムアウトするまで待機する秒数です。最小秒数は 10 である必要があります。接続を確立するときにこのしきい値よりも時間がかかると、接続は中止されます。これは、ブラウザ Azure AD プラグインのみに適用されます。

    macOS および Linux では、次のように odbc.ini ファイルを編集します。

    注記

    すべてのエントリでは、大文字と小文字は区別されません。

    • [clusterid] には、your-cluster-identifier と入力します。これは、作成された Amazon Redshift クラスターの名前です。

    • [リージョン] には、your-cluster-region と入力します。これは、作成された Amazon Redshift クラスターの AWS リージョンです。

    • [データベース] には、your-database-name と入力します。これは、Amazon Redshift クラスター上でアクセスしようとしているデータベースの名前です。

    • [ロケール] には、en-us と入力します。これは、エラーメッセージが表示される言語です。

    • [iam] には、1 と入力します。この値は、IAM 認証情報を使用して認証するためにドライバに指定します。

    • Azure AD シングルサインオン設定の plugin_name には、AzureAD と入力します。これにより、認証方法として Azure シングルサインオンを使用するようドライバに指定します。

    • MFA 設定の Azure AD シングルサインオンの plugin_name には、BrowserAzureAD と入力します。これにより、認証方法として MFA と Azure Single Sign-On を使用するようドライバに指定します。

    • [uid] には、your-azure-username と入力します。これは、認証しようとしているクラスターに対するアクセス許可を持つ、シングルサインオンに使用しているMicrosoft Azure アカウントのユーザー名です。これは、plugin_nameAzureAD である場合にのみ使用します。

    • [pwd] には、your-azure-password と入力します。これは、plugin_nameAzureADである場合のみに使用します。

    • [idp_tenant] には、your-idp-tenant と入力します。これは、IdP (Azure) で設定されている会社のテナント名です。この値は、テナント名またはハイフン付きのテナント固有 ID のいずれかになります。

    • [client_secret] には、your-azure-redshift-application-client-secret と入力します。これは、Azure シングルサインオン設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアントの秘密です。

    • [client_id] には、your-azure-redshift-application-client-id と入力します。これは、Azure シングルサインオン設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアント ID (ハイフン付き) です。

    • [listen_port] には、your-listen-portと入力します。これは、ローカルサーバーがリッスンしているポートです。デフォルト値は 7890 です。これは、ブラウザ Azure AD プラグインに適用されます。

    • [idp_response_timeout] には、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

トラブルシューティング

ブラウザ Azure AD プラグインに関する問題のトラブルシューティングを行うには、以下を検討します。

  • ブラウザ Azure AD プラグインを使用するには、リクエストで指定される返信 URL を、アプリケーションで構成された返信 URL と一致するように設定する必要があります。Microsoft Azure ポータルの SAML を使用したシングルサインオンのセットアップ ページに移動します。次に、返信 URL が http://localhost/redshift/ に設定されていることを確認します。

  • IdP テナントエラーが発生した場合は、IdP テナント 名が、Microsoft Azure で Active Directory をセットアップするために最初に使用したドメイン名と一致することを確認します。

    Windows の場合、接続の設定 の セクション Amazon Redshift ODBC DSN セットアップページに移動します。次に、IdP (Azure) で構成されている会社のテナント名が、Microsoft Azure で Active Directory をセットアップするために最初に使用したドメイン名と一致することを確認します。

    macOS と Linux では、odbc.ini ファイルを見つけます。次に、IdP (Azure) で構成されている会社のテナント名が、Microsoft Azure で Active Directory をセットアップするために最初に使用したドメイン名と一致することを確認します。

  • リクエストで指定された返信 URL がアプリケーションに設定されている返信 URL と一致しないというエラーが表示された場合は、リダイレクト URI が返信 URL と同じであることを確認します。

    Microsoft Azure ポータルでアプリケーションの アプリ登録 ページに移動します。次に、リダイレクト URI が返信 URL と一致することを確認します。

  • 予期しない応答: 不正なエラーが表示された場合は、モバイルとデスクトップアプリケーション の構成が完了したことを確認します。

    Microsoft Azure ポータルでアプリケーションの アプリ登録 ページに移動します。次に、認証 に移動し、リダイレクト URI として http://localhost/redshift/ を使用するように モバイルとデスクトップアプリケーション が構成されていることを確認します。