curlでIAP超えのアプリAPIを叩く
IAPでアクセス制限しているアプリに対し、curl(シェル)でAPIを叩く方法についてまとめてみます。
IAPとは
IAPは、Google CloudのサービスでIdentity-Aware Proxy(IAP)
のことです。
IAPは、Webサイト(アプリ)に対し、認証されたユーザーにのみアクセスを許可するというサービスです。
社内システムで、社員のみにアクセス可能とするということが可能です。
認証手順
なんとなく、以下を見るとtoken
を取得して、httpのAuthorization: bearer
に入れれば良さそうですが、手順がわかりずらいです。
なので、以下に手順をまとめておきます。
事前準備
curlを実行する前に、以下を準備します。
- サービスアカウントを作成する
- IAP で保護されたプロジェクトのアクセスリストにサービス アカウントを追加する
- AUD(ウェブアプリケーションのクライアントID)を取得
xxxx.apps.googleusercontent.com
の形式のID。
IAP超えのcurl実行手順
1. TOKENを取得
gcloud authprint-identity-token
コマンドを使い、サービスアカウントのtokenを取得します。
また、このとき受け取り側のID(AUD)をtokenに設定する必要があるので、--audiences
オプションを指定します。
TOKEN=`gcloud auth print-identity-token ”サービスアカウント” --audiences=”AUD※”`
※事前準備3で取得したクライアントID
2. curl実行
tokenが取得できたら、そのtokenをAuthorization: Bearer
に設定し、curlを実行します。
curl -H "Authorization: Bearer $TOKEN" -X 'POST' http://xxxxx.xxx.xx.xx/xxx -H 'accept: application/json' -H 'Content-Type: application/json'
アプリケーションにユーザ認証がある場合は、Proxy-Authorization
を使用して--userでユーザ/パスワードを指定します。
curl -H "Proxy-Authorization: Bearer $TOKEN" --user $USER:$PASS -X 'POST' http://xxxxx.xxx.xx.xx/xxx -H 'accept: application/json' -H 'Content-Type: application/json'
最後に
IAPのマニュアルには、いろいろ記載してありましたが、やってみると2コマンドでIAP超えのcurlは叩けました。
ユーザ認証ありだとProxy-Authorization
にする必要があるというところが少し詰まったところでしたが、他は簡単にできました。
pythonなどのプログラムからのアクセスは、以下のマニュアルにサンプルもありますので、そちらを参考にして頂ければと思います。
chameleonmeme.com/ きっかけは、偶然同じ現場で働いていたエンジニア3人の 「もっと仕事にのめり込んだり、熱中したいよね」という雑談でした。 営業から開発、サービスの提供まですべての工程を自分たちの手で行い、 気の合う仲間と楽しく仕事をすることで熱中するためにチームをスタートしました。
Discussion