Flex Gateway新着情報
Governance新着情報
Monitoring API Managerローカルモードで Flex Gateway の背後で実行されている API をパブリッシュすることで、YAML 設定データを変更する方法について説明します。
Linux および Docker: .yaml
ファイル
下記の手順は、自動リソースレベル認証ポリシーによって保護されている複数のアップストリームサービスを使用した API のシンプルなリソースベースの YAML 設定を適用する方法を示しています。
詳細は、「自動ポリシー」と「リソースレベルのポリシー」を参照してください。
自動ポリシーは、リソースベースの設定でのみ定義できます。インライン設定モデルはサポートされません。リソースベースとインラインの設定モデルの違いについては、「宣言型設定リファレンスガイド」を参照してください。 |
始める前に、次の準備が整っていることを確認します。
Flex Gateway がインストールされていてローカルモードで実行されている。ゲートウェイのインストールと実行についての詳細は、「Flex Gateway のダウンロード」を参照してください。
アップストリームサービスの URL が用意されている。次の例では架空の products-api
と users-api
というサービスを使用していますが、metadata.name
には実際の API 名、spec.services
にはサービスの詳細を指定することができます。
.yaml
ファイル拡張子で設定ファイルを作成します。
ファイルにカスタム名を付けます。
ファイルを Flex Gateway の設定ディレクトリ /etc/mulesoft/flex-gateway/conf.d/custom
に保存します。このディレクトリには複数の設定ファイルを保存できます。
次の 2 つの ApiInstance
リソースをコピーしてファイルに貼り付け、必要な箇所を適切な値に変更します。
--- apiVersion: gateway.mulesoft.com/v1alpha1 kind: ApiInstance metadata: name: products-api labels: secured-by-automated-policy: yes spec: address: http://0.0.0.0:8080 services: products: address: https://<your products URL>:<your port>/ routes: - rules: - path: /products(/.*) - path: /products-featured(/.*) config: destinationPath: /api --- apiVersion: gateway.mulesoft.com/v1alpha1 kind: ApiInstance metadata: name: users-api labels: secured-by-automated-policy: yes spec: address: http://0.0.0.0:8081 services: users: address: https://<your users URL>:<your port>/ routes: - rules: - path: /api/users(/.*)
次の PolicyBinding
リソースを ApiInstance
リソースの後に追加して、自動基本認証ポリシーを定義します。
--- apiVersion: gateway.mulesoft.com/v1alpha1 kind: PolicyBinding metadata: name: security-protection spec: targetRef: kind: Selector selector: kind: ApiInstance labels: secured-by-automated-policy: yes policyRef: name: http-basic-authentication-flex config: username: chris password: admin
自動ポリシーを複数の API インスタンスに適用するには、ポリシーバインドで Selector
kind
を指定する必要があります。サンプル PolicyBinding
リソースでは、spec.targetRef.kind
の値が Selector
、spec.targetRef.selector.kind
の値が ApiInstance
に設定されています。
また、サンプルリソースでは基本認証ポリシーを 2 つの API インスタンスに適用しています。また、secured-by-automated-policy
ラベルを spec.targetRef.selector.labels
で定義しています (ラベル名はカスタマイズ可能です)。このラベルは、自動ポリシーをラベルのリソースに関連付ける ApiInstance
metadata.labels
プロパティで定義されているラベルと一致します。
ラベルを省略することで、自動ポリシーをすべての API インスタンスに適用することができます。
ファイルを保存します。ゲートウェイによって設定が自動的に更新されます。
次のコマンドを実行してログを表示します。
journalctl -u flex-gateway-*
応答は次のようになります。
[agent][info] Generating config [agent][info] Gateway default/21cf4286e38f: Adding ApiInstance default/products-api http://0.0.0.0:8080 [agent][info] Gateway default/21cf4286e38f: Adding Policy default/security-protection [agent][info] Gateway default/21cf4286e38f: Adding Route: &{host: path:/api/products(/.*) methods: headerConditions:[] profile:0xc00004f750} => {Kind:Service Name:products-api-products Namespace:default} [agent][info] Gateway default/21cf4286e38f: Adding Policy default/envoy.filters.http.router [agent][info] Gateway default/21cf4286e38f: Adding ApiInstance default/users-api http://0.0.0.0:8081 [agent][info] Gateway default/21cf4286e38f: Adding Policy default/security-protection [agent][info] Gateway default/21cf4286e38f: Adding Route: &{host: path:/api/users(/.*) methods: headerConditions:[] profile:0xc0061823f0} => {Kind:Service Name:users-api-users Namespace:default} [agent][info] Gateway default/21cf4286e38f: Adding Policy default/envoy.filters.http.router [agent][info] Gateway default/21cf4286e38f: Adding Service default/products-api-products https://<your products URL>:<your port>/ [agent][debug] generating service products-api-products.default.svc hostname: https://<your products URL> port: <your port> [agent][info] Gateway default/21cf4286e38f: Adding Service default/users-api-users https://<your users URL>:<your port>/ [agent][debug] generating service users-api-users.default.svc hostname: https://<your users URL> port: <your port> [agent][info] Writing envoy bootstrap configuration to /tmp/envoy.json [envoy][info] cds: add 2 cluster(s), remove 3 cluster(s) [envoy][info] cds: added/updated 0 cluster(s), skipped 2 unmodified cluster(s)
curl
などのツールで認証ログイン情報を指定して API をテストします。自動認証ポリシーは、両方の API を保護します。
PolicyBinding
リソースを以下に置き換えることで、リソースレベルの粒度を自動認証ポリシーに適用します。
--- apiVersion: gateway.mulesoft.com/v1alpha1 kind: PolicyBinding metadata: name: security-protection spec: targetRef: kind: Selector selector: kind: ApiInstance labels: secured-by-automated-policy: yes policyRef: name: http-basic-authentication-flex config: username: chris password: admin rules: - methods: GET
この例では、spec.rules
で指定されているように、自動認証ポリシーは GET
メソッドリソースにのみ適用されます。
ファイルを保存します。ゲートウェイによって設定が自動的に更新されます。
自動リソースレベル認証ポリシーで保護された 2 つの API が Flex Gateway の背後で実行されています。
始める前に、次の準備が整っていることを確認します。
Flex Gateway がインストールされている。詳細は、「Flex Gateway のダウンロード」を参照してください。
Flex Gateway がローカルモードで登録されて実行されている。詳細は「ローカルモードでの登録と実行」を参照してください。
アップストリームサービスの URL が用意されている。次の例では架空の products-api
と users-api
というサービスを使用していますが、metadata.name
には実際の API 名、spec.services
にはサービスの詳細を指定することができます。
ターミナルを開いて、Flex Gateway 設定ファイルが保存されているディレクトリに移動します。このディレクトリは、Flex Gateway を起動したときに指定されています。
.yaml
ファイル拡張子で設定ファイルを作成します。
ファイルにカスタム名を付けます。
ファイルを保存します。
次の 2 つの ApiInstance
リソースをコピーしてファイルに貼り付け、必要な箇所を適切な値に変更します。
--- apiVersion: gateway.mulesoft.com/v1alpha1 kind: ApiInstance metadata: name: products-api labels: secured-by-automated-policy: yes spec: address: http://0.0.0.0:8080 services: products: address: https://<your products URL>:<your port>/ routes: - rules: - path: /products(/.*) - path: /products-featured(/.*) config: destinationPath: /api --- apiVersion: gateway.mulesoft.com/v1alpha1 kind: ApiInstance metadata: name: users-api labels: secured-by-automated-policy: yes spec: address: http://0.0.0.0:8081 services: users: address: https://<your users URL>:<your port>/ routes: - rules: - path: /api/users(/.*)
次の PolicyBinding
リソースを ApiInstance
リソースの後に追加して、自動基本認証ポリシーを定義します。
--- apiVersion: gateway.mulesoft.com/v1alpha1 kind: PolicyBinding metadata: name: security-protection spec: targetRef: kind: Selector selector: kind: ApiInstance labels: secured-by-automated-policy: yes policyRef: name: http-basic-authentication-flex config: username: chris password: admin
自動ポリシーを複数の API インスタンスに適用するには、ポリシーバインドで Selector
kind
を指定する必要があります。サンプル PolicyBinding
リソースでは、spec.targetRef.kind
の値が Selector
、spec.targetRef.selector.kind
の値が ApiInstance
に設定されています。
また、サンプルリソースでは基本認証ポリシーを 2 つの API インスタンスに適用しています。また、secured-by-automated-policy
ラベルを spec.targetRef.selector.labels
で定義しています (ラベル名はカスタマイズ可能です)。このラベルは、自動ポリシーをラベルのリソースに関連付ける ApiInstance
metadata.labels
プロパティで定義されているラベルと一致します。
ラベルを省略することで、自動ポリシーをすべての API インスタンスに適用することができます。
ファイルを保存します。ゲートウェイによって設定が自動的に更新されます。
Docker コンテナログを表示します。内容は次のようになっています。
[agent][info] Generating config [agent][info] Gateway default/21cf4286e38f: Adding ApiInstance default/products-api http://0.0.0.0:8080 [agent][info] Gateway default/21cf4286e38f: Adding Policy default/security-protection [agent][info] Gateway default/21cf4286e38f: Adding Route: &{host: path:/api/products(/.*) methods: headerConditions:[] profile:0xc00004f750} => {Kind:Service Name:products-api-products Namespace:default} [agent][info] Gateway default/21cf4286e38f: Adding Policy default/envoy.filters.http.router [agent][info] Gateway default/21cf4286e38f: Adding ApiInstance default/users-api http://0.0.0.0:8081 [agent][info] Gateway default/21cf4286e38f: Adding Policy default/security-protection [agent][info] Gateway default/21cf4286e38f: Adding Route: &{host: path:/api/users(/.*) methods: headerConditions:[] profile:0xc0061823f0} => {Kind:Service Name:users-api-users Namespace:default} [agent][info] Gateway default/21cf4286e38f: Adding Policy default/envoy.filters.http.router [agent][info] Gateway default/21cf4286e38f: Adding Service default/products-api-products https://<your products URL>:<your port>/ [agent][debug] generating service products-api-products.default.svc hostname: https://<your products URL> port: <your port> [agent][info] Gateway default/21cf4286e38f: Adding Service default/users-api-users https://<your users URL>:<your port>/ [agent][debug] generating service users-api-users.default.svc hostname: https://<your users URL> port: <your port> [agent][info] Writing envoy bootstrap configuration to /tmp/envoy.json [envoy][info] cds: add 2 cluster(s), remove 3 cluster(s) [envoy][info] cds: added/updated 0 cluster(s), skipped 2 unmodified cluster(s)
curl
などのツールで認証ログイン情報を指定して API をテストします。自動認証ポリシーは、両方の API を保護します。
PolicyBinding
リソースを以下に置き換えることで、リソースレベルの粒度を自動認証ポリシーに適用します。
--- apiVersion: gateway.mulesoft.com/v1alpha1 kind: PolicyBinding metadata: name: security-protection spec: targetRef: kind: Selector selector: kind: ApiInstance labels: secured-by-automated-policy: yes policyRef: name: http-basic-authentication-flex config: username: chris password: admin rules: - methods: GET
この例では、spec.rules
で指定されているように、自動認証ポリシーは GET
メソッドリソースにのみ適用されます。
ファイルを保存します。ゲートウェイによって設定が自動的に更新されます。
自動リソースレベル認証ポリシーで保護された 2 つの API が Flex Gateway の背後で実行されています。