conoha vpsでサーバー構築(2.conoha api)かんたんkusanagi編

前回、ConoHa vpsのかんたんkusanagiテンプレートを使用してインスタンス作成まで行いました。


  • kusanagiとは、言ってしまえば高速化チューニングしたLAMP(WEB実行)環境になります。

    かんたんKUSANAGIは
    「かんたんKUSANAGI」テンプレートではKUSANAGIを簡単に操作できる、プライム・ストラテジー社公式認定のKUSANAGIかんたん管理ツール「ConoHa KUSANAGI manager」がインストールされます。 KUSANAGI managerではKUSANAGIの初期設定、WordPress作成で必要だったコマンド操作が不要となり簡単にKUSANAGI搭載のWordPressを運用することができます。

    引用: かんたんKUSANAGIテンプレートの使い方|ConoHa VPSサポート

    とCentOS(2020年7月現在centos7)上にKUSANAGI環境からwordpressのインストールまでほぼ自動で出来てしまいます。


インスタンス作成時、オプション設定でsshとメール関連のポートのみ解放していましたが、ConoHa KUSANAGI managerにアクセスするポートやhttp、https等 必要なポートを解放していくことにします。
ConoHa vpsのコントロールパネルで解放したポートは仮想サーバーのOS内のファイアウォール(centos7の場合firewalld)では無く仮想インフラ側になります。
その為、ConoHa apiを使用して設定していく必要があります。
STEP1
コントロールパネルのサイドメニューのAPIを選択します。
STEP2
APIユーザーのパスワードを設定します。
ConoHa api|APIユーザー
STEP3
sshで仮想サーバーに接続します。
STEP4
ConoHa apiはREST APIとして実装されているためcurlコマンドで簡単に実行できますが戻り値のjsonを整形する為にjqコマンドをインストールします。

yum install jq --enablerepo=epel

STEP5
トークンを発行する
トークン発行 – Identity API v2.0 / ConoHa API
  • いよいよ、ConoHa APIを実行してファイアウォールを設定していきます。
    ConoHa APIの詳細は ConoHa API Index / ConoHa API をご覧ください。
    今回は、identity api v2.0(最初にトークンを発行する為に使用)とNetwork api v2.0を使用します。

    基本的には、ConoHa APIのドキュメントのExample 通り実行していくだけですが、curlのiオプションはHTTPレスポンスヘッダ情報を返す為jqコマンドで整形できなくなってしまいますので iオプションは実行時のエラーを確認したい時のみ付加しjqで整形する場合は不要です。

curl -X POST \
-H "Accept: application/json" \
-d '{"auth":{"passwordCredentials":{"username":"APIユーザー.ユーザー名","password":"APIユーザー.パスワード"},"tenantId":"テナント情報.テナントID"}}' \
エンドポイント.Identity Service/tokens|jq

と実行すると

curl -X POST -H "Accept: application/json" -d '{"auth":{"passwordCredentials":{"username":"username","password":"password"},"tenantId":"tenantId"}}' https://identity.tyo.conoha.io/v2.0/tokens|jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2549  100  2399  100   150   7275    454 --:--:-- --:--:-- --:--:--  7269
{
  "access": {
    "token": {
      "issued_at": "yyyy-mm-ddTHH:MM:SS.993201",
      "expires": "yyyy-mm-ddTHH:MM:SSZ",
      "id": "トークンID",
      "tenant": {
        "domain_id": "domainid",
        "description": "v2",
        "enabled": true,
        "id": "テナントID",
        "name": "テナント名"
      },
      "audit_ids": [
        "xxxxxxxxxxxxx"
      ]
    },
....

戻ってきたトークンIDを元に処理を行っていきます。
STEP6
セキュリティグループを作成
セキュリティグループ作成 – Network API v2.0

コントロールパネルにあったように役割毎(WEB、メール)にグループを作成した方が管理しやすいですが、個人で運営しているだけなのでそれほど変更する必要もない為、一つのグループでルールを設定します。 ※デフォルトで作成されているセキュリティグループのルール変更は出来ない為、独自のルールを設定したい場合は、最低一つは新規でセキュリティグループを作成する必要があります。

curl -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"security_group": {"name": "myrule","description": "My Custom Sec"}}' \
エンドポイント.Network Service/security-groups|jq

STEP7
作成したセキュリティグループをセキュリティルールを追加
セキュリティグループ ルール作成 – Network API v2.0 / ConoHa API
※STEP6で作成した実行した際の戻り値にセキュリティグループIDがあるのでパラメータに指定します。
例:kusanagi manager用のポートを特定IPからのみアクセス可能に設定します。


curl -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"security_group_rule": {"direction": "ingress", "ethertype": "IPv4", "security_group_id": "セキュリティグループID", "port_range_min": "ポート番号", "port_range_max": "ポート番号", "protocol": "tcp","remote_ip_prefix":"許可IP"}}' \
エンドポイント.Network Service/security-group-rules|jq

例:httpポートを全許可(ipv4)

curl -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"security_group_rule": {"direction": "ingress", "ethertype": "IPv4", "security_group_id": "セキュリティグループID", "port_range_min": "80", "port_range_max": "80", "protocol": "tcp"}}' \
エンドポイント.Network Service/security-group-rules|jq

例:httpポートを全許可(ipv6)

curl -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"security_group_rule": {"direction": "ingress", "ethertype": "IPv6", "security_group_id": "セキュリティグループID", "port_range_min": "80", "port_range_max": "80", "protocol": "tcp"}}' \
エンドポイント.Network Service/security-group-rules|jq

SSH等も必要に応じIP制限等してルールを追加していきます。
STEP8
セキュリティグループ一覧取得でグループとルールの確認
セキュリティグループ一覧取得 – Network API v2.0 / ConoHa API

※STEP7で作成したグループのみを確認したい場合はセキュリティグループ詳細取得 – Network API v2.0 / ConoHa APIで確認する事も可能ですがセキュリティグループやルールの数が少ない為、セキュリティグループ一覧取得でSTEP7で設定したルールの確認を行います。

curl -i -X GET \
-H "Accept: application/json" \
-H "X-Auth-Token: トークンID" \
エンドポイント.Network Service/security-groups|jq

STEP9
セキュリティグループを設定するポートの確認ポート一覧取得 – Network API v2.0 作成したグループを設定する仮想サーバーのポートを特定する為にポート一覧を表示し仮想サーバーのIPアドレスを元にポートIDを確認します。
また、現在ポートに設定されているセキュリティグループを確認します。

curl -i -X GET \
-H "Accept: application/json" \
-H "X-Auth-Token: トークンID" \
エンドポイント.Network Service/v2.0/ports|jq

 

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1683  100  1683    0     0   4461      0 --:--:-- --:--:-- --:--:--  4452
{
    "ports": [
        {
            "status": "ACTIVE",
            "name": "PORT_NAME",
            "allowed_address_pairs": [],
            "admin_state_up": true,
            "network_id": "69f32dbf-392d-459a-b7d9-6802d55a6d65",
            "tenant_id": "22394afc818d471ca2f0308c06ae7460",
            "extra_dhcp_opts": [],
            "binding:vnic_type": "normal",
            "device_owner": "compute:None",
            "mac_address": "fa:16:3e:16:69:ce",
            "fixed_ips": [
                {
                    "subnet_id": "45093c6d-e0cf-4101-943b-c75625a57801",
                    "ip_address": "172.21.139.80"
                }
            ],
            "id": "08357e0f-3b36-46f4-8f75-bbdb0bfcaa33",
            "security_groups": [
                "6cdb77f5-0e85-49cf-b093-acb3ab41e730"
            ],
            "device_id": "2a0b45bb-1e14-400e-a386-195f58c47f4e"
        },

※レスポンスはサンプルより抜粋しており実際の実行結果ではありません

該当ポートのid及び、security_groups(現在設定されているポートのセキュリティグループ)のID一覧を確認します。
現在設定されているセキュリティグループの詳細を確認したい場合は、
セキュリティグループ詳細取得 – Network API v2.0 で確認したいセキュリティグループIDを設定して確認します。
STEP10
ポートにセキュリティグループを設定ポート一覧取得 – Network API v2.0 セキュリティグループを一つ追加や一つ削除などはできず、セキュリティグループのリストを設定するため設定済みのセキュリティグループも再度記載する必要があります。

curl -X PUT \
-H "Accept: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"port": {"security_groups": ["セキュリティID1", "セキュリティID2", "セキュリティID3" ]}}' \
エンドポイント.Network Service/ports/da195d06-1cde-452b-9135-c773417cebb8

これでConoHa APIを使用したファイアウォールの設定が完了し、kusanagi managerのポートも解放できたので kusanagi manegerで設定していきます。
ConoHa vpsでサーバー構築(3.kusanagi manager)かんたんkusanagi編へ続く