はじめに
今までGCEへのSSH接続はAWSでやっているように、対象IPからのSSH接続を許可し、ユーザを払い出し、そこに対するリモート接続を行っていた。
※お客様用のIPを基本的には許可したい、という要件が多く、これを設定する機会がありませんでした
Security Engineerの試験を勉強していることと、当該技術を使う機会があったので、IAPを使ったSSH接続をおさらいする
IAPに関する説明
トップページの記載
記載のとおり「ID とコンテキストを使用して、アプリケーションや VM へのアクセスを保護。」します。
ここでいうIDはCloud IAM を指しており、アプリケーションやVMへのアクセスを保護というのは、IAMのユーザを利用し、そのユーザやVMに対して権限が与えられている場合のみ、TCP転送をするような形になります。
仕組み
イメージとしてはこんな感じで、UserはIAPへHTTPSでアクセスし、IAPから対象まで22ポートで接続します。
ちなみにComputeEngineはExternalIPがなくても可能です。
これを行うために、Userはプロジェクト内のIAM権限が必要で対象の権限を付与する必要があります。
また22ポートで特定のIPアドレスからの許可が必要になるため、FWのポート開放も必要となります。
実際の手順
以下公式の手順です
FW設定
※VMは起動している前提です。
FWのポート開放を行います。
35.235.240.0/20 からの 22ポートの許可を対象インスタンスに対して行います。
IAM設定
「IAP で保護されたトンネル ユーザー」、「Compute インスタンス管理者(v1)」を追加します。
SSH接続
以下の画像にあるような形でSSHを選択し接続します。
補足
- IAM権限の影響か一通り設定してもなかなか接続できませんでした。ただVMを再起動したところ接続することができ、その場合も焦らず再起動してみましょう。
所感
特に難しいこともなく踏み台を利用せずともPrivate環境のインスタンスへ接続することができました。
興味のある内容としてSSHキーはどうなるんだ?と思いましたが、インスタンスのSSH認証鍵箇所に接続時?に一時的なキーが払い出されており(以下参照)、SSHキーの管理部分も不要になり、よりセキュリティ的にも安心できることがわかりました。