API BaaS の TLS の構成

Edge for Private Cloud v4.18.01

TLS(Transport Layer Security、前身は SSL)は、API 環境全体で安全な暗号化メッセージングを保証するための標準的なセキュリティ技術です。API BaaS Portal ノードと API BaaS Stack ノードで TLS を構成できます。

次の図は、1 つの BaaS Portal ノードと 3 つの API BaaS Stack ノードを使用した API BaaS の一般的なデプロイ図を示しています。

デベロッパーはブラウザを使用してポータルにリクエストを送信します。デフォルトでは、リクエストは Portal ノードのポート 9000 で HTTP プロトコルを使用します。

このデプロイには、Portal ノードと Stack ノードの間にロードバランサが含まれています。この構成では、ポータルがロードバランサに HTTP リクエストを送信し、ロードバランサがリクエストを Stack ノードの 1 つに転送します。これは、本番環境システムに推奨されるデプロイ環境です。

TLS 構成オプション

API BaaS の TLS を構成する場合、いくつかのオプションがあります。

  • ポータルと Stack ノードのロードバランサで TLS を構成する

    この構成では、デベロッパーは HTTPS プロトコルを使用してポータルにアクセスし、ブラウザで実行されているポータルは HTTPS を使用してロードバランサ経由で Stack ノードにリクエストを送信します。ロードバランサは HTTP を使用して Stack ノードにアクセスします。
  • ポータル、ロードバランサ、Stack ノードで TLS を構成する

    セキュリティを強化するには、TLS を使用して Stack ノードにアクセスするようにロードバランサを構成します。
  • ポータルと単一の Stack ノードで TLS を構成する

    テスト環境や開発環境などの小規模な環境では、Stack ノードが 1 つしかない場合があります。つまり、ロードバランサを組み込む必要はありません。この構成では、Portal ノードと Stack ノードの両方で TLS を構成します。
  • ポータルのロードバランサで TLS を構成する

    上記に示されていないオプションの 1 つは、ポータルノードの前にロードバランサを使用することです。この構成では、ロードバランサで TLS を構成できます。また、必要に応じて、ロードバランサとポータル間の接続で TLS を構成することもできます。

TLS ポートが開いていることを確認する

以下の手順では、デフォルトのポータルポート 9000 とスタックノード 8080 で TLS を構成します。ただし、必要に応じてこのポートを変更できます。

使用するポートに関係なく、ポートがノードで開いていることを確認する必要があります。たとえば、次のコマンドを使用してポート 8443 を開くことができます。

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8443 -j ACCEPT --verbose

API BaaS Stack での TLS の構成

デフォルトでは、API BaaS Stack で TLS は無効になっています。次に、Stack ノードの IP アドレスまたは DNS 名とポート 8080 を使用して、HTTP 経由で BaaS API にアクセスします。次に例を示します。

http://stack_IP:8080

または、次の形式でアクセスできるように、BaaS API への TLS アクセスを構成することもできます。

https://stack_IP:8080

この例では、ポート 8080 を使用するように TLS アクセスを構成します。ただし、ポート 8080 は必須ではありません。別のポートを使用するように Stack を構成できます。唯一の要件は、指定されたポートを介したトラフィックをファイアウォールが許可することです。

Stack は、1 つのポートで 1 種類のリクエスト(HTTP または HTTPS)のみをサポートできます。したがって、ポート 8080 で HTTPS アクセスを構成すると、HTTP を使用してポート 8080 にアクセスすることはできません。HTTPS でポート 8443 を使用するように Stack を構成すると、Stack はポート 8080 でリッスンしなくなります。

Stack への TLS アクセスを構成する手順は次のとおりです。

  1. TLS 証明書と秘密鍵を含むキーストア JKS ファイルを生成します。詳細については、Edge On Premises の TLS/SSL の構成をご覧ください。
    注: キーストアのパスワードと鍵のパスワードが同じであることを確認してください。
  2. キーストア JKS ファイルを Stack ノードのディレクトリ(/opt/apigee/customer/application など)にコピーします。このディレクトリは、「apigee」ユーザーがアクセスできる必要があります。
  3. JKS ファイルの所有権を「apigee」ユーザーに変更します。
    > chown apigee:apigee /opt/apigee/customer/application/keystore.jks

    ここで、keystore.jks はキーストア ファイルの名前です。
  4. /opt/apigee/customer/application/usergrid.properties ファイルを編集して、JKS ファイルのパス、キーストアと鍵のパスワードなどのプロパティを設定します。このファイルが存在しない場合は、作成します。
    tomcat-server_scheme=https
    tomcat-server_secure=true
    tomcat-server_ssl.enabled=true
    tomcat-server_keystore.type=JKS
    tomcat-server_keystore.file=/opt/apigee/customer/application/keystore.jks
    tomcat-server_keystore.password=password
    tomcat-server_keyalias=keystore_alias
    tomcat-server_clientauth.enabled=false
    tomcat-server_ssl.protocols=TLSv1,TLSv1.1,TLSv1.2
    # デフォルトでは、TLS アクセスはポート 8080 を使用します。
    # このプロパティを使用して別のポートを指定します。
    # tomcat-server_port=8080


    警告: パスワードの値はクリアテキストにする必要があります。 したがって、usergrid.properties を不正アクセスから保護する必要があります。

    tomcat-server_keyalias プロパティを使用して、キーストアのエイリアスを指定します。鍵エイリアスは、鍵の作成時に設定します。 たとえば、keytool コマンドの -alias オプションを使用して設定できます。

    tomcat-server_ssl.protocols を使用して、Stack でサポートされる TLS プロトコルを設定します。Java 8 でサポートされているプロトコルの一覧については、http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssename をご覧ください。
  5. Stack ノードを構成します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure
  6. BaaS スタックを再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  7. HTTPS を使用して Stack ノードで次の cURL コマンドを実行し、TLS が機能していることを確認します。
    > curl -k https://localhost:8080/status -v

    TLS が正しく構成されている場合は、ステータス情報を含むレスポンスが表示されます。

    8080 以外のポートを介した TLS アクセスを構成した場合は、上記のコマンドを変更して正しいポートを使用します。
  8. すべての Stack ノードで繰り返します。
  9. Stack ノードの前にロードバランサがある場合は、HTTPS 経由で Stack ノードにリクエストを送信するようにロードバランサを構成します。詳細については、ロードバランサのドキュメントをご覧ください。

    ポータルが Stack に直接リクエストを送信する場合は、次のセクションで説明するように、HTTPS 経由で Stack にアクセスするようにポータルを構成します。
  10. 以下の「Stack または Portal で TLS 用に API BaaS Stack ノードを構成する」の手順に沿って、ユーザー レスポンスの生成時に Stack ノードに正しい TLS URL が設定されていることを確認します。

TLS 経由で Stack にアクセスするようにポータルを構成する

ブラウザで実行される BaaS ポータルは、BaaS スタックに API 呼び出しを行うことで機能します。TLS を使用するように BaaS スタックを構成する場合は、HTTPS 経由でこれらの呼び出しを行うようにポータルも構成する必要があります。

API BaaS のインストールは、通常、次のいずれかに構成されます。

  • Portal ノードと Stack ノードの間でロードバランサを使用する

    HTTPS 経由で Stack ノードにリクエストを送信するようにロードバランサを構成します。詳細については、ロードバランサのドキュメントをご覧ください。

    この構成では、ロードバランサの構成方法に応じて、ポータルは HTTP または HTTPS 経由でロードバランサにアクセスできます。ロードバランサが TLS を使用している場合は、次の手順で、HTTPS のロードバランサにリクエストを送信するようにポータルを構成します。
  • ポータルから Stack に直接リクエストを送信する

    以下で説明するように、HTTPS 経由で Stack にアクセスするようにポータルを構成します。

API BaaS Portal で HTTPS 経由の API 呼び出しを行うように構成するには、次の手順を行います。

  1. 上記のように BaaS スタックで TLS アクセスを構成するか、ロードバランサのドキュメントの説明に従ってスタックノードのロードバランサで TLS アクセスを構成します。
  2. /opt/apigee/customer/application/portal.properties を編集して、次のプロパティを設定します。このファイルが存在しない場合は、作成します。
    baas.portal.config.overrideUrl=https://stackIP:port

    このプロパティの値として、単一ノード インストールの場合は API Stack ノードの IP アドレスまたは DNS 名とポートを指定します。API BaaS Stack ノードの前にロードバランサがある場合は、ロードバランサの IP アドレスまたは DNS 名とポートを指定します。
  3. Portal ノードを構成します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. 次のコマンドを使用して Portal を再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  5. 上記の Stack への TLS アクセスを構成するときに自己署名証明書を使用した場合、ブラウザでポータルから Stack へのリクエストが許可されないことがあります。Stack への HTTPS アクセスが許可されていないというエラーがブラウザに表示された場合は、ブラウザで次の URL をリクエストし、セキュリティ例外を追加してアクセスを許可します。
    https://stackIP:port/status

    API Stack ノードまたはロードバランサの IP アドレスまたは DNS 名とポートを指定します。

API BaaS Portal での TLS の構成

デフォルトでは、ユーザーはポータル サーバーのポート 9000 で暗号化されていない HTTP リクエストを送信してポータルにアクセスします。ポータルとの間で送受信されるデータを暗号化するために HTTPS を使用するようにポータルを構成できます。

デフォルトでは、Portal ノードの IP アドレスまたは DNS 名とポート 9000 を使用して、HTTP 経由で Portal にアクセスします。次に例を示します。

http://portal_IP:9000

または、次の形式でアクセスできるように、ポータルへの TLS アクセスを構成することもできます。

https://portal_IP:9443

この例では、ポート 9443 を使用するように TLS アクセスを構成します。ただし、ポート 9443 は必須ではありません。別のポートを使用するようにポータルを構成できます。

ポータルは、1 つのポートで 1 種類のリクエスト(HTTP または HTTPS)のみをサポートできます。したがって、ポート 9000 で HTTPS アクセスを構成すると、HTTP を使用してポート 9000 にアクセスすることはできません。HTTPS でポート 9443 を使用するようにポータルを構成すると、ポータルはポート 9000 でリッスンしなくなります。

ポータル用に TLS を構成するには:

  1. PEM 形式の鍵ファイルと証明書ファイルを作成します。
    注: 鍵または証明書にパスワード/パスフレーズが設定されていないことを確認します。
  2. PEM ファイルをポータルノードのディレクトリ(/opt/apigee/customer/application など)にコピーします。このディレクトリは、「apigee」ユーザーがアクセスできる必要があります。
  3. PEM ファイルの所有権を「apigee」ユーザーに変更します。
    > chown apigee:apigee /opt/apigee/customer/application/*.PEM
  4. /opt/apigee/customer/application/portal.properties ファイルを編集して、次のプロパティを設定します。このファイルが存在しない場合は、作成します。
    baas.portal.ssl=on
    baas.portal.ssl.certificate=/opt/apigee/customer/application/defaultcert.pem
    baas.portal.ssl.key=/opt/apigee/customer/application/defaultkey.pem
    baas.portal.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
    # By default, TLS access uses port 9000.
    # このプロパティを使用して別のポートを指定します。
    # baas.portal.listen=9000


    baas.portal.ssl.protocols を使用して、ポータルでサポートされる TLS プロトコルを設定します。サポートされているプロトコルの一覧については、Nginx で定義されている SSL プロトコル名の一覧(http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols)をご覧ください。
  5. Portal ノードを構成します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  6. Portal を再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  7. 「Stack または Portal で TLS 用に API BaaS Stack ノードを構成する」の手順に沿って、Stack ノードに Portal の正しい TLS URL が設定されていることを確認します。

Stack または Portal で TLS 用に API BaaS ノードを構成する

Stack ノードまたは Portal ノードの前にロードバランサを配置する場合、または Portal ノードまたは Stack ノードで TLS を直接有効にする場合は、Stack と Portal にアクセスするための正しい URL をノードに構成する必要があります。たとえば、Stack ノードでは、次の場合にこの情報が必要になります。

  • BaaS API リクエストのレスポンスに URL を含める。
  • パスワードを再設定するとき、または他の通知を送信するときに、メール テンプレートにリンクを追加する。
  • ユーザーを特定のポータルページにリダイレクトする。

Stack ノードの前にロードバランサを使用する場合、または Stack ノードで TLS を構成する場合は、/opt/apigee/customer/application/usergrid.properties で次のプロパティを設定します。

usergrid-deployment_usergrid.api.url.base=http://localhost:8080

http://localhost:8080 は、ロードバランサの URL に置き換えます。ロードバランサが TLS を使用するように構成されている場合は、HTTPS プロトコルを使用します。ポートを含める必要があるのは、標準以外のポート(HTTP のポート 80 と HTTPS のポート 443 以外)を使用している場合のみです。

Stack ノードの前にロードバランサを使用する場合は、/opt/apigee/customer/application/portal.properties で次のプロパティも設定する必要があります。

baas.portal.config.overrideUrl=http://localhost:8080

http://localhost:8080 は、Stack のロードバランサの URL に置き換えます。

Portal ノードの前にロードバランサを使用する場合、または Stack ノードで TLS を構成する場合は、usergrid.properties で次のプロパティを設定します。

usergrid-deployment_portal.url=http://localhost:9000

http://localhost:9000 をロードバランサの URL に置き換えます。ロードバランサが TLS を使用するように構成されている場合は、HTTPS プロトコルを使用します。ポートを含める必要があるのは、標準以外のポート(HTTP のポート 80 と HTTPS のポート 443 以外)を使用している場合のみです。

usergrid.properties の編集後:

  1. Stack ノードを構成します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure
  2. BaaS スタックを再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  3. portal.properties を変更した場合は、Portal ノードを構成します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. BaaS Portal を再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart