API BaaS の TLS の構成

Edge for Private Cloud v. 4.17.01

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

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

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

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

TLS 構成オプション

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

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

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

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

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

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

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

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

http://stack_IP:8080

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

https://stack_IP:8080

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

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


    警告: パスワードの値はクリアテキストで指定する必要があります。 したがって、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 を使用してスタックノードで次の cURL コマンドを実行して、TLS が機能していることを確認します。
    > curl -k https://localhost:8080/status -v

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

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

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

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

ブラウザで実行される BaaS ポータルは、BaaS スタックに対して 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 は必須ではありません。別のポートを使用するようにポータルを構成できます。

ポータルは 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. 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 またはポータルで TLS 用に API BaaS Stack ノードを構成する」の以下の手順に沿って、Stack ノードにポータルの正しい TLS URL があることを確認します。

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

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

  • 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 以外)を使用している場合にのみ、ポートを含める必要があります。

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

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

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

ポータル ノードの前にロードバランサを使用する場合、または 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