API BaaS の TLS の構成

Edge for Private Cloud v4.18.01

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

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

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

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

TLS 構成のオプション

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

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

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

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

    テスト環境や開発環境などの小規模な環境では、スタックノードが 1 つだけ存在することがあります。この場合、ロードバランサを含める必要はありません。この構成では、ポータルノードとスタックノードの両方で 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 は無効になっています。次に、スタックノードの IP アドレスまたは DNS 名とポート 8080 を使用して、HTTP 経由で BaaS API にアクセスします。例:

http://stack_IP:8080

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

https://stack_IP:8080

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

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

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

  1. TLS 証明書と秘密鍵を含むキーストア JKS ファイルを生成します。詳細については、オンプレミスの Edge での TLS/SSL の構成をご覧ください。
    : キーストアのパスワードと鍵のパスワードが同じであることを確認してください。
  2. キーストア JKS ファイルをスタックノードのディレクトリ(/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




    /opt/apigee/customer/application/keystore.jks
    # このプロパティを使用して別のポートを指定します。
    # 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. スタックノードを構成します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid Configure
  6. BaaS スタックを再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  7. HTTPS を使用して、スタックノードで次の cURL コマンドを実行し、TLS が機能していることを確認します。
    > curl -k https://localhost:8080/status -v

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

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

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

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

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

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

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

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

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

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

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

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

    単一ノード インストールの場合は API スタックノードの IP アドレスまたは DNS 名とポートを、API BaaS スタックノードの前にロードバランサがある場合はロードバランサの IP アドレスまたは DNS 名とポートを指定します。
  3. ポータルノードを構成します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portalconfigure
  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 つのポートで 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.1.protocols=

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