

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# Azure
<a name="setup-identity-provider-azure"></a>

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

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

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/aXs9hEgJCss/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/aXs9hEgJCss)


## ステップ 1: Azure と AWS アカウントを相互に信頼するように設定する
<a name="setup-identity-provider-azure-trust"></a>

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

**相互に信頼するように Azure AD と AWS アカウントを設定するには**

1. Azure AD ユーザーが接続するための既存の Amazon Redshift クラスターを作成または使用します。接続を設定するには、クラスター識別子など、このクラスターの特定のプロパティが必要です。詳細については、「[クラスターの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. **\$1 新しいクレームの追加** を選択して、AutoCreate のクレームを追加します。

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

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

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

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

   ここで、`123456789012` は AWS アカウント、*`AzureSSO`* はユーザーが作成した IAM ロール、*`AzureADProvider`* は IAM プロバイダーです。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/setup-identity-provider-azure.html)

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

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

1. IAM コンソールで、IAM SAML アイデンティティプロバイダーを作成します。指定したメタデータドキュメントは、Azure エンタープライズアプリケーションの設定時に保存したフェデレーションメタデータ XML ファイルです。詳細なステップついては *IAM ユーザーガイド*の [IAMアイデンティティプロバイダー (コンソール) の作成と管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console) を参照してください。

1. IAM コンソールで、SAML 2.0 フェデレーション用の IAM ロールを作成します。詳細なステップについては、「IAM ユーザーガイド」**の「[SAML 用のロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)」を参照してください。

1. IAM コンソールで SAML 2.0 フェデレーション用に作成した IAM ロールにアタッチできる IAM ポリシーを作成します。詳細な手順については、「IAM ユーザーガイド」**の「[IAM ポリシーの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)」を参照してください。

   環境に合わせて次のポリシー (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](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) を参照してください。

     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 を設定する
<a name="setup-identity-provider-azure-auth"></a>

------
#### [ JDBC ]

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

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

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

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

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

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

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

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

  1. **接続プロファイルの選択**ページで、次のように接続プロファイルに情報を追加します。
     + **ユーザー**には、マイクロソフトの Azure ユーザー名を入力します。これは、使用認証しようとしているクラスターに対するアクセス許可を持つ、シングルサインオンに使用しているマイクロソフトの Azure アカウントのユーザー名です。
     + **パスワード**には、マイクロソフトの Azure のパスワードを入力します。
     + **[ドライバ]** では、**[Amazon Redshift (com.amazon.redshift.jdbc.Driver)]** を選択します。
     + **[URL]** には、**jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name*** と入力します。

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

     Azure AD シングルサインオン設定の場合は、次のように追加情報を追加します。
     + **plugin\$1name** には、**com.amazon.redshift.plugin.AzureCredentialsProvider** と入力します。この値は、認証方法として Azure Single Sign-On を使用するドライバーに指定します。
     + **[idp\$1tenant]** には、***your-idp-tenant*** と入力します。Microsoft Azure AD のみに使用されます。これは、Azure AD で設定されている会社のテナント名です。この値は、テナント名またはハイフン付きのテナント固有 ID のいずれかになります。
     + **[client\$1secret]** には、***your-azure-redshift-application-client-secret*** と入力します。Microsoft Azure AD のみに使用されます。これは、Azure Single Sign-On 設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアントシークレットです。これは、ccom.amazon.redshift.plugin.AzureCredentialsProvider プラグインにのみ適用されます。
     + **[client\$1id]** には、***your-azure-redshift-application-client-id*** と入力します。Microsoft Azure AD のみに使用されます。これは、Azure シングルサインオン設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアント ID (ハイフン付き) です。

     MFA 設置を使用した Azure AD シングルサインオンの場合は、次のように接続プロパティに情報を追加します。
     + **[plugin\$1name]** には、**com.amazon.redshift.plugin.BrowserAzureCredentialsProvider** と入力します。この値は、認証方法として MFA と Azure シングルサインオンを使用するようドライバに指定します。
     + **[idp\$1tenant]** には、***your-idp-tenant*** と入力します。Microsoft Azure AD のみに使用されます。これは、Azure AD で設定されている会社のテナント名です。この値は、テナント名またはハイフン付きのテナント固有 ID のいずれかになります。
     + **[client\$1id]** には、***your-azure-redshift-application-client-id*** と入力します。Microsoft Azure AD のみに使用されます。これは、MFA 設定で Azure AD シングルサインオン設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアント ID (ハイフン付き) です。
     + **[listen\$1port]** には、***your-listen-port***と入力します。これは、ローカルサーバーがリッスンしているポートです。デフォルト値は 7890 です。
     + **[idp\$1response\$1timeout]** には、***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\$1name** には、**AzureAD** と入力します。これにより、認証方法として Azure シングルサインオンを使用するようドライバに指定します。
  + MFA 設定の Azure AD シングルサインオンの **plugin\$1name** には、**BrowserAzureAD** と入力します。これにより、認証方法として MFA と Azure Single Sign-On を使用するようドライバに指定します。
  + **[uid]** には、***your-azure-username*** と入力します。これは、認証しようとしているクラスターに対するアクセス許可を持つ、シングルサインオンに使用しているMicrosoft Azure アカウントのユーザー名です。これは、**plugin\$1name** が **AzureAD** である場合にのみ使用します。
  + **[pwd]** には、***your-azure-password*** と入力します。これは、**plugin\$1name** が **AzureAD**である場合のみに使用します。
  + **[idp\$1tenant]** には、***your-idp-tenant*** と入力します。これは、IdP (Azure) で設定されている会社のテナント名です。この値は、テナント名またはハイフン付きのテナント固有 ID のいずれかになります。
  + **[client\$1secret]** には、***your-azure-redshift-application-client-secret*** と入力します。これは、Azure シングルサインオン設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアントの秘密です。
  + **[client\$1id]** には、***your-azure-redshift-application-client-id*** と入力します。これは、Azure シングルサインオン設定をセットアップするときに作成した Amazon Redshift アプリケーションのクライアント ID (ハイフン付き) です。
  + **[listen\$1port]** には、***your-listen-port***と入力します。これは、ローカルサーバーがリッスンしているポートです。デフォルト値は 7890 です。これは、ブラウザ Azure AD プラグインに適用されます。
  + **[idp\$1response\$1timeout]** には、***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
  ```

------

## トラブルシューティング
<a name="setup-identity-provider-azure-auth"></a>

ブラウザ 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/ を使用するように **モバイルとデスクトップアプリケーション** が構成されていることを確認します。