Amazon Web Services ブログ

Microsoft Azure AD シングルサインオンで Amazon Redshift アクセスをフェデレーションする



最近、当社は、Azure AD を企業ディレクトリとして使用して、Amazon Redshift にデータウェアハウスを構築している大企業のお客様を支援しました。データウェアハウスのユーザーが企業の認証情報を使用して Redshift でデータをクエリできるようにすることが要件となっていました。これにより、ユーザーは企業の認証情報を利用でき、追加のパスワードを覚える必要がなくなるので、ユーザーエクスペリエンスが向上します。また、すべての企業ユーザーが 1 か所で管理されるため、メンテナンスが容易になります。ソリューションは、Redshift への Azure AD フェデレーションアクセスをセットアップすることでした。

フェデレーションを使用して、Amazon Redshift へのアクセスを集中管理できます。これにより、一元的なロケーションでユーザーアクセスを制御できるようになり、データベースユーザーの作成と保守のオーバーヘッドが削減されるため、管理が簡素化されます。Active Directory Federation Service (ADFS)、PingFederate、Okta に加えて、Amazon Redshift は Microsoft Azure Active Directory (Azure AD) フェデレーションもサポートしています。

Amazon Redshift で ADFS を使用する方法の詳細については、IAM とAmazon Redshift を使用してデータベースユーザー認証を簡単にフェデレーションするを参照してください。Azure AD の統合の詳細については、Microsoft Azure AD での JDBC または ODBC シングルサインオン認証のセットアップを参照してください。

この投稿では、Azure AD と IAM を使用してフェデレーションをセットアップする方法を説明します。Azure AD は、ユーザーを管理し、IAM を使用して Amazon Redshift へのフェデレーションアクセスを提供します。このセットアップでは、Amazon Redshift で個別のデータベースユーザーを作成する必要はありません。

ソリューションの概要

SQL クライアントを使用して Amazon Redshift にシームレスにアクセスできるように Azure AD と IAM 間のフェデレーションを設定するソリューションには、次のコンポーネントが含まれています。

  • Azure AD は、ユーザー認証の ID プロバイダーとして機能します。
  • AWS は認証のサービスプロバイダーとして機能します。
  • Security Assertion Markup Language (SAML 2.0) は、ID プロバイダーとサービスプロバイダー間のインタラクションを簡素化します。
  • AWS STS は、Amazon Redshift に接続するための一時的な認証情報を要求します。

次の図は、ソリューションのアーキテクチャを示しています。

このソリューションの手順は次のとおりです。

  1. SQL クライアントで JDBC または ODBC ドライバーを設定して、Azure AD フェデレーションを使用します。
  2. クライアントは、Azure AD の認証情報を使用して、Azure のエンタープライズアプリケーションに認証リクエストを行います。
  3. Azure エンタープライズアプリケーションは Azure AD をクエリし、ユーザーに割り当てられた IAM ロールを含む SAML 応答を生成します。
  4. クライアントは SAML 応答を受信します。
  5. SAML アサーションは AWS フェデレーションエンドポイントに送信され、AWS STS の AssumeRoleWithSAML API が呼び出され、一時的な IAM 認証情報が生成されます。
  6. 一時的な認証情報を使用して、Amazon Redshift クラスターに接続します。

前提条件

このブログ投稿では、次のことが前提となっています。

Azure AD 側:

Amazon Redshift 側:

チュートリアルの概要

このチュートリアルは、次の 3 つのセクションで構成されています。

  1. SAML でシングルサインオン (SSO) を使用して、Azure エンタープライズのギャラリー以外のアプリケーションをセットアップ。
  2. IAM プロバイダーとロールのセットアップ。これには次の手順が含まれます。
    • SAML ID プロバイダーの作成。
    • Amazon Redshift クラスターにアクセスするための IAM ロールの作成。
    • SAML ベースのフェデレーションを使用する IAM プロバイダーと IAM ロールの作成。
    • SSO セットアップのテスト。
  3. Azure AD ユーザー認証情報を使用して Amazon Redshift クラスターにログインするための JDBC クライアントの設定。この投稿では JDBC クライアントを使用しています。しかし、同じセットアップを使用して ODBC クライアントをサポートできます。

SAML シングルサインオンを使用した Azure エンタープライズアプリケーションのセットアップ

Azure エンタープライズアプリケーションをセットアップするには、次の手順を実行します。

  1. Azure Portal にログインします
  2. [エンタープライズアプリケーション] を選択します。
  3. [新規アプリケーション] を選択します。
  4. [ギャラリー以外のアプリケーション] を選択します。
  5. [名前] に Redshift と入力します。
  6. [追加] を選択します。
  7. [管理] で [シングルサインオン] を選択します。
  8. [基本的な SAML 設定] セクションで、[エンティティ ID] と [返信 URL] に「https://signin.aws.amazon.com/saml」と入力します。
  9. [ユーザの属性とクレーム] セクションで、[編集]を選択します。
  10. [追加のクレーム] で、次の値を使用して新しいクレームを追加します (存在しない場合)。
    • http://schemas.microsoft.com/ws/2008/06/identity/claims/groups については、[user.groups [SecurityGroup]] を選択します
    • https://redshift.amazon.com/SAML/Attributes/RoleSessionName については、[user.userprincipalname] を選択します
    • https://redshift.amazon.com/SAML/Attributes/DbGroups については、[user.assignedroles] を選択します。
    • [https://redshift.amazon.com/SAML/Attributes/DbUser] については、[user.userprincipalname] を選択します。
    • https://redshift.amazon.com/SAML/Attributes/AutoCreate については、 trueと入力します。 なお、「DbUser」と「DbGroups」の値は小文字であり、文字で始まり、英数字、アンダースコア (「_」)、プラス記号 (「+」)、ドット (「.」)、アット (「@」)、またはハイフン (「-」) のみを含み、128 文字未満でなければなりません。
  11. 前のステップで追加されたすべてのクレームに加えて、[新しいクレームの追加] をクリックします。
    • [クレームの管理] で [名前] に Role と入力します。
    • [名前空間] に https://aws.amazon.com/SAML/Attributes と入力します。
    • [ソース] で [属性] を選択します。
    • [ソース属性] については、[arn:aws:iam::<yourAWSAccount>:role/AzureSSO,arn:aws:iam::<yourAWSAccount>:saml-provider/AzureADProvider] と入力します。 ロール」の [クレーム] が適切に設定されていることを確認してください。これを自分の AWS アカウントに変更します。AWS Identity Access Management で AzureSSOAzureADProvider のロールをセットアップします。
  12. [シングルサインオン] セクションの [SAML 署名証明書] の [フェデレーションメタデータ XML] で [ダウンロード] を選択します。このファイルをローカルに保存します。多くの場合、ファイルの名前はアプリケーション名と同じです。たとえば、Redshift.xml です。このファイルを使用して、次のセクションで IAM ID プロバイダーを設定します。このファイルは、次のセクションで IAM ID プロバイダーを設定するために使用されます。
  13. [アプリの登録] ページで、アプリケーション Redshift を選択します。リストにアプリケーションが表示されない場合は、ドロップダウンメニューから [すべてのアプリ] を選択して検索します。登録されていない場合は登録してください。
  14. アプリケーション (クライアント) IDディレクトリ (テナント) ID を記録します。Amazon Redshift に接続するときに、JDBC 接続でこれらの値を使用します。
  15. [API アクセス許可] で [アクセス許可の追加] を選択します。
  16. [Microsoft Graph] を選択します。
  17. [委任されたアクセス許可] を選択します
  18. [ユーザー] で [User.Read] を選択します。
  19. [アクセス許可の追加] を選択します。これにより、Amazon Redshift エンタープライズアプリケーションは、ユーザープロファイルの読み取りと SSO を使用したログインの実行に管理者の同意を付与できます。
  20. [セキュリティ] で [アクセス許可] を選択します。
  21. ユーザー/グループをアプリケーションに追加するか、組織全体のユニバーサル管理者の同意を付与します。
  22. [証明書とシークレット] を選択します。
  23. クライアントの秘密鍵を生成します。
  24. JDBC 接続を設定するときに使用するクライアントの秘密鍵を記録します。

これで、Azure にエンタープライズアプリケーションがセットアップされました。この Azure フェデレーションを使用するための IAM プロバイダーとロールをセットアップする準備が整いました。

AWS での IAM ID プロバイダーとロールのセットアップ

IAM ID プロバイダーは、SAML 2.0 標準をサポートする外部 ID プロバイダー (IdP) サービスを記述する IAM のエンティティです。SAML 互換 IdP 間の信頼を確立する場合は、IAM ID プロバイダーを使用します。たとえば、Azure AD です。この ID プロバイダーに AzureADProvider という名前を付けて、以前に作成した SAML クレームと一致させることが重要です。

このチュートリアルでは、IAM で以下を作成します。

  • IAM SAML ID プロバイダー AzureADProvider
  • IAM ロール AzureSSO
  • IAM ポリシー redshiftAccessPolicy。これは、ロール AzureSSO にアタッチして、Amazon Redshift クラスターにアクセスするためのアクセス許可を提供します

IAM SAML ID プロバイダーの作成

IAM SAML ID プロバイダーを作成するには、次の手順を実行します。

  1. AWS マネジメントコンソールに管理者としてサインインします。
  2. [セキュリティ、ID、およびコンプライアンス] で [IAM] を選択します。
  3. [ID プロバイダー] を選択します。
  4. [プロバイダーの作成] を選択します。
  5. [プロバイダーの設定] ページの [プロバイダーの種類] で、[SAML] を選択します。
    • [プロバイダー名] に AzureADProvider と入力します。
    • [メタデータドキュメント] で [xml] を選択します。
  6. [次のステップ] を選択します。
  7. [作成] をクリックします。

Amazon Redshift クラスターにアクセスするための IAM ロールの作成

ここで、SAML ベースのフェデレーションのロールを作成します。このロールの名前を AzureSSO として、先ほど作成した SAML クレームに付けた名前と一致させる必要があります。次の手順を実行します。

  1. IAM コンソールで [ロール] を選択します。
  2. [ロールを作成] を選択します。
  3. 複数の異なるオプションから選択できる [ロールの作成] ページに移動します。[ロールの作成] ページで Azure AD 認証をセットアップするには、[SAML 2.0 フェデレーション] を選択します。
  4. [SAML 2.0 プロバイダーの選択] で以下のとおり操作します。
    • SAML プロバイダーの場合は、ドロップダウンから [AzureADProvider] を選択します。
    • [プログラムによるアクセスと AWS マネジメントコンソールのアクセスを許可する] をオンにします。
    • [属性] については、デフォルトの [SAML:aud] のままにします。
    • [] については、デフォルトの https://signin.aws.amazon.com/saml のままにします。
    • [条件] では、オプションで、SSO を使用できるユーザーの条件を追加できます。このチュートリアルでは、条件を追加しないでください。
  5. [次: アクセス許可] を選択します。ポリシーを作成してから、Amazon Redshift にアクセス許可を付与するポリシーを添付します。
  6. [次: タグ] を選択します。 [タグの追加 (オプション)] については、オプションで key-value タグを追加して、このロールのアクセスをより適切に整理、追跡、または制御できます。この投稿では、タグを追加しないでください。
  7. [次: 確認] を選択します。
  8. [確認] ページで、[ロール名] に AzureSSO と入力します。
    • [ロールの説明] については、オプションでロールの機能の簡単な説明を入力できます。
    • [信頼できるエンティティ] については、前に指定したプロバイダーの ARN が正しいことを確認します。
  9. [ロールの作成] を選択します。

IAM Amazon Redshift アクセスポリシーの作成

次の手順では、IAM アクセス許可ポリシー redshiftAccessPolicy をロールに追加して、ロール AzureSSO が AWS STS トークンを生成して Amazon Redshift に接続できるようにします。

  1. IAMコンソールで、[ポリシー] を選択します。
  2. [ポリシーの作成] を選択します。
  3. [ポリシーの作成] ページで [JSON] を選択します。
  4. ポリシーには、次の JSON を入力します。
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "redshift:DescribeClusters"
                ],
                "Resource": [
                    "arn:aws:redshift:<YOUR-REGION>:<AWS-ACCOUNT-NUMBER>:cluster:<YOUR-REDSHIFT-CLUSTER-NAME>"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "redshift:GetClusterCredentials"
                ],
                "Resource": [
                    "arn:aws:redshift:<YOUR-REGION>:<AWS-ACCOUNT-NUMBER>:dbname:<YOUR-REDSHIFT-CLUSTER-NAME>/dev",
                    "arn:aws:redshift:<YOUR-REGION>:<AWS-ACCOUNT-NUMBER>:dbuser:<YOUR-REDSHIFT-CLUSTER-NAME>/${redshift:DbUser}"
                ],
                "Condition": {
                    "StringEquals": {
                        "aws:userid": "<YOUR-ROLE-ID>:${redshift:DbUser}"
                    }
                }
            },
            {
                "Effect": "Allow",
                "Action": [
                    "redshift:CreateClusterUser"
                ],
                "Resource": [
                    "arn:aws:redshift:<YOUR-REGION>:<AWS-ACCOUNT-NUMBER>:dbuser:<YOUR-REDSHIFT-CLUSTER-NAME>/${redshift:DbUser}"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "redshift:JoinGroup"
                ],
                "Resource": [
                    "arn:aws:redshift:<YOUR-REGION>:<AWS-ACCOUNT-NUMBER>:dbgroup:<YOUR-REDSHIFT-CLUSTER-NAME>/<YOUR-DB-GROUP>"
                ]
            }
        ]
    }

    前述のコードで、プレースホルダーを適切な値に置き換えます。次の表は、各プレースホルダーの説明です。

1 <YOUR-REGION> ソリューションをホストするリージョン。
2 <AWS-ACCOUNT-NUMBER> AWS アカウント。
3 <YOUR-REDSHIFT-CLUSTER-NAME> Amazon Redshift クラスターの名前。たとえば、cluster-1 です。
4 <YOUR-ROLE-ID> 次のセクションで作成するロール AzureSSO の一意の識別子。コード aws iam get-role AzureSSO を入力し、出力から RoleId 値を使用できます。詳細については、IAM 識別子を参照してください。
5 <YOUR-DB-GROUP> ユーザーが参加できるデータベースグループ。この投稿では、developer_grp を使用します。

 

  1. [ポリシーの確認] を選択します。
  2. [ポリシーの確認] セクションの [名前] に、ポリシーの名前を入力します。たとえば、redshiftAccessPolicy です。
  3. [説明] には、オプションで、ポリシーの機能の簡単な説明を入力できます。
  4. [概要] については、ポリシーコンポーネントを確認し、警告またはエラーを解決します。
  5. [ポリシーの作成] を選択します。
  6. このポリシーを IAM ロール AzureSSO に追加します。手順については、IAM ID アクセス許可の追加 (コンソール)を参照してください。
    • [マネージド IAM ポリシー] を選択します。

SSO セットアップのテスト

これで、SSO セットアップをテストできます。以下の手順を完了してください。

  1. Azure Portal で、Amazon Redshift アプリケーションに対して [シングルサインオン] を選択します。
  2. [テスト] を選択します。
  3. [現在のユーザーとしてサインイン] を選択します。

セットアップが正しければ、コンソールが表示されます (一部のブラウザでは次のタブに表示される場合があります)。次のスクリーンショットは、想定されたロール AzureSSO を使用してユーザー test としてサインインしていることを示しています。

SSO セットアップを確認したら、Azure AD フェデレーションを使用して SQL クライアントを Amazon Redshift に接続する準備が整います。

Azure AD フェデレーションを使用するための JDBC SQL クライアントのセットアップ

Amazon Redshift の JDBC または ODBC ドライバーをサポートする任意のクライアントツールを使用して、Azure SSO を使用して Amazon Redshift に接続できます。この投稿では、SQLWorkbenchJ クライアントを使用して、JDBC を使用して Amazon Redshift に接続します。SQLWorkbench/J のインストール手順については、SQL Workbench/J を使用してクラスターに接続するを参照してください。

Azure AD 認証情報を使用して Amazon Redshift クラスターに接続するには、次の手順を実行します。別のクライアントを使用している場合は、JDBC URL でこれらすべてのパラメータを URL パラメータとして渡すことができます。

JDBC で Azure AD を使用するには、Amazon Redshift の JDBC ドライバーがバージョン 1.2.37.1061 以降である必要があります。ODBC で Azure AD を使用するには、Amazon Redshift の ODBC ドライバーがバージョン 1.4.10.1000 以降である必要があります。このチュートリアルでは、AWS SDK でドライバーを使用します。

  1. SQLWorkbenchJ を起動します。
  2. [接続プロファイルの選択] ページで、[プロファイルグループの追加] を選択します。
  3. [新しい接続プロファイル] をクリックします。 これにより、作成したプロファイルグループで新しいプロファイルが開きます。適切な名前を選択できます。ここでは「Azure」と名付けています。
  4. [ドライバー] には、Amazon Redshift のドライバーを選択します。
  5. 次のステップでは、JDBC URL を作成し、それを「URL」フィールドに入力します。これを行うには、jdbc:redshift:iam://<your-cluster-identifier-here>:<your-cluster-region-here>/<your-DB-name-here> のパターンを使用します。 <your-cluster-identifier-here><your-cluster-region-here>、および <your-DB-name-here> を Amazon Redshift クラスターに一致する値に置き換えます。この投稿では、cluster-identifierus-west-1、および dev を使用しています。
  6. [拡張プロパティ] を選択します。

SQLWorkbenchJ の [拡張プロパティ] に一覧表示されている次のキーと値のペアを追加します。

1 plugin_name Azure AD フェデレーションを使用するには、com.amazon.redshift.plugin.AzureCredentialsProvider を使用します。
2 idp_tenant これは、IdP (Azure) で設定されている会社のテナント名です。この値は、テナント名またはハイフンを含むテナント固有の ID のいずれかです。このチュートリアルでは、以前に記録したテナント ID を使用します。
3 client_secret 以前に作成したクライアントのシークレット値を使用します。
4 client_id これは、Redshift アプリケーションのハイフンを含むクライアント ID です。以前に記録したクライアント ID を使用します。

これらの手順を正しく完了した場合は、Azure AD の認証情報を使用して Amazon Redshift クラスターに接続できます。

まとめ

この投稿では、Amazon Redshift クラスターへのフェデレーションを有効にする IdP として Azure AD を設定および使用するためのステップバイステップガイドを提供しました。

 


著者について

Harshida Patel 氏は、AWS のデータウェアハウススペシャリストソリューションアーキテクトです。

 

 

 

 

Pir Abdul Rasool Qureshi 氏は、AWS のソリューションアーキテクトです。 彼は、データベースおよび分析の領域において、お客様の複雑な問題を解決し、成果を上げることに喜びを感じています。仕事以外では、時間が許す限り、家族と過ごしたり、映画鑑賞をしたり、クリケットをしたりするのが大好きです。