IICSでSecure AgentをProxy経由で使う

2020.12.08

こんにちは。データアナリティクス事業本部の松村です。
本エントリはクラスメソッド インフォマティカ Advent Calendar 2020のエントリです。

Secure Agentとは

Informatica Intelligent Cloud Services(以降IICS)における特徴的なコンポーネントとして、Secure Agentが挙げられます。これはオンプレミスのサーバやクラウド上の仮想マシンなどの任意のコンピュータにインストールすることができ、この上でETLなどのジョブを実行することができます。
IICSはSecure Agentの存在により、PaaSでありながらデータをプライベートネットワークから外部に出すことなく処理することを可能にしています。
IICSデータセンター(便宜上こう呼びます)とSecure Agentとの通信は、基本的にジョブの実行指令やステータスチェックなどで、実際のデータがIICSデータセンターに送信されることはありません。
※ただし、Cloud Data Integrationのマッピングデザイナなどでデータをプレビューする場合は、そのデータがSecure AgentからIICSデータセンター、さらにIICSデータセンターからWebブラウザの間で送信されます。これらの通信はHTTPSで保護されますので盗聴の危険性はありませんが、セキュリティ規定上インターネット経由のデータ通信が許されない場合は、本番環境でのデータプレビューを行わないようにしてください。

Secure Agentの優れているところは、IICSデータセンターとの通信はすべてHTTPS、かつTCP/IPレベルでは常に自身のリクエストを起点とするため、間にFirewallがあったとしてもその設定が煩わしくないことです。HTTPSは元から許可していることが多いでしょうし、ステートフル型Firewallであれば明示的なインバウンド通信許可も不要です。
Proxy経由の通信もサポートしていますので、オンプレミスのプライベートネットワークでProxyを通さないとインターネットに出られない環境であっても、問題なく使用することができます。今回は実際にSecure AgentにProxyの設定をして使ってみます。

一部下記のエントリと重複する説明もありますが、改めてインストールから一通りの手順を解説していきます。

Informatica Cloud Data Integrationの環境をAWS上で構築してみた

Proxyの設定に関しては、マニュアルのこの説明に従っています。

Configure proxy server settings on Linux

構成

今回、作業にあたってAWSに下図のような環境を用意しました。Secure AgentはVPCのプライベートサブネットに配置し、パブリックサブネット上のProxyを介してインターネットに出ていくようにします。ProxyはBasic認証が必要なように設定しました。
通常AWSを使うなら、プライベートサブネットからインターネットに出るにはNATゲートウェイやNATインスタンスを使うところですが、今回はProxyを通すこと自体が目的なのでこのようにしています。

Secure Agentのダウンロード

まずはIICSにログインします。ログインしたら管理者画面を開きます。

画面左側のメニューの『ランタイム環境』をクリックします。

『Secure Agentのダウンロード』をクリックします。

インストール先のプラットフォームを選択してダウンロードします。今回は『Linux 64』を選択します。Linuxの場合、ダウンロードされるファイルのデフォルト名はagent64_install_ng_ext.binです。
インストールトークンはインストール時に必要なのでコピーしておいてください。トークンの有効期限は24時間です。万が一それを過ぎてしまった場合、ひとつ前のスクリーンショットの画面で『インストールトークンの生成』ボタンをクリックすれば再発行できます。

こちらがインストールトークン再発行の画面です。

Secure Agentのインストール

ダウンロードしたファイルをSFTP等でインストール先のコンピュータに転送し、そのコンピュータにログインします。ログインアカウントはSecure Agentを実行したいユーザが良いでしょう。ログインしたら、agent64_install_ng_ext.binを配置したディレクトリに移動します。

まずはagent64_install_ng_ext.binに実行権限を付与します。

$ chmod +x agent64_install_ng_ext.bin

インストールコマンドを実行します。

$ ./agent64_install_ng_ext.bin -i console

実行したら途中で何度かプロンプトが表示されます。以下に今回インストールしたときのログを貼りつけます。
インストーラのバージョンによると思いますが、今回プロンプトは3回出てきました。

Preparing to install
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...

Launching installer...

===============================================================================
Informatica Cloud Secure Agent                   (created with InstallAnywhere)
-------------------------------------------------------------------------------

Preparing CONSOLE Mode Installation...




===============================================================================
Choose Install Folder
---------------------

Where would you like to install?

  Default Install Folder: /home/infa/infaagent

ENTER AN ABSOLUTE PATH, OR PRESS <ENTER> TO ACCEPT THE DEFAULT
      : 



===============================================================================
Pre-Installation Summary
------------------------

Please Review the Following Before Continuing:

Product Name:
    Informatica Cloud Secure Agent

Install Folder:
    /home/infa/infaagent

Disk Space Information (for Installation Target): 
    Required:     273,807,639 Bytes
    Available: 18,626,854,912 Bytes

PRESS <ENTER> TO CONTINUE: 



===============================================================================
Installing...
-------------

 [==================|==================|==================|==================]
 [------------------|------------------|------------------|------------------]



===============================================================================
Installation Complete
---------------------

Congratulations. Informatica Cloud Secure Agent has been successfully 
installed to:

/home/infa/infaagent

To start the agent, go to directory "<agent_directory>/apps/agentcore" and 
then run "infaagent startup". Check the infaagent.log file
for errors, and then visit the Informatica Cloud site to verify that the
agent is active.

PRESS <ENTER> TO EXIT THE INSTALLER:
22〜27行目
インストール先の絶対パスを聞かれました。24行目に表示されているデフォルトで問題なかったのでそのままENTERしました。
43〜47行目
必要なディスク容量と、インストール先に選択したパーティションの空き容量が表示されます。問題なかったのでそのままENTERしました。中断する場合はCtrl-Cしてください。
74行目
インストール完了を通知されました。特にアクションは必要なく、そのままENTERしました。

シェルコマンドによるProxy設定

インストールが終わったら、先程指定したインストールディレクトリ配下のapps/agentcoreに移動します。

$ cd /home/infa/infaagent/apps/agentcore

Secure Agentを起動します。

$ ./infaagent startup

Proxyの設定をします。Secure AgentのProxy設定は専用のコマンドが用意されているので、それを実行します。
必ずひとつ前のコマンドでSecure Agentを起動しておく必要があります。起動しないで以下のコマンドを実行した場合、エラーも何もなくコマンド実行が完了するものの、実際はProxy設定が全く行われません。

$ ./consoleAgentManager.sh configureProxy <proxy host> <proxy port> <proxy user name> <proxy password>

コマンドの引数を設定するにあたっては、いくつか注意点があります。
<proxy host>はhttp://で始めてはいけません。ホスト名もしくはIPアドレスのみ指定してください。
<proxy user name>や<proxy password>はオプションです。Proxyが認証を必要とする場合に指定してください。指定する場合はURLエンコードをしてはいけません。ツールによっては認証Proxyのユーザ名やパスワードをURLエンコードして記述する必要があるものも存在しますが、このコマンドは違います。

例として、以下のProxyを設定する場合を考えます。

  • ホスト名:proxy.example.com
  • ポート番号:10080
  • ユーザ名:username@example
  • パスワード:password@example

この場合のコマンドは次のようになります。

$ ./consoleAgentManager.sh configureProxy proxy.example.com 10080 username@example password@example

Proxy設定を反映するために、Secure Agentを再起動します。shutdownには少し時間がかかることがあります。

$ ./infaagent shutdown
$ ./infaagent startup

Secure AgentをIICSに登録します。IICSにログインするときのユーザー名と、ダウンロード時にメモしておいたインストールトークンが必要になります。

$ ./consoleAgentManager.sh configureToken <iics user name> <install token>

もしここで次のようなエラーが出た場合は、インストールトークンの期限切れですので再取得してください。

Login fails: [{"error":{"code":"IDS_133","message":"Token is invalid or expired.","debugMessage":"Token is invalid or expired.","requestId":"XXXXXXXXXXXXXXXXXXXXXX","details":null}}]

このようなメッセージが出れば登録は完了です。

JAVA_HOME=/home/infa/infaagent/apps/agentcore/../../jdk/jre
Login with token
Login succeeds.

さらに以下のコマンドでtrueが返ってくれば登録に成功しています。

$ ./consoleAgentManager.sh isConfigured

IICSのランタイム環境画面を見てみると、登録したSecure Agentが表示されます。

しばらく待って画面をリロードすると、ステータスが『稼働中』に変わります。

JVMオプションによるProxy設定

ここまでの手順で、Proxy経由でIICSがSecure Agentを認識していること、つまりお互いに通信できていることが確認できました。
ただ、マニュアルによるともうひとつ以下の手順が必要なようです。

Configure proxy server settings through the JVM options in DTM

この中に以下のような記述があります。

You can configure the JVM options of the DTM or the Secure Agent to use the proxy server at run time.

『at run time』ということは、ジョブの実行時にはJVMオプションで設定した方のProxy設定を使用するということでしょうか。

ただ、実際にマッピングを作って実行してみたところ、『Amazon S3 v2』、『REST V2』、『Salesforce』の3つのコネクタで試したのですが、いずれも前述のシェルコマンドで行った方のProxy設定が使用されていました。
シェルコマンドとJVMオプションとでProxyの認証アカウントを変えて設定しておいたのですが、Proxyのログに残っていたのはシェルコマンドで設定したアカウントだけでした。

というわけで、実際にこの設定が必要かどうかは定かではないのですが、さらに他のコネクタを使用する場合など不要とも断定できないので、マニュアルどおり設定しておきます。

管理者のメニューから『ランタイム環境』を選択し、設定対象のSecure Agentをクリックします。

『編集』ボタンをクリックします。

『システム構成の詳細』の『サービス』からData Integration Server、『タイプ』からDTMを選択します。そしてJVMOption1~JVMOption5に以下の通り入力します。後半2つはオプションです。

名前
JVMOption1 -Dhttps.proxySet=True
JVMOption2 -Dhttps.proxyHost=<proxy host>
JVMOption3 -Dhttps.proxyPort=<proxy port>
JVMOption4 -Dhttps.proxyUser=<proxy user name>
JVMOption5 -Dhttps.proxyPassword=<proxy password>

JVMOptionの1~5が既に使われている場合は、使用済みの番号の次から入力し、足りない分は下の『カスタム構成の詳細』に、JVMOption6から欠番を生じないように1ずつ増やして設定してください。例えばJVMOption2まで使用されている場合は、以下のように『カスタム構成の詳細』にJVMOption6~JVMOption7を設定してください。

実際にこちらのJVMオプションによる設定が使われることを確認できなかったので、シェルコマンドによる設定時のような以下のルールが適用されるかどうかは不明ですが、実際にProxy経由の接続がうまくいかないことがあったら、このあたりの設定が関係しているかもしれないことを思い出してください。

  • <proxy host>はhttp://で始めず、ホスト名もしくはIPアドレスのみ記述する。
  • <proxy user name>や<proxy password>を設定する場合、URLエンコードをせずにそのまま記述する。

入力したら『保存』ボタンをクリックします。

保存すると、自動的にData Integration Serverが再起動します。Secure Agentの詳細画面をもう一度開くと、Data Integration Serverの新しいバージョンが『起動中』と表示されています。
各サービスのバージョン番号の末尾は、設定変更のたびにインクリメントされる仕様で、このときはサービスのコンポーネントが更新されているわけではありません。

『ステータスの更新』を何度かクリックしていると、そのうち新しいバージョンのData Integration Serverのステータスが『稼働中』に切り替わり、先ほどまで稼働中だった古いバージョンのものは表示されなくなります。これで設定変更内容が反映され、インターネット上のデータソースにProxy経由で接続できるようになりました。

コネクタの認証Proxyへの対応

前述の通り、『Amazon S3 v2』、『REST V2』、『Salesforce』の3つのコネクタでマッピングを作ってみたのですが、Proxyの認証をしてデータソースへアクセスできたのはSalesforceコネクタだけでした。残りの2つのコネクタは407 Proxy Authentication RequiredエラーでProxyを通過することができませんでした。

Proxyとの通信をキャプチャして調べてみたところ、Amazon S3 v2コネクタは認証時のアカウント名の前半に<proxy host>\を付加してしまっており、REST V2コネクタはBasic認証であるにもかかわらずパスワードを暗号化して送信してしまっているようでした。
このあたり、機会があれば解決策をもう少し調べてみたいと思います。

最後に

Secure AgentをProxy経由で使用する方法を説明しました。インターネット上のリソースへの接続についてはまだ認証周りで解明できていない課題が残っていますが、認証が不要なProxyを使う場合や、プライベートネットワーク内部のデータソースを取り扱うだけなら特に問題はないと思います。
オンプレミス環境でもガンガンIICSを活用していきましょう!