LoginSignup
0
0

More than 5 years have passed since last update.

ニフクラのAPIを使ってファイアウォールに接続端末のIPの穴を開ける

Last updated at Posted at 2017-06-14

動機

いらいらしてやった。後悔はしていない。

というのは冗談ですが、「開発環境をニフティクラウドに置いていて外出先からテザリングで使う」ようなケースがあるかどうかはわからないので置いて置いて。

いつもとは違う環境からニフクラのサーバーにログインしようとして、「FWに穴が空いてなくてログインできない!どうしよう!」というケースは障害の時とか急いでいる時に限ってよくあるものです。
そういう時に限ってコントロールパネルにはアクセス元IPで制限がかかっており、外出先などからは操作できないようにしてあるもので、急いでいるのに会社の同僚に頼んでFWにIP許可制限を入れてもらうなんて時間のロスが発生したりしなかったりするかもしれません。

そんな時でも、ニフティクラウドのAPIは使えるので、ファイアウォールのIN許可設定に今の自分の端末がサーバーにアクセスする時に使うIPを設定しちゃえるわけです。(アクセスキーとシークレットアクセスキーだけ控えておけば)

作ったもの

Gist

# -*- coding: utf-8 -*-

import hashlib
import hmac
import base64
import requests
from datetime import datetime

ACCESS_KEY = u'12345678901234567890'
SECRET_KEY = u'1234567890abcdefghijklmnopqrstuvwxyzABCD'

region = 'east-1'
fw_group_name = 'hogehoge'
port = 22

src_ip = requests.get('https://httpbin.org/ip').json()['origin']
endpoint = 'https://' + region + '.cp.cloud.nifty.com/api/'
date = datetime.now().isoformat(timespec='milliseconds') + 'Z'

params = {
        'Action':'AuthorizeSecurityGroupIngress',
        'GroupName':fw_group_name,
        'IpPermissions.1.IpProtocol':'TCP',
        'IpPermissions.1.FromPort':port,
        'IpPermissions.1.ToPort':port,
        'IpPermissions.1.IpRanges.1.CidrIp':src_ip,
        'IpPermissions.1.Description':'SetCurrentIpToFW.py',
        'AccessKeyId':ACCESS_KEY,
        'SignatureVersion':0,
        'Timestamp':date
        }
string_to_sign = params['Action'] + params['Timestamp']

params['Signature'] = base64.b64encode(
        hmac.new(
            SECRET_KEY.encode('utf-8'), 
            string_to_sign.encode('utf-8'), 
            hashlib.sha1
            ).digest()
        )
resp = requests.get(url=endpoint, params=params)

print(resp.content)

使い方

  1. 必要なライブラリを pip install します。(私は requests だけで十分だったみたいです)
  2. ACCESS_KEYSECRET_KEY にそれぞれアクセスキーとシークレットキーをニフクラのコンパネから取得して設定します。
  3. region, fw_group_name, port を適切に設定します。
  4. src_ip は実行環境がインターネットにアクセスするGlobalなIPを取って来ていますが、任意のIPを手打ちしてもOKです。
  5. 諸々を設定したら実行します。
  6. 実行結果の見辛い XML の中に True の文字があったら成功です。
    1. エラーが出たら頑張ってデバッグしてください。

参考

http://cloud.nifty.com/api/rest/authenticate.htm
http://cloud.nifty.com/api/rest/AuthorizeSecurityGroupIngress.htm

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0