API BaaS の TLS の構成

Edge for Private Cloud v4.18.01

TLS(Transport Layer Security、前身は SSL)は、API 環境全体で安全で暗号化されたメッセージングを実現するための標準セキュリティ テクノロジーです。API BaaS ポータルノードと API BaaS スタック ノードで TLS を構成できます。

次の図は、単一の BaaS ポータルノードと 3 つの API BaaS Stack ノードがある API BaaS の一般的なデプロイ図を示しています。

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

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

TLS 構成オプション

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

  • スタックノードに対して、ポータルとロードバランサで TLS を構成します。

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

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

    小規模な環境(テスト環境や開発環境など)では、Stack ノードが 1 つしかないため、ロードバランサを含める必要はありません。この構成では、ポータルとスタックノードの両方で TLS を構成します。
  • ポータルのロードバランサで TLS を構成します。

    上記以外の方法では、ポータルノードの前のロードバランサを使用できます。この構成では、ロードバランサで 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 スタックでの TLS の構成

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

http://stack_IP:8080

別の方法として、BaaS API への TLS アクセスを構成して、次の形式からアクセスすることもできます。

https://stack_IP:8080

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

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

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

  1. TLS 証明書と秘密鍵を含むキーストア JKS ファイルを生成します。詳細については、オンプレミスの Edge での 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=jm.mcs/mcs






    # このプロパティを使用して別のポートを指定します。
    # tomcat-server_port=8080


    警告: password 値はクリアテキストで指定する必要があります。 そのため、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. TLS が機能していることを確認するには、HTTPS を使用してスタック ノードで次の cURL コマンドを実行します。

    > curl -k https://localhost:8080/status -v

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

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

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

TLS を介してスタックにアクセスするようにポータルを構成する

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

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

  • ポータルとスタック ノード間でロードバランサを使用する

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

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

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

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

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

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

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

API BaaS ポータルでの TLS の構成

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

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

http://portal_IP:9000

また、ポータルへの TLS アクセスを構成して、ポータルにアクセスできます。

https://portal_IP:9443

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

ポータルでは、単一のポートで 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.protocol12TLS
    # このプロパティを使用して別のポートを指定します。
    # 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. ポータルノードを構成します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  6. ポータルを再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  7. 「スタックまたはポータルで API BaaS Stack ノードを TLS 用に構成する」の手順に沿って、スタック ノードにポータルの TLS URL が正しく設定されていることを確認します。

スタックまたはポータルで TLS の API BaaS ノードを構成する

スタックノードまたはポータルノードの前にロードバランサを追加する場合、またはポータルまたはスタックノードで直接 TLS を有効にする場合は、スタックとポータルにアクセスできるように適切な URL をノードに構成する必要があります。たとえば、次のような場合に、スタック ノードでこの情報が必要になります。

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

スタック ノードの前でロードバランサを使用する場合や、スタック ノードで 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 以外)を使用する場合にのみ、ポートを含める必要があります。

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

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

http://localhost:8080 を、スタックのロードバランサの URL に置き換えます。

ロードバランサをポータル ノードの前で使用する場合、またはスタックノードで 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 を変更した場合は、ポータルノードを次のように構成します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. BaaS ポータルを再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart