APIで特定のサーバーからのPINGのみ許可する

APIにて監視サーバーなどの特定のサーバーからのPINGのみを許可するセキュリティグループの設定方法をご案内します。
なお、以下ではAPIによるcurlコマンドを用いた設定手順となりますので、任意のサーバーにて実行ください。

 設定手順

[ 1 ] API認証を行い、トークンの取得ならびに発行されたトークンIDを確認します。

※ 対象のAPIリファレンスは こちら
認証の
エンドポイント
コントロールパネル内のAPIメニューから「Identity Service」をご確認ください。
APIユーザー名 コントロールパネル内のAPIメニューからAPIユーザーを作成ください。
パスワード コントロールパネルのAPIメニューからAPIユーザーを作成する際に設定するパスワード。
テナント名 コントロールパネル内のAPIメニューから「テナント名」をご確認ください。
curl -i -X POST \ -H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"auth":{"passwordCredentials":{"username": "APIユーザー名", "password": "パスワード"},"tenantName":"テナント名"}}' \
認証のエンドポイント/tokens
コンソール画面上には以下のようにリクエストの結果が返ってきます。「access」の「id」の値がAPI操作を行う際に必要となるトークンIDです。以降の手順では、トークンIDと表示されているものは全てこのIDを指すものとします。トークンIDは発行後、24時間で失効となりますので作業が日をまたぐ場合は都度発行する必要があります。
{“access”:{"token":{"issued_at":"2016-11-27T08:01:26.504595","expires":"2016-11-28T08:01:26Z",
"id":"9e54605ee98043b2a89d28f80bc1ce3f"
[ 2 ] セキュリティグループを作成します。

※ 対象のAPIリファレンスは こちら
ネットワークの
エンドポイント
コントロールパネル内のAPIメニューから「Network Service」をご確認ください。
curl -i -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"security_group": {"name": "任意のセキュリティグループ名"}}' \
ネットワークのエンドポイント/v2.0/security-groups
上記リクエストが正常に処理されると以下のような結果が返ってきます。「security_group」の「id」の値がAPI操作を行う際に必要となるセキュリティグループIDです。以降の手順でAPIの操作に必要となりますので、メモをとってください。
{"security_group": {"description": "","id": "セキュリティグループID"
[ 3 ] 指定するIPからのPINGのみを許可する設定を作成したセキュリティグループに追加します。「port_range_min」や「port_range_max」には、許可するICMPタイプの番号を範囲指定してください。また、許可IPアドレスについては、プレフィックスを含めて指定してください。

※ 対象のAPIリファレンスは こちら
curl -i -X POST \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"security_group_rule": {"direction": "ingress", "ethertype": "IPv4", "security_group_id": "セキュリティグループID", "port_range_min": "ICMPのタイプ", "port_range_max": "ICMPのタイプ", "protocol": "icmp", "remote_ip_prefix": "許可IPアドレス/32"}}' \
ネットワークのエンドポイント/v2.0/security-group-rules
[ 4 ] セキュリティグループを適用するサーバーの「ポート情報」を確認します。

※ 対象のAPIリファレンスは こちら
curl -i -X GET \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
ネットワークのエンドポイント/v2.0/ports
上記リクエストが正常に処理されると以下のような結果が返ってきます。「id」の値がAPI操作を行う際に必要となるポートIDです。以降の手順でAPIの操作に必要となりますので、該当サーバーにアタッチされているグローバルIPアドレス等の情報から対象サーバーの「ポートID」をご確認の上、メモをとってください。
{
    "ports": [
        {
            "admin_state_up": true, 
            "allowed_address_pairs": [], 
            "binding:vnic_type": "normal", 
            "device_id": "デバイスID", 
            "device_owner": "compute:None", 
            "extra_dhcp_opts": [], 
            "fixed_ips": [
                {
                    "ip_address": "IPアドレス", 
                    "subnet_id": "サブネットID"
                }
            ], 
            "id": "ポートID", 
            "mac_address": "MACアドレス", 
            "name": "ポートの名前", 
            "network_id": "ネットワークID", 
            "security_groups": [
                "セキュリティグループID"
            ], 
            "status": "ACTIVE", 
            "tenant_id": "テナントID"
        },
[ 5 ] 作成したセキュリティグループを対象サーバーのポートに適用します。
なお、本リファレンスで作成したセキュリティグループ以外に必要なセキュリティグループがある場合、該当のセキュリティグループIDも合わせて指定してください。

※ 対象のAPIリファレンスは こちら
curl -X PUT \
-H "Accept: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"port": {"security_groups": ["ICMPを許可したセキュリティグループID,任意のセキュリティグループID"]}}' \
ネットワークのエンドポイント/v2.0/ports/ポートID


本リファレンスはZ.com Cloudにてサーバーをご利用いただく場合の一例であり、お客様の運用やポリシーによってその限りではございません。
お客様のご利用用途に応じて必要な設定や操作をおこなってください。

Internet for everyone

Copyright (c) 2024 GMO Internet Group, Inc. All Rights Reserved.