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 アクセスを構成します。
- 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
警告: パスワードの値はクリアテキストで指定する必要があります。 したがって、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 - BaaS スタックを再起動します。
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart - HTTPS を使用してスタックノードで次の cURL コマンドを実行して、TLS が機能していることを確認します。
> curl -k https://localhost:8080/status -v
TLS が正しく構成されている場合は、ステータス情報を含むレスポンスが表示されます。
8080 以外のポートで TLS アクセスを構成した場合は、正しいポートを使用するように上記のコマンドを変更します。 - すべての Stack ノードで繰り返します。
- Stack ノードの前にロードバランサがある場合は、HTTPS 経由で Stack ノードにリクエストを送信するようにロードバランサを構成します。詳細については、ロードバランサのドキュメントをご覧ください。
ポータルがスタックに直接リクエストする場合は、次のセクションで説明するように、HTTPS 経由でスタックにアクセスするようにポータルを構成します。 - 「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 ポータルを構成します。
- 上記のように 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 は必須ではありません。別のポートを使用するようにポータルを構成できます。
ポータルは 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)をご覧ください。 - Portal ノードを構成します。
> /opt/apigee/apigee-service/bin/apigee-service baas-portal configure - 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 を使用してノードを構成する必要があります。たとえば、スタックノードは、次の場合にこの情報を必要とします。
- 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 を編集した後:
- Stack ノードを構成します。
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure - BaaS スタックを再起動します。
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart - portal.properties を変更した場合は、Portal ノードを構成します。
> /opt/apigee/apigee-service/bin/apigee-service baas-portal configure - BaaS Portal を再起動します。
> /opt/apigee/apigee-service/bin/apigee-service baas-portal restart