XC API Security
※本資料の画面表示や名称は資料作成時点の画面表示を利用しております。アップデート等より表示が若干異なる場合がございます。
XC で API Security を利用する方法や、各種設定について紹介します
マニュアルは以下のページを参照してください
1. XC API Security について
XC API Securityは、以下の特徴を備えております
APIスキーマとSwaggerファイルを生成し、APIエンドポイントの手動トラッキングを最小限に抑える
不審なリクエストをブロックし、データ漏洩を防止
APIセキュリティポリシーの設定・導入にかかる時間を短縮
XC WAAPはこれらの高度なセキュリティをアプリケーションの迅速な展開に合わせて自由にご利用いただける環境を実現します
2. API Discovery の設定
XC WAAPではバックエンドアプリケーションで利用されているAPIの情報を学習し、その結果をダッシュボードで確認いただくことが可能です。 この機能により、バックエンドアプリケーションの提供するAPIのEndopint、Method、通信状況を効率的に把握できます
注釈
APIのDiscovery機能の結果が画面に表示されるまで、数時間以上のかなりの時間を要する場合があります。 継続的に発生するトラフィックを対象としており、APIへの通信頻度が少ない場合、正しく結果が表示されない場合があります。 本設定の後定常的にトラフィックが発生する状態を長時間維持し、その後、結果の確認ができるような環境での動作確認をおすすめします。
API Discoveryでは以下用語を用いる場合があります
EP (End Point) |
API Gateway の End Point。対象とするURL PathとMethodを示します |
PDF (Probability Distribution Function) |
API EPの通信に関するメトリック情報。以下の内容を取得する
・ Request / Response size
・ データあり / なし 時の遅延時間
・ Request rate
・ Error rate
・ Response スループット
|
1. API Discovery の設定
作成済みのHTTP Load Balancerに Malicious User Detaction & Mitigation に関連するパラメータを設定します。 HTTP Load Balancer の設定手順は こちら を参照ください
画面左側 Manage欄の Load Balancers 、 HTTP Load Balancers を開き、対象のLoad Balancerを表示し画面右側に遷移します。
すでに作成済みのオブジェクトを変更する場合、対象のオブジェクト一番右側 ‥ から、 Manage Configuration をクリックします
設定の結果が一覧で表示されます。画面右上 Edit Configuration から設定の変更します。
Security Configuration 欄 右上の Show Advanced Fields をクリックします。
API Discovery を設定します。
今回は、単一のLoad Balancerを対象とした設定となりますので、 ML Config で Single Load Balancer Application を選択します。
その配下に表示される API Discovery で Enable API Discovery を選択してください。
その他機能は利用しませんので、 無効 (Disable) を選択してください
2. サンプルリクエストの送付
Curlコマンドによりサンプルリクエストを送付します。 この例ではいずれのリクエストについても同等のJSONを応答するサーバに対してリクエストを送ります。サンプルリクエストは以下の内容です。
1$ curl -X GET -vks https://echoapp.f5demo.net/ ;
2
3** 省略 **
4
5> GET / HTTP/2
6> Host: echoapp.f5demo.net
7> User-Agent: curl/7.58.0
8
9** 省略 **
10
11< HTTP/2 200
12< content-type: application/json
13< content-length: 670
14
15** 省略 **
16
17{"request":{"headers":[["host","app2.test10demo.xyz"],["user-agent","curl/7.58.0"],["accept","*/*"],["x-forwarded-for","18.178.83.1"],["x-forwarded-proto","https"],["x-envoy-external-address","18.178.83.1"],["x-request-id","46aca87d-6141-4656-992f-4bde488f4c3d"],["content-length","0"]],"status":0,"httpversion":"1.1","method":"GET","scheme":"http","uri":"/","requestText":"","fullPath":"/"},"network":{"clientPort":"57613","clientAddress":"103.135.56.106","serverAddress":"192.168.16.2","serverPort":"80"},"ssl":{"isHttps":false},"session":{"requestId":"35f075bad07a58663f843875701a092e","connection":"2695","connectionNumber":"5"},"environment":{"hostname":"echoapp"}}
注釈
API DiscoveryはOrigin ServerのAPIの仕様を担保するものではなく、あくまで通信の統計から判断出来るAPIの情報を表示する機能です。
1$ cat << EOF > api-access.sh
2
3# GET
4curl -X GET -ks https://echoapp.f5demo.net/ ;
5curl -X GET -ks https://echoapp.f5demo.net/product ;
6curl -X GET -ks https://echoapp.f5demo.net/product/book ;
7curl -X GET -ks https://echoapp.f5demo.net/product/dvd ;
8curl -X GET -ks https://echoapp.f5demo.net/product/cd ;
9curl -X GET -ks https://echoapp.f5demo.net/product/game ;
10curl -X GET -ks https://echoapp.f5demo.net/product/stationery ;
11curl -X GET -ks https://echoapp.f5demo.net/rental ;
12curl -X GET -ks https://echoapp.f5demo.net/rental/book ;
13curl -X GET -ks https://echoapp.f5demo.net/rental/dvd ;
14curl -X GET -ks https://echoapp.f5demo.net/rental/cd ;
15curl -X GET -ks https://echoapp.f5demo.net/rental/game ;
16curl -X GET -ks https://echoapp.f5demo.net/rental/stationery ;
17curl -X GET -ks https://echoapp.f5demo.net/cart ;
18curl -X GET -ks https://echoapp.f5demo.net/top ;
19curl -X GET -ks https://echoapp.f5demo.net/img ;
20# POST
21curl -X POST -ks https://echoapp.f5demo.net/product/book -d '{ "id" : 1 , "title" : "dummy-book" }';
22curl -X POST -ks https://echoapp.f5demo.net/product/dvd -d '{ "id" : 1 , "title" : "dummy-dvd" }';
23curl -X POST -ks https://echoapp.f5demo.net/product/cd -d '{ "id" : 1 , "title" : "dummy-cd" }';
24curl -X POST -ks https://echoapp.f5demo.net/product/game -d '{ "id" : 1 , "title" : "dummy-game" }';
25curl -X POST -ks https://echoapp.f5demo.net/product/stationery -d '{ "id" : 1 , "title" : "dummy-stationery }';
26curl -X POST -ks https://echoapp.f5demo.net/rental/book -d '{ "id" : 1 , "title" : "dummy-book" }';
27curl -X POST -ks https://echoapp.f5demo.net/rental/dvd -d '{ "id" : 1 , "title" : "dummy-dvd" }';
28curl -X POST -ks https://echoapp.f5demo.net/rental/cd -d '{ "id" : 1 , "title" : "dummy-cd" }';
29curl -X POST -ks https://echoapp.f5demo.net/rental/game -d '{ "id" : 1 , "title" : "dummy-game" }';
30curl -X POST -ks https://echoapp.f5demo.net/rental/stationery -d '{ "id" : 1 , "title" : "dummy-stationery }';
31
32EOF
33
34# 適宜コマンドに実行権限を付与してください
35$ chomod +x api-access.sh
以下コマンドを実行します。20秒毎に先程作成したスクリプトよりリクエストを送信します。すべてのリクエストについて同一の応答が返ってきます 結果が表示されるまで、数時間以上要する場合があります。クライアントより長時間コマンドを実行してください。
1$ while : ; do sleep 20 ; date ; ./api-access.sh ; done
一定時間、コマンドを実行してください。数時間放置の後、 Ctrl-C でコマンドを停止させてください
3. API Discovery の結果
次に画面左側、Meshの Service Mesh をクリックし、表示された項目の More をクリックします
注釈
対象のHTTP Load BalancerにLabelの割当がない場合、Namespace 名で項目が表示されます。Labelの割当がある場合、Labelが項目の名称として表示されます 指定した期間にNamespaceやLabelなど複数のオブジェクトに対して通信がある場合、それらが項目として表示されます。
API Endpoints のタブを開き、 Graph が選択され、結果が表示されていることを確認できます。
このGraphがAPI Discoveryによって把握できるAPIの情報となります。
URL Path を階層(Segment)毎に表示しており、各APIのEPが表示されます。
また、画面右上の Download Swagger より全体の構成を示すSwagger Fileをダウンロードすることが可能です。
Swagger Fileのサンプルは以下です
各APIのEPの項目は以下を示します
APIのEPにマウスオーバーするとポップアップで詳細が確認できます。
さらに、APIのEPをクリックするとそれらのメトリクスや構成情報を確認できます。
各メトリクスはマウスオーバーすると詳細が確認でき、クリックするとグラフで詳細を確認できます。
通信状況から把握した内容を構成情報として表示します。
Swagger タブを開くと、対象のAPI EPの構成情報をSwagger Fileとしてダウンロードすることができます。
Swagger Fileのサンプルは以下です
画面上部の Table を選択すると、表敬式で情報を確認することができます。
各メトリクスは、 Graph で各API EPの情報を確認した時と同様の操作が可能です。
4. API Document の確認
Swaggerが提供するSwagger EditorでダウンロードしたSwagger Fileがどのような形で表示されるか確認します。
Swagger Editor を開いてください。
画面左側に、対象となる Swagger File の内容を貼り付けてください。
JSON形式の内容を貼り付ける場合、YAMLへの変換に関する確認が表示されますので OK をクリックしてください。
貼り付けた結果より、右側に API Document が生成されていることが確認できます。 このように、Swagger Fileを利用することで、APIの構成を把握すると共に、APIの定義を公開する際にも有用であることが確認できます。
3. Swagger File を利用した API Group による通信制御
Swagger Fileを用いてAPI Groupを定義します。 細かなAPIへの制御が可能です。
マニュアルは以下のページを参照してください
1. Swagger File のImport
以下をSwagger Fileのサンプルとして紹介します。必要に応じてファイルをダウンロードしてください。
メニューより Web App & API Protection を開いてください。
画面左側 Manage欄の Files 、 Swagger Files を開き、 Add Swagger File をクリックしてください。
Name 欄に demo-app-user-api と入力し、 Upload File をクリックし、 User API Swagger File(user-api.json) をアップロードします。
REST API Swagger File に対し同様の手順を行います。
Name 欄に demo-app-rest-api と入力し、 Upload File をクリックし、 REST API Swagger File(rest-api.json) をアップロードします。
Importが完了したSwagger FileのURL情報を取得します。 後の項目で利用しますので このURL情報をメモ しておいてください。
このサンプルでは以下のような書式でURLが生成されます。
2. API Definition の作成
作成済みのHTTP Load Balancerに APIのAccess Control に関連するパラメータを設定します。 HTTP Load Balancer の設定手順は こちら を参照ください
本手順では、HTTP Load BalancerからAPI Definitionを定義します。
画面左側 Manage欄の Load Balancers 、 HTTP Load Balancers を開き、対象のLoad Balancerを表示し画面右側に遷移します。
すでに作成済みのオブジェクトを変更する場合、対象のオブジェクト一番右側 ‥ から、 Manage Configuration をクリックします
設定の結果が一覧で表示されます。画面右上 Edit Configuration から設定の変更します。
Security Configuration 欄 右上の Show Advanced Fields をクリックします。
API Definitions の Add Item をクリックします。新規作成のため、 Create new API Definition をクリックします
Name 欄に API Definition の demo-app-api-definition を入力します。
Swagger Specs の欄に先程ImportしたSwagger FileのURLを入力します。 Add Item で入力欄を追加し、双方のURLを入力し、 Continue をクリックします
一旦HTTP Load Blancerの設定を完了するため、最下部の Save & Exit をクリックし、設定を保存してください。
3. 作成した API Definition の確認
今回のサンプルでは2つのSwagger FileをImportしています。その2つのFileがどのような形でImportされ、またObjectが生成されているか確認します
Web App & API Protection の画面左側 Manage欄、 API Management 、 API Definition を開き、作成したオブジェクト ... から Show Child Objects をクリックしてください
API Definitionで生成される、Child Objectsが表示されます。
今回の設定例では、2つのObjectsの名称が必要となりますので、 それぞれの名称をメモ してください。
ImportしたSwagger Fileと生成されたConfiguration Objectの詳細については Tips1 を参照してください
4. Service Policy の割当
Service Policies を用いて、API の Access Control を設定します。
ML Config ですが、本機能では使用しませんので、 Single ... から Multi ... と変更いただいても問題ありません。
再度HTTP LoadBalancerの設定を編集します。
画面上部、 Servgice Policies で Apply Specified Service Policies を選択し、 Configure をクリックします
List of Policy の Select Service policy から Create new service policy をクリックしてください
Name 欄に demo-app-service-policy と入力します。
Rules の Select Policy Rules で Custom Rule List を選択し、 Configure をクリックします。
この項目で、通信制御のRuleを複数設定します
Rule作成画面が表示されます。 Add Item をクリックします
1つ目のRuleを作成します。
Name 欄に demo-app-sp-rule1 と入力し、 Configure をクリックします
許可ルールを作成するため、 Action で Allow を選択します。最下部に移動し、API Group 欄の Configure をクリックします
先程コピーしたAPI Groupの名称のうち、 all-operations に該当するもの(この例では ves-io-api-def-demo-app-api-definition-all-operations )をコピーします。
Ruleの編集を完了するため、画面右下の Apply をクリックします
Rule の作成を完了するため、 API Group Matcher 、 Rule 双方の画面右下 Apply をクリックします
2つ目のRuleを作成します。
Name 欄に demo-app-sp-rule2 と入力し、 Configure をクリックします
拒否ルールを作成するため、 Action で Deny を選択します。最下部に移動し、API Group 欄の Configure をクリックします
先程コピーしたAPI Groupの名称のうち、 base-urls に該当するもの(この例では ves-io-api-def-demo-app-api-definition-base-urls )をコピーします。
Ruleの編集を完了するため、画面右下の Apply をクリックします
Rule の作成を完了するため、 API Group Matcher 、 Rule 双方の画面右下 Apply をクリックします
3つ目のRuleを作成します。
Name 欄に demo-app-sp-rule3 と入力し、 Configure をクリックします
すべてを許可ルールを作成するため、 Action で Allow を選択します。最下部に移動し、API Group 欄の Configure をクリックします
すべての通信を許可するルールのため、API Groupの名称は指定しません。
Rule の作成を完了するため、 API Group Matcher 、 Rule 双方の画面右下 Apply をクリックします
以下のようにService Policyが作成されます。
表にまとめると以下の内容となります。
1 |
demo-app-sp-rule1 |
|
2 |
demo-app-sp-rule2 |
|
3 |
demo-app-sp-rule3 |
すべての通信を |
画面右下のボタンを順次クリックし、設定を完了します
5. 動作確認
all-operations の API Group に該当するリクエストをCurlコマンドで実施し、通信が 許可 されることが確認できます
1$ curl -ks https://echoapp.f5demo.net/rest/basket/1
2{"request":{"headers":[["host","app1.test10demo.xyz"],["user-agent","curl/7.58.0"],["accept","*/*"],["x-forwarded-for","18.178.83.1"],["x-forwarded-proto","https"],["x-envoy-external-address","18.178.83.1"],["x-request-id","33a40044-32b4-4e8e-8705-ea0e351d0c75"],["content-length","0"]],"status":0,"httpversion":"1.1","method":"GET","scheme":"http","uri":"/rest/basket/1","requestText":"","fullPath":"/rest/basket/1"},"network":{"clientPort":"49244","clientAddress":"103.135.56.118","serverAddress":"192.168.16.2","serverPort":"80"},"ssl":{"isHttps":false},"session":{"requestId":"872c2a9a09cad3dd53d61df4ce216178","connection":"7","connectionNumber":"1"},"environment":{"hostname":"echoapp"}}
base-urls の API Group に該当するリクエストをCurlコマンドで実施し、通信が 拒否 されることが確認できます
1$ curl -vks https://echoapp.f5demo.net/rest/
2
3** 省略 **
4
5<h1>
6Error 403 - Forbidden
7</h1>
ブラウザでアクセスした場合には以下のようにエラーが確認できます
以下リクエストは3つ目のルールに該当します。Curlコマンドでリクエストを送付し、通信が 許可 されることが確認できます
1$ curl -ks https://echoapp.f5demo.net/others
2{"request":{"headers":[["host","app1.test10demo.xyz"],["user-agent","curl/7.58.0"],["accept","*/*"],["x-forwarded-for","18.178.83.1"],["x-forwarded-proto","https"],["x-envoy-external-address","18.178.83.1"],["x-request-id","31e50ded-03cd-4bb5-b514-03fea51cc18b"],["content-length","0"]],"status":0,"httpversion":"1.1","method":"GET","scheme":"http","uri":"/others","requestText":"","fullPath":"/others"},"network":{"clientPort":"33739","clientAddress":"103.135.56.106","serverAddress":"192.168.16.2","serverPort":"80"},"ssl":{"isHttps":false},"session":{"requestId":"d05e00c647ead07c37f2bb0d6aad3f69","connection":"6","connectionNumber":"1"},"environment":{"hostname":"echoapp"}}
Tips1. Swagger File と Configuration Objectの詳細
次に、 REST API Swagger File の内容と生成された Child Object の内容を確認します。
1{
2 "swagger": "2.0",
3 "info": {
4 "description": "Juice Shop REST",
5 "title": "Juice Shop REST",
6 "version": "v1"
7 },
8 "basePath": "/rest",
9 "schemes": [
10 "http",
11 "https"
12 ],
13 "paths": {
14 "/basket/{id}": {
15 "get": {
16 "consumes": [
17 "application/json"
18 ],
19 "description": "Swagger auto-generated from learnt schema",
20 "parameters": [
21 {
22 "name": "id",
23 "in": "path",
24 "description": "ID",
25 "required": true,
26 "type": "integer",
27 "format": "int64"
28 }
29 ],
30 "responses": {
31 "200": {
32 "description": ""
33 }
34 }
35 }
36 },
37
38 ** 省略 **
39
40 "/wallet/balance": {
41 "get": {
42 "consumes": [
43 "application/json"
44 ],
45 "description": "Swagger auto-generated from learnt schema",
46 "parameters": [
47
48 ],
49 "responses": {
50 "200": {
51 "description": ""
52 }
53 },
54 "x-volterra-api-group":"sensitive"
55 }
56 },
57
58 ** 省略 **
8行目 basePath
/restであることが確認できます14行目 path
/basket/{id}であることが確認できます54行目
x-volterra-api-groupでAPI Groupを指定することが可能です。この例では、sensitiveというAPI Groupを指定しています40行目 path
/wallet/balanceは54行目の内容により、sensitiveのAPI Groupとするよう指定しています
base-urls の API Group を確認します。
1{
2 "metadata": {
3 "name": "ves-io-api-def-demo-app-api-definition-base-urls",
4 "namespace": "h-matsumoto",
5 "labels": {
6 "ves.io/api-scope": "ves-io-demo-app-api-definition"
7 },
8
9 ** 省略 **
10
11 "spec": {
12 "elements": [
13
14 ** 省略 **
15
16 {
17 "methods": [
18 "GET",
19 "HEAD",
20 "POST",
21 "PUT",
22 "DELETE",
23 "CONNECT",
24 "OPTIONS",
25 "TRACE",
26 "PATCH"
27 ],
28 "path_regex": "^/rest/.*$"
29 }
30 ]
31 },
32
33** 省略 **
28行目の内容を確認すると、
REST API Swagger Fileの 8行目 basePath の内容が確認できます
all-operations の API Group を確認します。
1{
2 "metadata": {
3 "name": "ves-io-api-def-demo-app-api-definition-all-operations",
4 "namespace": "h-matsumoto",
5 "labels": {
6 "ves.io/api-scope": "ves-io-demo-app-api-definition"
7 },
8
9 ** 省略 **
10
11 "spec": {
12 "elements": [
13
14 ** 省略 **
15
16 {
17 "methods": [
18 "GET"
19 ],
20 "path_regex": "^/rest/basket/([\\w\\-._~%!$&'()*+,;=:]+)$"
21 }
22 ]
23 },
24
25** 省略 **
28行目の内容を確認すると、basePath
/restにREST API Swagger Fileの 14行目 path を追加した内容が確認できます
1{
2 "metadata": {
3 "name": "ves-io-api-def-demo-app-api-definition-sensitive",
4 "namespace": "h-matsumoto",
5 "labels": {
6 "ves.io/api-scope": "ves-io-demo-app-api-definition"
7 },
8
9 ** 省略 **
10
11 "spec": {
12 "elements": [
13 {
14 "methods": [
15 "GET"
16 ],
17 "path_regex": "^/rest/wallet/balance$"
18 },
19 {
20 "methods": [
21 "GET"
22 ],
23 "path_regex": "^/rest/user/whoami$"
24 }
25 ]
26 },
27
28** 省略 **
3行目の通り、
REST API Swagger Fileの 54行目sensitiveの名称で API Group が作成されています28行目の内容を確認すると、basePath
/restにREST API Swagger Fileの 40行目 path を追加した内容が確認できます
4. XC API Security の解除
その他の機能を確認するため設定を解除する手順です。HTTP Load Balancerに割り当てたAPI Security に関連する設定を解除してください
5. Terraform を用いた HTTP Load Balancer + API Security の利用
HTTP Load Balancer + API Discovery の作成
ここで紹介したHTTP load Balancer + API Discovery を Terraform を使ってデプロイすることが可能です。
Terraform の利用で必要となる事前作業については こちら の手順を参考してください
パラメータの指定
実行に必要なファイル、また実行環境に合わせたパラメータを指定してください
1$ git clone https://github.com/BeF5/f5j-dc-waap-automation
2$ cd f5j-dc-waap-automation/terraform/api-discovery
3
4$ vi terraform.tfvars
5# ** 環境に合わせて適切な内容に変更してください **
6api_p12_file = "**/path/to/p12file**" // Path for p12 file downloaded from VoltConsole
7api_url = "https://**api url**" // API URL for your tenant
8
9# 本手順のサンプルで表示したパラメータの場合、以下のようになります
10myns = "**your namespace**" // Name of your namespace
11op_name = "demo-origin-pool" // Name of Origin Pool
12pool_port = "80" // Port Number
13server_name1 = "**your target fqdn1**" // Target Server FQDN1
14server_name2 = "**your target fqdn1**" // Target Server FQDN2
15httplb_name = "demo-echo-lb" // Name of HTTP LoadBalancer
16mydomain = ["echoapp.f5demo.net"] // Domain name to be exposed
17
18cert = "string///**base 64 encode SSL Certificate**" // SSL Certificate for HTTPS access
19private_key = "string///**base 64 encode SSL Private Key**" // SSL Private Key for HTTPS access
Terraform の利用
以下コマンドを参考に実行および削除をしてください。
1# 実行前事前作業
2$ terraform init
3$ terraform plan
4
5# 設定のデプロイ
6$ terraform apply
7
8# 設定の削除
9$ terraform destroy
HTTP Load Balancer + API Definitionを用いた通信制御
Swagger FileのImport及び、API DefinitionはコンソールよりGUIで設定する必要があります。
こちら の手順に従って操作をしてください。
3. API Definition の作成 のマニュアルはHTTP load Balancerから設定する手順としていますが、個別に作成する場合には以下手順に従って、 API Definition を作成してください
メニューより Web App & API Protection を開いてください。
画面左側 Manage欄の API Management 、 API Definition を開き、 Add API Definition より新規作成してください
Name 欄に API Definition の demo-app-api-definition を入力します。
Swagger Specs の欄に先程ImportしたSwagger FileのURLを入力します。 Add Item で入力欄を追加し、双方のURLを入力し、 Continue をクリックします
注釈
Terraform のサンプルファイルは、API Definition の名称が demo-app-api-definition という想定となっております。
API Definition の名称が異なる場合、生成されるChild Objectの名称も異なるため、 all-operations 、 base-urls 等に関連する名称を適切に変更してください。
パラメータの指定
実行に必要なファイル、また実行環境に合わせたパラメータを指定してください
1$ git clone https://github.com/BeF5/f5j-dc-waap-automation
2$ cd f5j-dc-waap-automation/terraform/api-control
3
4$ vi terraform.tfvars
5# ** 環境に合わせて適切な内容に変更してください **
6api_p12_file = "**/path/to/p12file**" // Path for p12 file downloaded from VoltConsole
7api_url = "https://**api url**" // API URL for your tenant
8
9# 本手順のサンプルで表示したパラメータの場合、以下のようになります
10myns = "**your namespace**" // Name of your namespace
11op_name = "demo-origin-pool" // Name of Origin Pool
12pool_port = "80" // Port Number
13server_name1 = "**your target fqdn1**" // Target Server FQDN1
14server_name2 = "**your target fqdn1**" // Target Server FQDN2
15httplb_name = "demo-echo-lb" // Name of HTTP LoadBalancer
16mydomain = ["echoapp.f5demo.net"] // Domain name to be exposed
17
18cert = "string///**base 64 encode SSL Certificate**" // SSL Certificate for HTTPS access
19private_key = "string///**base 64 encode SSL Private Key**" // SSL Private Key for HTTPS access
20
21// Service Policy Parameter
22sp_name = "demo-app-service-policy"
Terraform の利用
以下コマンドを参考に実行および削除をしてください。
1# 実行前事前作業
2$ terraform init
3$ terraform plan
4
5# 設定のデプロイ
6$ terraform apply
7
8# 設定の削除
9$ terraform destroy
6. API を用いた HTTP Load Balancer + API Security の利用
ここで紹介したHTTP load Balancer + API Security を XC の API を使ってデプロイすることが可能です。
API の利用で必要となる事前作業については こちら の手順を参考してください
以下マニュアルを参考に、パラメータを指定して実行してください。
Service Policy
Example of creating service_policy
ページ中段
Request using curlをご覧ください
作成したオブジェクトを適宜HTTP Load Balancerから参照してください
HTTP Load Balancer
Example of creating http_loadbalancer
ページ中段
Request using curlをご覧ください
送付するJSON データの書式は実際に作成したコンフィグのJSONデータからも確認をいただけます。合わせてご確認ください
HTTP Load Balancer + API Discovery の作成
パラメータの指定
GitHubよりファイルを取得します。 api-discovery-httplb.json をAPIの値として指定します。
**<変数名>** が環境に合わせて変更するパラメータとなります。適切な内容に変更してください。
Originl Pool Object は HTTP Load Balancer の Originl Pool 作成手順に従って作成ください
APIの利用
以下のサンプルを参考にAPIを実行してください。 証明書のファイル名、パスワード情報は適切な内容を指定してください。
ファイル取得
1$ git clone https://github.com/BeF5/f5j-dc-waap-automation
2$ cd f5j-dc-waap-automation/api/api-discovery
オブジェクトの作成
1# Originl Pool の作成 (HTTP LoadBalancer のパラメータを指定)
2$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/origin_pools \
3 --cert **/path/to/api_credential.p12-file**:**password** \
4 --cert-type P12 \
5 -X POST \
6 -d @../http-load-balancer/base-origin-pool.json
7
8# HTTP LB の作成
9$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/http_loadbalancers \
10 --cert **/path/to/api_credential.p12-file**:**password** \
11 --cert-type P12 \
12 -X POST \
13 -d @api-discovery-httplb.json
オブジェクトの削除
1# HTTP LB の削除
2$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/http_loadbalancers/**httplb_name** \
3 --cert **/path/to/api_credential.p12-file** \
4 --cert-type P12 \
5 -X DELETE
6
7# Origin Pool の削除
8$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/origin_pools/**op_name** \
9 --cert **/path/to/api_credential.p12-file** \
10 --cert-type P12 \
11 -X DELETE
HTTP Load Balancer + API Definitionを用いた通信制御 の作成
パラメータの指定
GitHubよりファイルを取得します。 api-control-httplb.json をAPIの値として指定します。
**<変数名>** が環境に合わせて変更するパラメータとなります。適切な内容に変更してください。
Originl Pool Object は HTTP Load Balancer の Originl Pool 作成手順に従って作成ください。App Firewall Object は WAF の App Firewall 作成手順に従って作成してくださいSwagger File の Import及びAPI Definitionは別途GUIから作成が必要です。詳細は こちら を参照してください。
APIの利用
以下のサンプルを参考にAPIを実行してください。 証明書のファイル名、パスワード情報は適切な内容を指定してください。
ファイル取得
1$ git clone https://github.com/BeF5/f5j-dc-waap-automation
2$ cd f5j-dc-waap-automation/api/api-control
オブジェクトの作成
1# Originl Pool の作成 (HTTP LoadBalancer のパラメータを指定)
2$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/origin_pools \
3 --cert **/path/to/api_credential.p12-file**:**password** \
4 --cert-type P12 \
5 -X POST \
6 -d @../http-load-balancer/base-origin-pool.json
7
8# Service Policy の作成
9$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/service_policys \
10 --cert **/path/to/api_credential.p12-file** \
11 --cert-type P12 \
12 -X POST \
13 -d @api-control-service-policy.json
14
15# HTTP LB の作成
16$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/http_loadbalancers \
17 --cert **/path/to/api_credential.p12-file** \
18 --cert-type P12 \
19 -X POST \
20 -d @api-control-httplb.json
オブジェクトの削除
1# HTTP LB の削除
2$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/http_loadbalancers/**httplb_name** \
3 --cert **/path/to/api_credential.p12-file** \
4 --cert-type P12 \
5 -X DELETE
6
7# Service Policy の削除
8$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/service_policys/**sp_name** \
9 --cert **/path/to/api_credential.p12-file** \
10 --cert-type P12 \
11 -X DELETE
12
13# Origin Pool の削除
14$ curl -k https://**tenant_name**.console.ves.volterra.io/api/config/namespaces/**namespace**/origin_pools/**op_name** \
15 --cert **/path/to/api_credential.p12-file** \
16 --cert-type P12 \
17 -X DELETE













































