第7章 データのセキュリティー保護
データへの不正アクセスを防ぐには、以下の手段を実装できます。
- OpenID-Connect 認証および OAuth2 承認を有効にするように、OpenShift で Red Hat Single Sign-On との統合を設定します。
- ロールベースのアクセス制御を仮想データベースに適用します。
- 3Scale を設定して OData API エンドポイントをセキュアにします。
- データベースクライアント(ODBC と JDBC)と仮想データベース間の通信を暗号化します。
7.1. 仮想データベースの OData API のセキュリティー保護
データ仮想化を Red Hat Single Sign-On および Red Hat 3scale API Management と統合すると、高度な承認および認証制御を仮想データベースサービスの OData エンドポイントに適用できます。
Red Hat Single Sign-On テクノロジーは OpenID-Connect を認証メカニズムとして使用して API をセキュアにし、OAuth2 を承認メカニズムとして使用します。データ仮想化は、Red Hat Single Sign-On のみまたは 3scale と統合することができます。
デフォルトでは、3scale システムが同じクラスターおよび namespace に定義されている限り、仮想データベースの作成後にそのデータベースへの OData インターフェースは 3scale によって検出可能です。Red Hat Single Sign-On で OData API へのアクセスのセキュリティーを保護することにより、ユーザーロールを定義し、API エンドポイントへのロールベースのアクセスを実装できます。設定が完了したら、ビュー、列、またはデータソースレベルで仮想データベースへのアクセスを制御できます。許可されたユーザーのみが API エンドポイントにアクセスでき、各ユーザーにはそのロール(ロールベースのアクセス)に適したレベルのアクセスが許可されます。3scale を API へのゲートウェイとして使用することで、3scale の API 管理機能を活用し、API の使用状況を承認アカウントに対応して追跡および請求を行うことができます。
ユーザーがログインすると、3scale は Red Hat Single Sign-On パッケージを使用した認証をネゴシエートします。認証に成功すると、3scale は検証のためにセキュリティートークンを OData API に渡します。その後、OData API はトークンからパーミッションを読み取り、仮想データベースに定義されたデータロールに適用します。
前提条件
- Red Hat Single Sign-On が OpenShift クラスターで実行されている。Red Hat Single Sign-On のデプロイに関する詳細は、Red Hat Single Sign-On for OpenShift のドキュメントを参照してください。
- 仮想データベースをホストする OpenShift クラスターに Red Hat 3scale API Management がインストールされている。
3scale と Red Hat Single Sign-On の間でインテグレーションを設定している。詳細は、『Using the Developer Portal』の「 Configuring Red Hat Single Sign-On integration 」を参照してください。
- realm-management ロールおよび manage-clients ロールが割り当てられている。
- API ユーザーと指定したクレデンシャルを作成している。
- OpenID-Connect を認証メカニズムとして使用し、OAuth2 を承認メカニズムとして使用するように 3scale を設定している。
7.1.1. OData をセキュア化するための Red Hat Single Sign-On の設定
Red Hat Single Sign-On に構成設定を追加して、データ仮想化との統合を有効にする必要があります。
前提条件
- Red Hat Single Sign-On が OpenShift クラスターで実行されている。Red Hat Single Sign-On のデプロイに関する詳細は、Red Hat Single Sign-On for OpenShift[Red Hat Single Sign-On] のドキュメントを参照してください。
- Data Virtualization Operator を実行して、Red Hat Single Sign-On が稼働しているクラスターに仮想データベースを作成します。
手順
- ブラウザーから Red Hat Single Sign-On 管理コンソールにログインします。
データ仮想化サービスのレルムを作成します。
- master レルムのメニューから、Master にマウスをかざし、Add realm をクリックします。
-
datavirt
などのレルムの名前を入力してから Create をクリックします。
ロールを追加します。
- メニューから Roles をクリックします。
- Add Role をクリックします。
- ロールの名前( ReadRole など)を入力し、Save をクリックします。
- 必要に応じて他のロールを作成して、組織の LDAP または Active Directory のロールにマッピングします。外部アイデンティティープロバイダーからのユーザーデータの反復に関する詳細は、『サーバー 管理ガイド』 を参照してください。
ユーザーを追加します。
- メニューから Users をクリックし、Add user をクリックします。
-
Add
user
フォームで、ユーザー名(user など)を入力し、割り当てる他のユーザープロパティーを指定してから Save をクリックします。
user フィールドのみは必須です。 - ユーザーの詳細ページから、Credentials タブをクリックします。
- ユーザーのパスワードを入力して確認し、Reset Password をクリックして、プロンプトが表示されたら Change password をクリックします。
ユーザーにロールを割り当てます。
- Role Mappings タブをクリックします。
- Available Roles フィールドで ReadRole をクリックしてから Add selected をクリックします。
- developer という名前の 2 番目のユーザーを作成し、パスワードとロールをユーザーに割り当てます。
データ仮想化クライアントエントリーを作成します。
クライアントエントリーは、データ仮想化サービスを SSO クライアントアプリケーションとして表します。メニューから Clients . をクリックします。Create をクリックして Add Client ページを開きます。Client ID フィールドにクライアントの名前を入力します(例:
dv-client
)。Client Protocol フィールドで、openid-connect を選択します。Root URL フィールドを空白のままにして、Save をクリックします。
これで、Data Virtualization サービスの CR に SSO プロパティーを追加する準備が整いました。
7.1.2. カスタムリソースファイルへの SSO プロパティーの追加
Red Hat Single Sign-On が仮想データベースの OData エンドポイントをセキュアにするように設定した後、Red Hat Single Sign-On と統合するように仮想データベースを設定する必要があります。SSO を使用するように仮想データベースを設定するには、サービスの初回デプロイ時に使用した CR に SSO プロパティーを追加します(例: dv-customer.yaml
)。プロパティーを環境変数として追加します。SSO 設定は、仮想データベースを再デプロイした後に有効になります。
この手順では、以下の Red Hat Single Sign-On プロパティーを CR に追加します。
- Realm (
KEYCLOAK_REALM
) - 仮想データベースの Red Hat Single Sign-On で作成したレルムの名前。
- 認証サーバーの URL(
KEYCLOAK_AUTH_SERVER_URL
) - Red Hat Single Sign-On サーバーのベース URL。通常、形式は https://host:port/auth です。
- Resource name(
KEYCLOAK_RESOURCE
) - データ仮想化サービス用に Red Hat Single Sign-On で作成したクライアントの名前。
- SSL 要件(
KEYCLOAK_SSL_REQUIRED
) - レルムへの要求に SSL/TLS が必要であるかどうかを指定します。すべての要求、外部要求のみ、または none に SSL/TLS を要求できます。
- アクセスタイプ(
KEYCLOAK_PUBLIC_CLIENT
) - クライアントの OAuth アプリケーションタイプ。パブリックアクセスタイプは、ブラウザーからサインインするクライアント側のクライアント用です。
前提条件
- Data Virtualization Operator を実行して仮想データベースを作成している。
- 仮想データベースがデプロイされているクラスターで、Red Hat Single Sign-On が稼働している。
-
仮想データベースをデプロイするために使用した
dv-customer.yaml
などの CR YAML ファイルがある。 - Red Hat Single Sign-On 管理コンソールへの管理者アクセスがある。
手順
- Red Hat Single Sign-On 管理コンソールにログインして、必要な認証プロパティーの値を見つけます。
テキストエディターで、仮想データベースのデプロイに使用した CR YAML ファイルを開き、Red Hat Single Sign-On プロパティーの値に基づく認証環境変数を定義します。
以下に例を示します。
env: - name: KEYCLOAK_REALM value: master - name: KEYCLOAK_AUTH_SERVER_URL value: http://rh-sso-datavirt.openshift.example.com/auth - name: KEYCLOAK_RESOURCE value: datavirt - name: KEYCLOAK_SSL_REQUIRED value: external - name: KEYCLOAK_PUBLIC_CLIENT value: true
データ仮想化のセキュリティーを保護するために、以下の Maven アーティファクトのビルドソース依存関係を宣言します(
org.teiid:spring-keycloak
)。以下に例を示します。
env: .... build: source: dependencies: - org.teiid:spring-keycloak
- CR を保存します。
これで、仮想データベースの DDL にデータロールを定義する準備が整いました。
7.1.3. 仮想データベース DDL でのデータロールの定義
Red Hat Single Sign-On がデータ仮想化と統合するように設定した後、必要な設定変更を完了するには、仮想データベースの DDL でロールベースのアクセスポリシーを定義します。仮想データベースのデプロイ方法によっては、DDL を CR ファイルに埋め込むか、または別のファイルとして存在する可能性があります。
DDL ファイルに以下の情報を追加します。
ロール名DDL で定義するロールは、Red Hat Single Sign-On で先に作成したロールにマップする必要があります。
ヒント明確にするために、DDL ファイルのロール名を Red Hat Single Sign-On で指定したロール名に一致させます。一貫性を保つことで、各場所で定義するロールがどのように相互に関連するかを相互に関連付けるのが容易になります。
- 指定されたロールが付与されているユーザーにデータベースアクセスを許可します。たとえば、特定のテーブルビューでの SELECT パーミッションなど。
前提条件
- 「OData をセキュア化するための Red Hat Single Sign-On の設定」 の説明に従って、データ仮想化と連携するように Red Hat Single Sign-On を設定している。
- の説明に従って、仮想データベースの CR ファイルに SSO プロパティーを追加している 。
手順
- テキストエディターで、仮想データベースをデプロイするために使用した DDL の記述が含まれるファイルを開きます。
ステートメントを挿入して、Red Hat Single Sign-On の仮想データベースユーザーに定義したロールを追加します。たとえば、
ReadRole
という名前のロールを追加するには、以下のステートメントを DDL に追加します。CREATE ROLE ReadRole WITH FOREIGN ROLE ReadRole;
仮想データベースに実装するロールごとに、個別の
CREATE ROLE
ステートメントを追加します。ロールが割り当てられたユーザーのデータベースオブジェクトに対するアクセスレベルを指定する文を挿入します。以下に例を示します。
GRANT SELECT ON TABLE "portfolio.CustomerZip" TO ReadRole
仮想データベースに実装する各ロールに個別の
GRANT
ステートメントを追加します。CR または DDL ファイルを保存して閉じます。
これで、仮想データベースを再デプロイできるようになりました。Data Virtualization Operator を実行して仮想データベースをデプロイする方法は、6章Data Virtualization Operator の実行による仮想データベースのデプロイ を参照してください。
仮想データベースを再デプロイしたら、Red Hat Single Sign-On 管理コンソールにリダイレクト URL を追加します。詳細は、「Red Hat Single Sign-On 管理コンソールでのデータ仮想化クライアントのリダイレクト URI の追加」 を参照してください。
7.1.4. Red Hat Single Sign-On 管理コンソールでのデータ仮想化クライアントのリダイレクト URI の追加
仮想データベースの SSO を有効にして再デプロイしたら、「OData をセキュア化するための Red Hat Single Sign-On の設定」 で作成したデータ仮想化クライアントのリダイレクト URI を指定します。
リダイレクト URI、またはコールバック URL は、OpenID Connect を使用して認証し、リダイレクトメカニズムを使用してアイデンティティープロバイダーと通信する OData クライアントなどの パブリック クライアントに必要です。
OIDC クライアントのリダイレクト URI を追加する方法は、「 NameOfRHSSOServerAdmin 」を参照してください。
前提条件
- 仮想データベースの SSO を有効にし、Data Virtualization Operator を使用してこれを再デプロイしている。
- Red Hat Single Sign-On 管理コンソールへの管理者アクセスがある。
手順
- ブラウザーで Red Hat Single Sign-On 管理コンソールにログインします。
-
データ仮想化サービスのクライアントを作成したセキュリティーレルムから、メニューで Clients をクリックし、以前に作成したデータ仮想化クライアントの ID(
dv-client
など)をクリックします。 -
Valid Redirect URIs フィールドに OData サービスのルート URL を入力し、アスタリスクを追加します。例:
http://datavirt.odata.example.com/*
Red Hat Single Sign-On が OData API への呼び出しをインターセプトするかどうかをテストします。
ブラウザーから、OData エンドポイントのアドレスを入力します。以下に例を示します。
http://datavirt.odata.example.com/odata/CustomerZip
ログインページにより、認証情報の入力が求められます。
許可されたユーザーの認証情報でサインインします。
データの表示は、サインインに使用するアカウントのロールによって異なります。
odata/$metadata
などの一部のエンドポイントは、他のサービスで検出できるようにセキュリティーフィルタリングから除外されます。