#Cloud Identity Aware-Proxy とは?
一言で表すと、Google のアカウントを使ってセキュアにリソースに接続できるプロキシサービスです。
###何ができる?
- GCP 上の VM に対して、アクセス制御を行うことができる
- Google アカウントの ID を確認して、制御を行うことができる
- VPN を使用することなく、外部ネットワークからの作業ができる
- ゼロトラストのアクセスモデルを実装できる
##IAP との出会いの経緯
GCP 上の GCE にセキュアに SSH できる方法がないかを探しており、いくつかの候補を出していました。
- GIP を使用して目的のインスタンスへ接続を行う
- GIP を付与した踏み台インスタンスを作成し、踏み台インスタンスを経由して目的のインスタンスへ接続を行う
2 に関しては、公式のドキュメントでも紹介されており、オンプレでの NW 構築を経験していた自分の中ではかなり有力な候補でした。
図にするとこのような感じ↓
GCP のサービスを使用せずに、PrivateサブネットのGIPを持たないインスタンスに接続する場合
しかし、この方法だといくつか面倒なことが
-
鍵の管理が面倒
- GCP のサービスを使用せずに GCE へとアクセスしようとすると、ローカルでの鍵の作成・保管が必要になる
- ローカルで作成した公開鍵を、SSH 先のインスタンスに登録する必要がある
-
GIP 関連
- 固定の GIP を取得する必要がある
- 常に不正にアクセスされるリスクがある
まず、鍵の管理については、 gcloud コマンドを使用したSSH 接続の方法 にて解決しました。
さすがクラウドって感じで、めんどくさい鍵周りの部分をやってくれます。
そして、 GIP を使用しないで SSH できないかと調べていたところ、たどり着いたのが IAP でした。
##IAP で使用した機能
IAP には様々な機能があるのですが、今回の GCE への SSH 接続には、 Cloud IAP TCP Fowarding という機能を使用しました。
###何ができるのか
- トンネルを使用した TCP 接続ができる
###通信のフロー
- TCP のコネクションを IAP を使用して HTTPS でラッピングする
- IAM にて権限を確認する
3. 接続先のリソースの権限
4. IAP トンネルを使用する権限 - VPC に紐づく FW ルールを確認(ネットワークレベル)
6. IAP から リソースへの接続が許可されているか
IAP が踏み台インスタンスの役割をしてくれてるため、インスタンスへ GIP を付与する必要がなくなり、当初考えていた面倒な点を解消することができました。
###一つ気になる点が
確かに IAP を使用することで、GCE へのセキュアな通信を確立することができましたが、1つ気になることが出てきてしまいました。
Google アカウントが漏れたらやりたい放題じゃん...
これを解決するために、Access Context Manager という機能を使用しました。
別の機能になってしまうので詳細な説明は割愛しますが、一言で言うと" IPやデバイスなどの単位で、プロジェクトやリソースへのアクセス制御が行えるサービス "です。
組織単位でポリシーを作成し、プロジェクト単位でポリシーを適用します。
今回の場合は、IP 制限のポリシーを作成し、IAP トンネルを使用する IAM ロールにアタッチして使用しました。
この機能を使用することで、万が一Google アカウントが流出した際も、IPアドレスなどで制御を行うことができ、セーフティーネットを張ることができます。
###最後に
IAP を使用した VM への接続は、今回のような GCE 以外にも、GKE への接続や GAE への接続など、様々な使い方ができる機能なので今後もお世話になりそうです。
私と同じような状況で迷っている方に、この記事が参考になりましたら幸いです。
最後までご覧いただきありがとうございました。