GoogleのCloudFunctionsは、完全サーバレスにて関数を作成することができます。
しかし、CloudFunctionsからの通信元IPアドレスは動的であり、セキュリティを担保できませんでした。元々、VPCという機能はありましたが、新たにServerlessVPCの機能が追加されました。そのため、CloudFunctionsからの通信を同一リージョンのゲートウェイを介して通信が可能となり、CloudNATを組み合わせることによりIPを固定化することができます。これで、FW等でのアクセス制限が可能です。
##構築手順
※Googleアカウントを所持しており、GCPの操作ができることを前提としています※
- ServerlessVPCアクセスにてコネクタを作成する。
- CloudNATにてゲートウェイを作成する。
※同時にクラウドルータを作成 - CloudFunctionsを編集し、コネクタを割り当てる.
###1. ServerlessVPCアクセスにてコネクタを作成
#####1-1. GCPの管理コンソールから、"サーバレスVPCアクセス"を開く.
#####1-2.コネクタを作成する.
- 名前( 適当に決める )
- リージョン( 関数を作成するリージョン )
- ネットワーク( defeult )
- IP範囲( 他と被らないセグメント )
###2. CloudNATにてゲートウェイを作成する
#####2-1. GCPの管理コンソールから、"CloudNAT"を開く.
#####2-2.NATゲートウェイを作成する
- 名前( 適当に決める )
- リージョン( コネクタと同一の場所 )
- ネットワーク( defeult )
- クラウドルータ( ※ここで新規作成して名前だけ決める※ )
- NATIPアドレス( 手動に変更し、IPアドレスを取得する )
###3.CloudFunctionsにてコネクタを適用
#####3-1.CloudFunctionsを作成または編集し、コネクタを適用し、下りのルーティングを変更します。
- 下り設定( 先ほど作成したコネクタを選択 )
- 下り設定( 全てのトラフィックをVPCコネクタ経由でルーティングに変更 )
#####■補足(固定IPアドレスの確認方法)
- ①GCPコンソール上のshell( gcloud compute addresses list )
- ②GCPコンソールの( 外部IPアドレス )
また、DialogFlowからフルフィルメントをDEPLOYすると、CloudFunctionsに関数が追加されますが、リージョンが変更されるように試してみましたが"us-central1"にしかなりませんでした。そのため、DialogFlowからDEPLOYする際は注意が必要です。指定する方法があればコメントお待ちしております。
以上です。