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 アクセスを構成します。
- TLS 証明書と秘密鍵を含むキーストア JKS ファイルを生成します。詳細については、オンプレミスの Edge での TLS/SSL の構成をご覧ください。
注: キーストアのパスワードと鍵のパスワードが同じであることを確認してください。 - キーストア JKS ファイルを Stack ノードのディレクトリ(/opt/apigee/customer/application など)にコピーします。このディレクトリには「apigee」ユーザーがアクセスできる必要があります。
- JKS ファイルの所有権を「apigee」ユーザーに変更します。
> chown apigee:apigee /opt/apigee/customer/application/keystore.jks
ここで、keystore.jks はキーストア ファイルの名前です。 - /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 をご覧ください。 - Stack ノードを構成します。
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure - 変更を Tomcat にデプロイします。
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid deploy - BaaS スタックを再起動します。
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart - HTTPS を使用して Stack ノードで次の cURL コマンドを実行し、TLS が機能していることを確認します。
> curl -k https://localhost:8080/status -v
TLS が正しく構成されている場合は、ステータス情報を含むレスポンスが表示されます。
8080 以外のポート経由で TLS アクセスを構成した場合は、正しいポートを使用するように上記のコマンドを変更します。 - すべての Stack ノードでこの手順を繰り返します。
- スタックノードの前にロードバランサがある場合は、HTTPS 経由でスタックノードにリクエストを行うようにロードバランサを構成します。詳細については、ロードバランサのドキュメントをご覧ください。
ポータルがスタックに直接リクエストを行う場合は、次のセクションで説明するように、HTTPS 経由でスタックにアクセスするようにポータルを構成します。 - 以下の「スタックまたはポータルで 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 ポータルを構成します。
- 上記のように BaaS Stack で TLS アクセスを構成するか、ロードバランサのドキュメントに記載されているように、Stack ノードのロードバランサで TLS アクセスを構成します。
- /opt/apigee/customer/application/portal.properties を編集して、次のプロパティを設定します。このファイルが存在しない場合は、作成します。
baas.portal.config.overrideUrl=https://stackIP:port
このプロパティの値として、単一ノード インストールの場合は API Stack ノードの IP アドレスまたは DNS 名とポートを指定します。API BaaS Stack ノードの前にロードバランサがある場合は、ロードバランサの IP アドレスまたは DNS 名とポートを指定します。 - Portal ノードを構成します。
> /opt/apigee/apigee-service/bin/apigee-service baas-portal configure - 次のコマンドを使用してポータルを再起動します。
> /opt/apigee/apigee-service/bin/apigee-service baas-portal restart - 上記の 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 を構成するには:
- 鍵ファイルと証明書ファイルを PEM 形式で作成します。
注: 鍵または証明書にパスワードまたはパスフレーズがないことを確認してください。 - PEM ファイルを Portal ノードのディレクトリ(/opt/apigee/customer/application など)にコピーします。このディレクトリには、apigee ユーザーがアクセスできる必要があります。
- PEM ファイルの所有権を「apigee」ユーザーに変更します。
> chown apigee:apigee /opt/apigee/customer/application/*.PEM - /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)をご覧ください。 - ポータルノードを構成します。
> /opt/apigee/apigee-service/bin/apigee-service baas-portal configure - 構成をデプロイします。
> /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy - Portal を再起動します。
> /opt/apigee/apigee-service/bin/apigee-service baas-portal restart - 「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 を編集した後:
- Stack ノードを構成します。
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure - 変更を Tomcat にデプロイします。
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid deploy - BaaS スタックを再起動します。
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart - portal.properties を変更した場合は、Portal ノードを構成します。
> /opt/apigee/apigee-service/bin/apigee-service baas-portal configure - 変更をデプロイします。
> /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy - BaaS Portal を再起動します。
> /opt/apigee/apigee-service/bin/apigee-service baas-portal restart