API BaaS の TLS の構成

Edge for Private Cloud v. 4.16.09

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

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

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

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

TLS 構成オプション

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

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

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

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

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

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

http://stack_IP:8080

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

https://stack_IP:8080

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

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

次の手順で、Stack への 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=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


    警告: 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. 変更を Tomcat にデプロイします。
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid deploy
  7. BaaS スタックを再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  8. HTTPS を使用して Stack ノードで次の cURL コマンドを実行し、TLS が機能していることを確認します。
    > curl -k https://localhost:8080/status -v

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

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

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

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

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

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

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

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

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

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

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

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

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

http://portal_IP:9000

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

https://portal_IP:9443

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

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

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

  1. 鍵ファイルと証明書ファイルを PEM 形式で作成します。
    : 鍵または証明書にパスワードまたはパスフレーズがないことを確認してください。
  2. PEM ファイルを Portal ノードのディレクトリ(/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
    # デフォルトでは、TLS アクセスはポート 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. ポータルノードを構成します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  6. 構成をデプロイします。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy
  7. Portal を再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  8. 「Stack またはポータルで TLS 用に API BaaS Stack ノードを構成する」の以下の手順に沿って、Stack ノードにポータルの正しい TLS URL があることを確認します。

Stack またはポータルで 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_swagger.basepath=http://localhost:8080
usergrid-deployment_usergrid.organization.activation.url=http://localhost:8080/management/organizations/%s/activate
usergrid-deployment_usergrid.admin.activation.url=http://localhost:8080/management/users/%s/activate
usergrid-deployment_usergrid.admin.resetpw.url=http://localhost:8080/management/users/%s/resetpw
usergrid-deployment_usergrid.admin.confirmation.url=http://localhost:8080/management/users/%s/confirm
usergrid-deployment_usergrid.user.activation.url=http://localhost:8080/%s/%s/users/%s/activate
usergrid-deployment_usergrid.user.confirmation.url=http://localhost:8080/%s/%s/users/%s/confirm
usergrid-deployment_usergrid.user.resetpw.url=http://localhost:8080/%s/%s/users/%s/resetpw

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 は Stack のロードバランサの URL に置き換えます。

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

usergrid-deployment_usergrid.view.management.organizations.organization.activate=http://localhost:9000
usergrid-deployment_usergrid.view.management.organizations.organization.confirm=http://localhost:9000
usergrid-deployment_usergrid.view.management.users.user.activate=http://localhost:9000
usergrid-deployment_usergrid.view.management.users.user.confirm=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. 変更を Tomcat にデプロイします。
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid deploy
  3. BaaS スタックを再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  4. portal.properties を変更した場合は、Portal ノードを構成します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  5. 変更をデプロイします。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy
  6. BaaS Portal を再起動します。
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart