Postman * ConoHa APIでファイアウォール設定
私、個人的にVPSやクラウドなどを契約し、検証や遊びなどに利用しています。(子供の相手で…まとまった時間が…)
最近新しくConoHa VPSを取得する際、APIを使ってみました。
今回はそのときの話を。
ConoHaのファイアウォール
ConoHaのVPSは、ちゃんとインフラ側にFW(パケットフィルタ)がついています。ですが、コントロールパネルからの操作では、以下のように融通が利きません…
なので すべて許可
にして iptables や firewalld で塞ぐ、というパターンを取ることも多いんじゃないかなと。(というかデフォルトが すべて許可
か?) 問題ないとは思いますが、サーバーで受けるよりFWで受けてもらったほうが、負荷的には有利かな? ということでやってみます。
Postmanつよい…
しかしcurlで叩くの面倒だなぁ…。業務でWeb APIの設計開発を行うこともあるし、この際なんかツール探すか…ということで Postman
に出会いました。
便利そうだったので使ってみると、こいつがとても強力です。
ここでは、実際にPostmanでConoHa APIを使った際の手順をご紹介しようと思います。
準備
ConoHaコントロールパネルよりAPIユーザーを作成します。ユーザー情報やテナント情報を控えておいてください。
また、この記事は東京リージョン前提ですので、別リージョンの場合はエンドポイントを読み替えてください。
次に、Postman公式よりクライアントを落としてきます。私は個人で利用していたので、自分のGoogleアカウントで作成しました。
変数を作っておく
Postmanは環境変数を扱えるので、変数を作っておくと便利です。ここに接続情報や、取得したトークンの値をまとめておくことができます。
画面右上、この辺で設定。
環境変数セット選択] [変数クイックビュー] [環境変数管理]
一番右の歯車っぽいアイコンをクリックして MANAGE ENVIRONMENTS
を開き Addボタン
を押すと以下の設定画面が表示されます。
ここで、環境変数のセットを作成することができます。複数作成しておけば、開発環境やステージングで変数を丸ごと変えることができて便利。
一番上のテキストボックスにはこの環境の名前、下にはKey-Value形式で値を入れていきます。
ユーザID、パスワード、テナントID、トークン(まだ空でいい)などを入れておくと楽かと思います。
設定したらこんな感じで見れます(歯車横の目玉? をクリック)
いいですね。
ConoHa API トークンを取得
さっそく、トークンを取得してみます。
Postman画面上、一番左上の Newボタン
より Request
を選択します。すると下記画面が表示されます。
リクエストの名称を設定し、後は保存先を指定してSaveします。保存先は Collection
というディレクトリ管理っぽい感じになっているので
+ Create Collection
からコレクションを作成して保存すると良いかと(コレクションはまとめて実行することもできます)
エンドポイントは
POST https://identity.tyo1.conoha.io/v2.0/tokens
なので、まずはこんな感じで設定。
上から見ていって、メソッドはPOST / リクエスト先URLを指定。その下から詳細を入力していきます。
Authorization
、Headers
は何もせず Body
をクリックして送信内容を設定します。
トークン発行 – Identity API v2.0 / ConoHa API
こちらに Request Json
があるのでコピペして、上記画像のように変数を指定します(宣言した変数名を {{}}
で囲めばOK!)
テキストエリアの上で raw
にチェックを入れ、その右にあるプルダウンを JSON(application/json)
にします。
すると、PostmanがHeaders
にContent-Type
application/json
を追加してくれます! すごい。
できたら Sendボタン
を押してリクエストを飛ばしてみてください。
トークンを変数にセット
リクエストのたびにトークンをコピペするのも面倒なので、先ほど宣言した変数に代入します。
ここでは Tests
を利用してやってみましょう。
こちらを参考にしまして、ConoHa用に合わせて少し修正
APIの開発がむちゃくちゃ捗る「Postman」の使い方 – WPJ
let OK = responseCode.code === 200; tests['Successful -> Get token'] = OK; if (OK) { let jsonData = JSON.parse(responseBody); pm.environment.set('TOKEN', jsonData.access.token.id); }
pm.environment.set()の第一引数を、自分で宣言した変数名に合わせてください。この例では TOKEN
ですね。
で、このコードをこんな感じで入力します。
もう一度Send
してリクエスト、成功するとトークン用変数が設定されます! 環境変数を確認してみてください。これで他のリクエストを実行するとき{{TOKEN}}
が使えますね!
また、リクエストの作成が大体終わったらSendボタン
の右にあるSaveボタン
で保存してくださいね。
ファイアウォール設定するには?
トークンが取れたので、このはと会話できますね。
下記サイトさんを参考にさせていただきまして、設定していきます。
手順としてはこうなります
- セキュリティグループ追加
- セキュリティグループのルール作成
- セキュリティグループをネットワークポートに適用
今回は
を開放する感じでやってみます。最終的なコレクションやフォルダはこんな感じでしょうか?
セキュリティグループを追加する
セキュリティグループ ルール作成 – Network API v2.0 / ConoHa API
ということなので、左上の New
をクリックして新たにリクエストを作成します。先ほど作ったコレクションの中に、セキュリティグループ作成用のフォルダを作ってまとめるといいかもしれませんね。リクエストはメイン画面上でドラッグ&ドロップで移動できます。
後は、トークンを作成した時と同様に、リクエストの設定をしていきます。
POST https://networking.tyo1.conoha.io/v2.0/security-groups
に対して
{ "security_group": { "name": "ssh-2222", "description": "SSH Port" } }
こいつを送信します。
トークンの変数をセットします。
正しく送信できると201 Created
が返ってくるはずです。レスポンスのJSONデータには作成されたセキュリティグループID
が入っているので、控えておいてください。
{ "security_group": { "tenant_id": "xxxxxxxxxxxxxxxxxxxxxxxxxx", "description": "", "id": "d640f9e7-f329-4813-919e-0382799f6ce4", ← コレ
ちなみに、レスポンス表示画面から、値をドラッグして選択→右クリックで変数に格納することもできます。
こんな感じでhttp-setとssh-2222のセキュリティグループを作成します。コレクションが表示されているところで、リクエストを右クリック→ Duplicate
できるので、コピーして作ってしまいましょう。
セキュリティグループのルールを作成
グループができたので、次はそのグループのルールを作ります。
セキュリティグループ ルール作成 – Network API v2.0 / ConoHa API
まずはPostmanで
POST https://networking.tyo1.conoha.io/v2.0/security-group-rules
に対するリクエストを作成します。URL
とBody
を変えるだけなので、グループ作成時のリクエストをコピーして作成してもOK。
Body
に公式のリクエスト用JSONをコピペ、自分用に修正します。SSHの2222用であれば
{ "security_group_rule": { "direction": "ingress", "ethertype": "IPv4", "security_group_id": "{{SEC_GROUP_ID_SSH}}", "port_range_min": "2222", "port_range_max": "2222", "protocol": "tcp" } }
こんな感じ。グループIDは変数になってますが、手動でも構いません。
Sendボタン
で送信して201 Created
が返ってくればOK!
あとは同様に、80と443を適用していきます(グループIDを間違えないように注意!)
今までの設定をネットワークポートに適用
ようやく準備が整いました。ルールが設定されたセキュリティグループをVPSに設定すれば完了です。
VPS自体にではなくネットワークポート(仮想NIC?)単位で制御する仕様とのことなので、ひとまずネットワークポートIDを取得します。
ポート一覧取得 – Network API v2.0 / ConoHa API
これは GET https://networking.tyo1.conoha.io/v2.0/security-group-rules
に対して Headers
から X-Auth-Token
を渡すだけでOKです。
下記、レスポンスは省略してますが、アスタリスクの部分を見てください。
設定したいVPSのIPアドレスから見ていって、idを探し当てます。
{ "ports": [ { "status": "ACTIVE", ... .. . "mac_address": "fa:16:3e:16:69:ce", "fixed_ips": [ { "subnet_id": "45093c6d....", !****** "ip_address": "000.000.00.0" } ], !****** "id": "08357e0f-3b36-46f4-8f75-bbdb0bfcaa33", ... .. . },
このポートIDを利用して、次はこいつを叩きます。
ポート更新 – Network API v2.0 / ConoHa API
今までのAPIと違ってPUT
を使うのと、リクエストURL中に値が入ることに注意します。こんな感じです。
Bodyの方はいつも通りraw
のJSON(application/json)
でOKです。
こいつはリクエストのたびに設定が上書きされるので、セキュリティグループは配列でまとめて一括登録。こんなかんじにします。
{ "port": { "security_groups": [ "{{SG_SSH}}", "{{SG_HTTP}}" ] } }
送信して成功すれば 200 OK
が来ます。レスポンスで変更後のポート情報が返ってくるので、"security_groups"
に指定したIDが入っているか確認してください。
後は接続テストやポートのチェック、VPS自身のFW設定などをやればOKですね。
(この記事に誤りがあるかもしれませんので、チェックは入念にお願いします…)
最近はいろいろAPIでできるというか、ホントなんでもAPIでできるのね…と思うことも増えてきました。こういうクライアントがあると、さらっと確認したりできてすごく良いですね。今後は、気楽な気持ちでAPIに触れられそうです。
GMO Internet,Inc.