第3回:Ansible × IAP セキュア接続編
パブリックIPは不要 —— IAPで実現するゼロトラスト Ansible 運用
プロジェクトの論理構造と実現される世界
現代のインフラ設計において、VMにパブリックIPを付与し、SSHポートを公開するのは避けるべき習慣です。
本ステップでは、Google Cloud の Identity-Aware Proxy(IAP)を SSH のトンネルとして活用します。
Ansible をこのトンネル経由で実行することで、インターネットからの直接攻撃を完全に遮断します。
「踏み台サーバー」という運用コストの高い資産を持たずに、安全な構成管理を実現するのが本記事の狙いです。
Ansible の導入と環境分離
Ubuntu 24.04 LTS 等の現代的な環境では、システムの Python 破壊を防ぐために pip の直接利用が制限されています。
本ガイドでは、OSのパッケージ管理システム(apt)を利用して、安定した実行環境を確保します。
[COMMAND]
# Ansible のインストール
sudo apt update
sudo apt install -y ansible
💡 LOGIC: インフラ実行環境としての安定性を重視し、/usr/bin/ansible で管理される構成を採用します。
H2:IAP(Identity-Aware Proxy)経由の接続設定
Ansible が Google Cloud CLI のトンネル機能を自動で利用するように、SSH の動作をカスタマイズします。
STEP1:ansible.cfg の構築
プロジェクトのルートディレクトリに ansible.cfg を作成します。
⚠️ CAUTION: 本構成は、第1回で構築した Google Cloud CLI がインストール・認証済みであること を前提としています。
[PATH] ansible.cfg
[defaults]
inventory = ./inventory.ini
host_key_checking = False
[ssh_connection]
# IAP経由で接続するためのマジックコマンド
ssh_args = -o ProxyCommand="gcloud compute ssh --zone=us-central1-a %h --tunnel-through-iap --dry-run"
💡 LOGIC: ProxyCommand 内で gcloud compute ssh を呼び出すことで、Ansible は透過的に IAP トンネルを利用できます。
STEP2:IAM 権限と OS Login の有効化
IAP経由の SSH を成功させるには、以下の Google Cloud 側の設定が必須です。
-
OS Login の有効化: プロジェクトまたはインスタンスのメタデータで
enable-oslogin: TRUEを設定します。
💡 LOGIC: OS Login を利用することで、IAMとSSHユーザー管理を一元化し、個別の鍵管理を不要にします。 -
IAM権限: 実行ユーザーに
roles/iap.tunnelResourceAccessorおよびroles/compute.osLoginを付与します。 -
Firewall: Google Cloud 側の Firewall で、IAPのIPレンジ(
35.235.240.0/20)からのtcp:22を許可します。
疎通確認(Pingテスト)
実際に、パブリックIPを持たない VM に対して Ansible で接続ができるかテストします。
[COMMAND]
# インベントリファイルの例(VMの名称を直接指定)
# [web_servers]
# my-secure-vm
ansible web_servers -m ping
-
合格:
SUCCESS => {"changed": false, "ping": "pong"} - 地雷ポイント: 認証エラーが出る場合は、OS Login の権限が正しく反映されているか再確認してください。
セクションサマリー(Machine-readable summary)
purpose: AnsibleとIAPを統合したセキュアな構成管理環境の構築
target: セキュリティ要件の厳しい実務環境のエンジニア
used_services:
- Ansible v2.x
- Google Cloud IAP (Identity-Aware Proxy)
- Compute Engine (OS Login)
reference_urls:
- https://cloud.google.com/compute/docs/oslogin?hl=ja
risk_notes: OS Login が有効でない場合、SSH鍵の不一致により接続に失敗するため注意
[Source: https://cloud.google.com/iap/docs/using-tcp-forwarding?hl=ja]
次回は、本連載の総括です。Google Cloud 無料枠を使い倒すための、コスト最適化チェックリストをお届けします。
