Amazon Redshift 用のネイティブ ID プロバイダー (IdP) フェデレーション - Amazon Redshift

Amazon Redshift 用のネイティブ ID プロバイダー (IdP) フェデレーション

Amazon Redshift の ID とアクセス許可の管理は、既存の ID プロバイダーを活用して認証とアクセス許可の管理を簡素化するため、ネイティブ ID プロバイダーフェデレーションを使用することで簡単になります。これは、ID プロバイダーから Redshift に ID メタデータを共有できるようにすることで実現します。この機能の最初のイテレーションでは、サポートされる ID プロバイダーは Microsoft Azure Active Directory (Azure AD) です。

サードパーティーの ID プロバイダーからの ID を認証できるように Amazon Redshift を設定するには、ID プロバイダーを Amazon Redshift に登録します。これにより、Redshift は ID プロバイダーによって定義されたユーザーとロールを認証できます。したがって、アイデンティティ情報が共有されるため、サードパーティ ID プロバイダーと Amazon Redshift の両方できめ細かなアイデンティティ管理を実行する必要がなくなります。

ID プロバイダー (IdP) グループから転送されるセッションロールの使用の詳細については、「Amazon Redshift データベースデベロッパーガイド」の「PG_GET_SESSION_ROLES」を参照してください。

Amazon Redshift で ID プロバイダーを設定する

このセクションでは、ネイティブ ID プロバイダーフェデレーションの通信を確立するように ID プロバイダーと Amazon Redshift を設定する手順を示します。ID プロバイダーの有効なアカウントが必要です。Amazon Redshift を設定する前に、Redshift をアプリケーションとして ID プロバイダーに登録し、管理者の同意を付与します。

Amazon Redshift で次の手順を完了します。

  1. SQL ステートメントを実行して、Azure アプリケーションメタデータの説明を含む ID プロバイダーを登録します。ID プロバイダーを Amazon Redshift で作成するには、パラメータ値を置き換えた後に次のコマンドを実行します。issuerclient_idclient_secret、および audience。これらのパラメータは Microsoft Azure AD 固有です。ID プロバイダー名を任意の名前に置き換え、名前空間を ID プロバイダーディレクトリからユーザーとロールを含む一意の名前に置き換えます。

    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 との通信を容易にすることを示します。Azure は現在、唯一サポートされている ID プロバイダーです。

    • issuer – トークンが受信されたときに信頼する発行者 ID。tenant_id の一意の識別子が発行者に付加されます。

    • client_id – ID プロバイダーに登録されたアプリケーションの一意の公開識別子。これは、アプリケーション ID と呼びます。

    • client_secret – ID プロバイダーと登録済みアプリケーションのみが認識するシークレット識別子、またはパスワード。

    • audience – Azure でアプリケーションに割り当てられているアプリケーション ID。

    共有クライアントシークレットを使用する代わりに、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_pk_password は省略可能です。

  2. オプション: Amazon Redshift で SQL コマンドを実行して、ユーザーとロールを事前に作成します。これにより、事前に権限を付与することが容易になります。Amazon Redshift でのロール名は次のようなものです。<Namespace>: <GroupName on Azure AD>。例えば、Microsoft Azure AD で名前空間が aad で、ロール名は aad:rsgrouprsgroup といういうグループを作成するとします。Amazon Redshift のユーザー名とロール名は、ID プロバイダーの名前空間のこのようなユーザー名とグループメンバーシップから定義されます。

    ロールとユーザーのマッピングには、external_id 値が最新であることを確認する検証が含まれます。外部 ID は、ID プロバイダー内のグループまたはユーザーの識別子にマップされます。たとえば、ロールの外部 ID は、対応する Azure AD グループ ID にマップされます。同様に、各ユーザーの外部 ID は ID プロバイダーの ID にマップされます。

    create role "aad:rsgroup";
  3. 要件に応じて、関連する権限をロールに付与します。例:

    GRANT SELECT on all tables in schema public to role "aad:rsgroup";
  4. さらに、特定のユーザーにアクセス権限を付与することもできます。

    GRANT SELECT on table foo to aad:alice@example.com

    フェデレーション外部ユーザーのロールメンバーシップは、そのユーザーのセッションでのみ利用可能であることに注意してください。これはデータベースオブジェクト作成と密接に関連しています。例えば、フェデレーション外部ユーザーがビューやストアドプロシージャを作成した場合、その同じユーザーがそれらのオブジェクトの権限を他のユーザーやロールに委任することはできません。

名前空間の説明

名前空間は、ユーザーまたはロールを特定の ID プロバイダーにマッピングします。例えば、AWS IAM で作成したユーザーのプレフィックスは iam: です。このプレフィックスは、ユーザー名の衝突を防ぎ、複数の ID ストアをサポートできるようにします。aad 名前空間に登録された ID ソースからユーザー alice@example.com がログインしたが、そのユーザーが存在していない場合は Redshift でユーザー aad:alice@example.com が作成されます。ユーザーおよびロールの名前空間には、クラスターに関連付けられた一意の識別子であるAmazon Redshift クラスター名前空間とは異なる機能があることに注意してください。

ネイティブ ID プロバイダー (IdP) フェデレーションによるログインの仕組み

ID プロバイダーと Amazon Redshift の間の事前設定を完了するには、いくつかの手順を実行します。まず、Amazon Redshift をサードパーティーアプリケーションとして ID プロバイダーに登録し、必要な API アクセス許可を要求します。次に、ID プロバイダーでユーザーとグループを作成します。最後に、ID プロバイダーに固有の認証パラメータを設定する SQL ステートメントを使用して、ID プロバイダーを Amazon Redshift に登録します。Redshift に ID プロバイダーを登録する一環として、ユーザーおよびロールが正しくグループ化されていることを確認するために名前空間を割り当てます。

Amazon Redshift に登録された ID プロバイダーでは、Redshift と ID プロバイダー間の通信が設定されます。その後、クライアントはトークンを渡し、ID プロバイダーエンティティとして Redshift に認証できます。Amazon Redshift は、IdP グループのメンバーシップ情報を使用して Redshift ロールにマッピングします。ユーザーが Redshift にまだ存在しない場合、ユーザーが作成されます。ID プロバイダーグループが存在しない場合は、それらにマップするロールが作成されます。Amazon Redshift 管理者はロールに対するアクセス許可を付与し、ユーザーはクエリを実行したり、他のデータベースタスクを実行したりできます。

次の手順では、ユーザーがログインしたときにネイティブ ID プロバイダーフェデレーションがどのように機能するかを概説します。

  1. ユーザーがネイティブ IdP オプションを使用してログインすると、ID プロバイダーのトークンがクライアントからドライバーに送信されます。

  2. ユーザーは認証されます。ユーザーが Amazon Redshift に存在していない場合は、新しいユーザーが作成されます。Redshift は、ユーザーの ID プロバイダーグループを Redshift ロールにマップします。

  3. 権限は、ユーザーの Redshift ロールに基づいて割り当てられます。これらは、管理者によってユーザーとロールに付与されます。

  4. ユーザーは Redshift をクエリできます。

デスクトップクライアントツールを使用して Amazon Redshift に接続する

ネイティブ ID プロバイダーフェデレーションを使用して Power BI で Amazon Redshift に接続する方法については、ブログ記事「Integrate Amazon Redshift native IdP federation with Microsoft Azure Active Directory (AD) and Power BI」(Amazon Redshift ネイティブ IdP フェデレーションと Microsoft Azure Active Directory (AD) および Power BI を統合する) を参照してください。Azure AD を使用した Amazon Redshift ネイティブ IdP セットアップの段階的な実装について説明します。Power BI デスクトップまたは Power BI サービスのクライアント接続を設定する手順についても説明します。この手順には、アプリケーションの登録、アクセス許可の設定、認証情報の設定が含まれます。

Power BI Desktop と JDBC クライアント-SQL Workbench/J を使用して Amazon Redshift ネイティブ IdP フェデレーションを Azure AD と統合する方法については、次の動画をご覧ください。

ネイティブ ID プロバイダーフェデレーションを使用して SQL クライアント (特に DBeaver または SQL Workbench/J) で Amazon Redshift に接続する方法については、ブログ記事「Integrate Amazon Redshift native IdP federation with Microsoft Azure AD using a SQL client」(SQL クライアントを使用して Amazon Redshift ネイティブ IdP フェデレーションを Microsoft Azure AD と統合する) を参照してください。