1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HerokuアプリからのOutboundIPを固定化するアドオンProximoをPython3で使う

Last updated at Posted at 2018-05-17

Herokuアプリも固定IPしたい

外部システムへ接続する際、「特定のIPアドレスからのアクセスのみ許可する」といったセキュリティ条件を提示されることがあります。
Herokuアプリケーションは通常、OutboundIPアドレス(外部システムから見ると接続元IPアドレス)は固定されません。
Enterprise契約してPrivate Space利用するという方法もありますが、(既にEnterpriseな場合を除くと)敷居が高いのではないでしょうか。
そこで Proximo というアドオンを利用して、カジュアルに固定IPを実現します。

Proximoについて

Python3で使う

https://devcenter.heroku.com/articles/proximo にPythonのサンプルも載っていて、urllib2urllib.request に読み替えれば動きます。
が、せっかくなので urllib3 を使ったサンプルを作ってみました。

urllib3 を使ったサンプル

  • 環境変数 PROXIMO_URL は、下記のように認証情報を含んだURL形式で設定されます。
http://proxy:password@proxy-12-34-45-56.proximo.io
  • urllib3.ProxyManager は認証情報(上記の proxy:password 部分)を解釈してくれないようなので、自力でBASIC認証ヘッダを付けて利用します。
  • PROXIMO_URL が設定されていない場合は直接アクセスするようにしています。
import os
import urllib3
from urllib3.util.url import parse_url
from urllib3.util import make_headers


def get_http():
    proximo_url = os.environ.get('PROXIMO_URL')
    proxy_headers = make_headers(proxy_basic_auth=parse_url(proximo_url).auth)

    if proximo_url:
        return urllib3.ProxyManager(proxy_url=proximo_url, proxy_headers=proxy_headers)
    else:
        return urllib3.PoolManager()


if __name__ == '__main__':
    r = get_http().request('GET', 'http://checkip.amazonaws.com/')
    print(r.status)
    print(r.data)

requests を使ったサンプル

  • 上記urllib3を使ったサンプルと同じ動作を requests を使って実現
  • httpアクセスモジュール色々ありますね
import os
import requests

def get_proxies():
    proximo_url = os.environ.get('PROXIMO_URL')
    if proximo_url is None:
        return {}
    return {'http': proximo_url, 'https': proximo_url}

if __name__ == '__main__':
    r = requests.request('GET', 'http://checkip.amazonaws.com/', proxies=get_proxies())
    print(r.status_code)
    print(r.content)
1
4
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
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?