接続の確立
コネクタ内で利用可能なオブジェクトは、"cdata.redshift" モジュールからアクセスできます。モジュールのオブジェクトを直接使用するには:
- モジュールを以下のようにインポートします。
import cdata.redshift as mod
- 接続を確立するには、以下のような適切な接続文字列を使用してコネクタオブジェクトからconnect() メソッドを呼び出します。
mod.connect("User=admin;Password=admin;Database=dev;Server=examplecluster.my.us-west-2.redshift.amazonaws.com;Port=5439;")
Amazon Redshift への接続
Amazon Redshift に接続するには、通常次の接続プロパティが必要です。
- Server:Amazon Redshift データベースをホスティングしているサーバーのホスト名またはIP アドレス。
- Database:Amazon Redshift クラスター用に作成したデータベース。
- Port(オプション):Amazon Redshift データベースをホスティングしているサーバーのポート。デフォルトは5439です。
以下の手順に従って、これらの値をAWS マネージメントコンソールで取得できます。
- Amazon Redshift コンソールを開きます(http://console.aws.amazon.com/redshift)。
- Clusters ページで、クラスターの名前をクリックします。
- Configuration タブで"Cluster Database Properties" セクションからプロパティを取得します。接続プロパティの値は、ODBC URL で設定された値と同じになります。
本製品 は、SSL 暗号化を使用してAmazon Redshift サーバーとのセキュアな通信を提供します。オプションで、UseSSL をfalse に設定して、SSL 暗号化をオフにすることができます。
SSL 認証を活用してAmazon Redshift データに接続することもできます。そのためには、次の接続プロパティを設定してください。
- SSLClientCert:クライアント証明書のための証明書ストア名に設定。クライアントとサーバーの両方のマシンでトラストストアとキーストアが保持される2-way SSL の場合に使用されます。
- SSLClientCertPassword:クライアント証明書ストアがパスワードで保護されている場合、この値をストアのパスワードに設定します。
- SSLClientCertSubject:TLS / SSL クライアント証明書のサブジェクト。ストア内の証明書を検索するために使用されます。
- SSLClientCertType:クライアントストアの証明書タイプ。
- SSLServerCert:サーバーが受け入れ可能な証明書。
次の例では、通常のユーザー名とパスワードのペア、および非アクティブなSSL 暗号化を使用してAmazon Redshift に接続します。
User=username;Password=password;Server=example.us-west-2.redshift.amazonaws.com;Database=your_database;UseSSL=false;"
Amazon Redshift への認証
Azure Active Directory
前提条件
- B2C 以外のAzure テナントのみがAzure AD 認証スキームを完了できます。
- 有効なAzure AD アカウントが必要です。有効なアカウントがない場合は、このプロセスを始める前にアカウントを作成してください。
認証
Azure AD の認証を行うには、以下のタスクを完了する必要があります。- OAuth アプリケーションの作成と登録
- Redshift Client Application の作成と設定
- 新しいId プロバイダーを定義
- 接続プロパティを指定
以下のセクションでは、これらのタスクについて詳しく説明します。
OAuth アプリケーションの作成と登録
以下の手順で、Azure 経由でAmazon Redshift データベースにログインするためのOAuth アプリを作成します。
- Azure Active Directory 概要 ページにある左のナビゲーションバーで、アプリの登録を選択します。
- アプリの登録ページ上部の新規登録をクリックします。
- アプリの登録ページで、必要事項を入力し、ページ下部の登録をクリックします。CallbackURL プロパティ値を保存します。
- アプリケーションを作成すると、アプリの概要ページが表示されます。左のナビゲーションバーで:
- 証明書とシークレットをクリックします。
- 新しいクライアントシークレットをクリックします。
- クライアントシークレットの追加ウィンドウで、必要事項を追加してウィンドウ下部の追加をクリックします。
- OAuthClientSecret を控えておきます(表示されるOAuth シークレットの値フィールド)。
- 新規に登録したアプリケーションで、左のナビゲーションバーにあるAPI の公開をクリックします。
- App ID URI の横の設定をクリックします。
- 登録時に入力した情報を含むSet the App ID URI ダイアログが表示されます。保存をクリックします。
- Add a scope をクリックします。
- 必要事項を入力し、フォーム下部のスコープの追加をクリックします。
Redshift Client Application の作成と設定
以下の手順に従って、もう1つアプリケーションを作成します。このアプリは、Amazon Redshift データベースのクライアントアプリケーションとして機能します。
- Azure Active Directory 管理ページに移動して、アプリの登録をクリックします。
- ページ上部の新規登録をクリックします。
- アプリケーションの登録ページで、必要事項を入力し、ページ下部の登録をクリックします。
- アプリを作成すると、アプリの概要ページが表示されます。左のナビゲーションバーで:
- 証明書とシークレットをクリックします。
- 新しいクライアントシークレットをクリックします。
- クライアントシークレットの追加ウィンドウで、必要事項を追加してウィンドウ下部の追加をクリックします。
- OAuthClientSecret を控えておきます(表示されるOAuth シークレットの値フィールド)。
- クライアントアプリの管理ページの左のナビゲーションバーで:
- API のアクセス許可をクリックします。
- アクセス許可の追加をクリックします。
- Microsoft Graph API を選択します。
- アプリケーションの許可をクリックします。
- Directory -> "Directory.Read.All" を選択します。
- 下部の追加をクリックします。
- 管理者の同意を与えますをクリックします。
- はいをクリックします。
- Azure Active Directory の左のナビゲーションバーで:
- グループをクリックします。
- グループページで、新しいグループをクリックして必要事項を入力します。
- 所有者が選択されていませんをクリックします。
- 所有者を追加ウィンドウが表示されます。ユーザーを選択します。
- 作成をクリックします。
新しいId プロバイダーを定義
次の手順で、新しいId プロバイダーを定義します。
- Azure Active Directory 概要 ページで、
- 左のナビゲーションペインからアプリの登録を選択します。
- すべてのアプリケーションタブを選択し、最初のOAuth アプリケーションを選択します。
- OAuth ページで、左のナビゲーションバーにあるマニフェストをクリックします。エディターでaccessTokenAcceptedVersion を検索します。値がNULL の場合、v1.0 トークンです。値が2の場合はv2.0 トークンです。
- Amazon Redshift インスタンスのクエリボックスから、以下の例に従ってId プロバイダのクエリを送信します。
CREATE IDENTITY PROVIDER oauth_standard TYPE azure NAMESPACE 'mynamespace' PARAMETERS '{ "issuer":"https://sts.windows.net/your_tenant_here/", "client_id":"YourClientId", "client_secret":"YourClientSecret", "audience":["your_application_id_uri_here"] }'
用語説明
- issuer ID: トークンを受け取る際に信頼する発行者ID。発行者には、tenant_id の一意な識別子が付加されます。v1.0 トークンを使用する場合、https://sts.windows.net/<your_tenant_id_here>/ を使用します。V2.0 トークンを使用する場合、https://login.microsoftonline.com/<your_tenant_id_here>/v2.0 を使用します。
- client_id: Id プロバイダーに登録されたアプリケーションの一意の公開識別子。これをアプリケーションID と呼びます。2つ目のアプリケーション(Amazon Redshift クライアントアプリケーション)用に生成されたクライアントID です。
- client_secret: ID プロバイダーおよび登録されたアプリケーションにのみ知られている秘密の識別子、またはパスワード。2つ目のアプリケーション(Amazon Redshift アプリケーション)用に生成されたクライアントシークレットです。
- audience: 1つ目のアプリケーション(OAuth アプリケーション)に割り当てられたアプリケーションID(URI)。
NAMESPACE には好きな名前を使用できます。
- Amazon Redshift で、CREATE IDENTITY PROVIDER クエリ(例として上記)をクエリテキストボックスに配置します。
- クエリボックスの下部にあるRun をクリックします。
- クエリテキストボックスで、以下の形式でRedshift データベース上にロールを作成します。
create role "mynamespace:myazuregroup";
CREATE IDENTITY PROVIDER クエリで提供されたID プロバイダーの名前空間と、先に作成したAzure グループの名前に置き換えてください。クエリボックスの下部にあるRun をクリックします。 - クエリテキストボックスで、この新しいロールに以下のようにテーブルアクセス権を付与します。
grant select on all tables in schema public to role "mynamespace:myazuregroup";
- 上記の例を、自分の名前空間とAzure グループ名に置き換えてください。
- クエリボックスの下部にあるRun をクリックします。
接続プロパティを設定します。
次の接続プロパティを指定します。
- AuthScheme:AzureAD に設定。
- Server:Amazon Redshift サーバーエンドポイントの名前に設定。
- Database:接続するAmazon Redshift データベースの名前に設定。
- User:認証するAmazon Redshift ユーザーの名前に設定します。
- AzureTenant:OAuth およびクライアントアプリが作成されたAzure テナントのID に設定。アプリの1つの概要ページにあるディレクトリ(テナント)ID を確認してください。
- SSOLoginURL:OAuth アプリの概要ページで確認できるアプリケーションID のURI の値に設定。
- Scope:v1.0 OAuth トークンの場合、OAuth アプリのAPI の公開ページにあるスコープフィールド名に設定。v2.0 OAuth トークンの場合は、OAuth アプリのクライアントID と同じです。
- OAuthClientId:作成したAmazon Redshift クライアントアプリケーションの概要ページにある、1つ目のOAuth アプリケーションのクライアントID に設定。
- OAuthClientSecret:クライアントアプリケーションの証明書とシークレットページにある、1つ目のOAuth アプリケーションのOAuth クライアントシークレットの値に設定。
- CallbackURL:OAuth アプリのコールバックURL に設定。
トラブルシューティング: "Azure JWT token does not have 'upn' field" エラーが発生した場合、以下の手順に従います。
- Azure Active Directory の管理ページで、アプリの登録に移動し、自身のOAuth アプリケーションを選択します。
- 左のナビゲーションバーでトークン構成をクリックします。
- Add optional claim をクリックします。
- Add optional claim 画面で、Token type の下のAccess をクリックします。
- Claim カラムの下のupn を選択します。
- 下部の追加をクリックします。
- Turn on the Microsoft Graph profile permission (required for claims to appear in the token) を選択します。
- 追加をクリックします。
- このプロセスをクライアントアプリでも繰り返します。
- 再度接続を試みてください。
Azure Active Directory PKCE
Azure AD PKCE で認証するには、以下のタスクを完了する必要があります。- OAuth アプリケーションの作成と登録
- Redshift Client Application の作成と設定
- 新しいId プロバイダーを定義
- 接続プロパティを指定
以下のセクションでは、これらのタスクについて詳しく説明します。
OAuth アプリケーションの作成と登録
以下の手順で、Azure 経由でAmazon Redshift データベースにログインするためのOAuth アプリケーションを作成します。
- Azure Active Directory 概要 ページにある左のナビゲーションバーで、アプリの登録をクリックします。
- アプリの登録ページ上部の新規登録をクリックします。
- アプリケーションの登録ページで、必要事項を入力します。
- Name に名前を入力します(例:"oauth_application")。
- Redirect URI にPublic client/native (mobile and desktop) を選択し、有効なURL(例:http://localhost:33333/)を入力します。
- ページ下部の登録をクリックします。CallbackURL プロパティ値を保存します。
- 新規に登録したアプリケーションで、左のナビゲーションバーにあるAPI の公開をクリックします。
- アプリケーションID URI の横の設定をクリックします。
- 登録時に入力した情報を含むSet the App ID URI ダイアログが表示されます。保存をクリックします。
- スコープの追加をクリックします。
- 必要事項を入力し、フォーム下部のスコープの追加をクリックします。
- 生成されたApplication ID URI およびAPI scope を保存します(例:api://6256f0b1-2284-43e4-8501-6e53dec4444f およびapi://6256f0b1-2284-43e4-8501-6e53dec4444f/jdbc_login)。
Redshift Client Application の作成と設定
以下の手順に従って、もう1つアプリケーションを作成します。このアプリは、Amazon Redshift データベースのクライアントアプリケーションとして機能します。
- Azure Active Directory 概要 ページで、左のナビゲーションバーからアプリの登録を選択します。
- アプリの登録ページ上部の新規登録をクリックします。
- アプリケーションの登録ページで、必要事項を入力し、ページ下部の登録をクリックします。
- アプリケーションを作成すると、アプリの概要ページが表示されます。左のナビゲーションバーで:
- 証明書とシークレットをクリックします。
- 新しいクライアントシークレットをクリックします。
- クライアントシークレットの追加ウィンドウで、必要事項を追加してウィンドウ下部の追加をクリックします。
- OAuthClientSecret を控えておきます(表示されるOAuth シークレットの値フィールド)。
- クライアントアプリの管理ページの左のナビゲーションバーで:
- API のアクセス許可をクリックします。
- アクセス許可の追加をクリックします。
- Microsoft Graph API を選択します。
- アプリケーションの許可をクリックします。
- Directory -> "Directory.Read.All" を選択します。
- 下部の追加をクリックします。
- 管理者の同意を与えますをクリックします。
- はいをクリックします。
- Azure Active Directory の左のナビゲーションバーで:
- グループをクリックします。
- グループページで、新しいグループをクリックして必要事項を入力します。
- 所有者が選択されていませんをクリックします。
- 所有者を追加ウィンドウが表示されます。ユーザーを選択します。
- 作成をクリックします。
新しいId プロバイダーを定義
次の手順で、新しいId プロバイダーを定義します。
- Azure Active Directory の左のナビゲーションバーでアプリの登録をクリックします。
- すべてのアプリケーションタブを選択し、最初のOAuth アプリケーションを選択します。
- OAuth 画面で、左のナビゲーションバーにあるマニフェストをクリックします。エディターでaccessTokenAcceptedVersion を探します。値がNULL または1の場合、v1.0 トークンです。値が2の場合はv2.0 トークンです。
- Amazon Redshift インスタンスのクエリボックスから、以下の例に従ってId プロバイダのクエリを送信します。
CREATE IDENTITY PROVIDER oauth_standard TYPE azure NAMESPACE 'mynamespace' PARAMETERS '{ "issuer":"https://sts.windows.net/your_tenant_here/", "client_id":"YourRedshiftApplicationClientId", "client_secret":"YourRedshiftApplicationClientSecret" ,"audience":["your_oauth_application_id_uri_here"] }'
v2.0 トークン発行者の場合、この値が必要です。"issuer":"https://login.microsoftonline.com/your_tenant_here/v2.0",
- 用語説明
- issuer ID:トークンを受け取る際に信頼する発行者ID。発行者には、tenant_id の一意な識別子が付加されます。v1.0 トークンを使用する場合、https://sts.windows.net<your_tenant_id_here> を指定します。v2.0 トークンを使用する場合、https://login.microsoftonline.com<your_tenant_id_here>/v2.0. を指定します。
- client_id:Id プロバイダーに登録されたアプリケーションの一意の公開識別子。これをアプリケーションID と呼びます。2つ目のアプリケーション(Amazon Redshift アプリケーション)用に生成されたクライアントID です。
- client_secret:ID プロバイダーおよび登録されたアプリケーションにのみ知られている秘密の識別子、またはパスワード。2つ目のアプリケーション(Amazon Redshift アプリケーション)用に生成されたクライアントシークレットです。
- audience:1つ目のアプリケーション(OAuth アプリケーション)に割り当てられたアプリケーションID(URI)。
- NAMESPACE には好きな名前を使用できます。
- Amazon Redshift で、CREATE IDENTITY PROVIDER クエリ(例として上記)をクエリテキストボックスに配置します。
- クエリボックスの下部にあるRun をクリックします。
- クエリテキストボックスで、以下の形式でRedshift データベース上にロールを作成します。
create role "mynamespace:myazuregroup";
- CREATE IDENTITY PROVIDER クエリで提供されたID プロバイダーの名前空間と、先に作成したAzure グループの名前に置き換えてください。
- クエリボックスの下部にあるRun をクリックします。
- クエリテキストボックスで、この新しいロールに以下のようにテーブルアクセス権を付与します。
grant select on all tables in schema public to role "mynamespace:myazuregroup";
- 上記の例を、自分の名前空間とAzure グループ名に置き換えてください。
- クエリボックスの下部にあるRun をクリックします。
接続プロパティを設定します。
上記の設定を終えたら、Amazon Redshift に接続するドライバーに以下のプロパティを指定します。
- AuthScheme:AzureADPKCE に設定。
- Server:Amazon Redshift サーバーエンドポイントの名前に設定。
- Database:接続するAmazon Redshift データベースの名前に設定。
- Scope:v1.0 OAuth トークンの場合、OAuth アプリケーションのAPI の公開ページにあるスコープフィールドに設定(例:api://d3cb3521-6c20-4e41-b16d-e48c8444ee11/jdbc_login)。v2.0 OAuth トークンの場合は、OAuth アプリケーションのクライアントID と同じです(例:d3cb3521-6c20-4e41-b16d-e48c8444ee11)。
- OAuthClientId:作成したOAuth アプリケーションの概要ページにある、アプリケーション(クライアント)ID に設定。
- CallbackURL:OAuth アプリのコールバックURL に設定。
トラブルシューティング
"Azure JWT token does not have 'upn' field" エラーが発生した場合、以下の手順に従います。
- Azure Active Directory 管理ページで、アプリの登録に移動し、自身のOAuth アプリケーションを選択します。
- 左のナビゲーションバーでトークン構成 -> Add Optional claim を選択します。
- Add optional claim 画面で、"Token type" の下のAccess をクリックします。
- Claim カラムの下のupn を選択します。
- 下部の追加をクリックします。
- トークンにクレームが表示されるために必要な、Turn on the Microsoft Graph profile permission を選択します。
- 追加をクリックします。
- このプロセスをクライアントアプリでも繰り返します。
- 再度接続を試みてください。
標準認証
Amazon Redshift にログイン資格情報で接続するには、AuthScheme をBasic に設定します。 加えて、以下の接続プロパティを設定します。
- User:Amazon Redshift サーバーに認証する際に使われるユーザー。
- Password:Amazon Redshift サーバーに認証する際に使われるパスワード。
AuthScheme=Basic;User=user;Password=password;Server=example.us-west-2.redshift.amazonaws.com;Database=your_database;
IAM credentials
AuthScheme をIAMCredentials に設定します。次は接続文字列の例です。
AuthScheme=IAMCredentials;Server=example.us-west-2.redshift.amazonaws.com;Database=your_database;User=your_user;AWSAccessKey=your_access_key;AWSSecretKey=your_secretkey;
一時的な資格情報を使用してIAM ロールで接続している場合は、AWSSessionToken も適用する必要があります。
オプションで以下を適用できます。
- AutoCreate:接続中にデータベースユーザーが存在しない場合は、User に指定した名前でデータベースユーザーを作成します。
- DbGroups:データベースユーザーが現在のセッションに参加するデータベースグループ。
ADFS
ADFS に接続するには、AuthScheme をADFS に設定し、次のプロパティを設定します。
- User:ADFS ユーザー。
- Password:ADFS ユーザーのパスワード。
- SSOLoginURL:SSO プロバイダーのログインURL。
接続文字列の例:
AuthScheme=ADFS;User=username;Password=password;SSOLoginURL='https://sts.company.com';
ADFS 統合
ADFS 統合フローでは、現在ログインしているWindows ユーザーの資格情報で接続します。 ADFS 統合フローを使用するには、User およびPassword を指定せず、それ以外の設定は上記のADFS ガイドと同じ手順を実行してください。
PingFederate に接続するには、AuthScheme をPingFederate に設定し、次のプロパティを設定します。
- User:PingFederate ユーザー。
- Password:PingFederate ユーザーのパスワード。
- SSOLoginURL:SSO プロバイダーのログインURL。
- AWSRoleARN(オプション):複数のロールARN がある場合は、認可に使用するARN を指定します。
- AWSPrincipalARN(オプション):複数のプリンシパルARN がある場合は、認可に使用するARN を指定します。
- SSOProperties(オプション):Amazon S3へのリクエストにユーザー名とパスワードを認可ヘッダーとして含める場合は、Authscheme=Basic。
SSOLoginURL 用の相互SSL 認証(WS-Trust STS エンドポイント)を有効化するには、次の SSOProperties を設定します。
- SSLClientCert
- SSLClientCertType
- SSLClientCertSubject
- SSLClientCertPassword
接続文字列の例:
Server=redshift-cluster-1.xxxxxxxxxxxx.us-east-1.redshift.amazonaws.com;Database=dev;Port=5439;UseSSL=true;SSLServerCert=*;AuthScheme=PingFederate;AutoCreate=TRUE;SSOLoginURL=https://mycustomserver.com:9033/idp/sts.wst;SSOExchangeUrl=https://us-east-1.signin.aws.amazon.com/platform/saml/acs/764ef411-xxxxxx;User=admin;Password=PassValue;AWSRegion=NORTHERNVIRGINIA;