クラウドへのセキュアアクセス - クラウドへのセキュアなアクセス
AWS SSO / SSM Session Manager / IAM Identity Center など、ゼロトラストを意識したクラウドインフラへの接続方式。SSH 鍵の直接管理や踏み台サーバーに頼らない運用を実現する。
概念図
実例
AWS SSO でログインし、一時認証情報で操作
aws sso login --profile production
aws s3 ls --profile productionSSM Session Manager で EC2 に接続(SSH 不要)
aws ssm start-session --target i-0123456789abcdef0SSM ポートフォワーディングで RDS に安全に接続
aws ssm start-session --target i-0123456789abcdef0 \
--document-name AWS-StartPortForwardingSession \
--parameters "portNumber=5432,localPortNumber=15432"従来の接続方式の問題点
クラウドインフラへのアクセスに従来の方式を使い続けると、以下のリスクがあります。
| 従来の方式 | リスク |
|---|---|
| SSH 鍵を手動管理 | 鍵の紛失・漏洩・共有。退職者の鍵削除漏れ |
| 踏み台サーバー(Bastion) | 踏み台自体が攻撃対象に。パッチ管理・ログ管理の運用負荷 |
| IAM ユーザーの長期アクセスキー | キーが漏洩すると永続的にアクセス可能。ローテーションが面倒で放置されがち |
| VPN 経由のフルアクセス | ネットワーク内に入れば全リソースにアクセス可能。ゼロトラストに反する |
| IP ホワイトリスト | リモートワークで破綻。固定 IP の維持コストも発生 |
ゼロトラストの原則に基づき、一時的な認証情報 + 最小権限 + 全アクセスの記録 を実現する方式に移行すべきです。
AWS のセキュアアクセス
AWS では IAM Identity Center と SSM Session Manager の組み合わせが推奨されます。
| 機能 | 用途 | メリット |
|---|---|---|
| IAM Identity Center(旧 AWS SSO) | AWS アカウントへのログイン | 一時認証情報を自動発行。IdP(Entra ID 等)と連携し SSO を実現 |
aws sso login |
CLI からのログイン | ブラウザで認証後、一時的なアクセスキーが自動設定される |
| SSM Session Manager | EC2 への接続 | SSH 不要。セキュリティグループで 22 番ポートを開ける必要なし |
| SSM ポートフォワーディング | RDS / ElastiCache 等への接続 | プライベートサブネットの DB にローカルポート経由で安全に接続 |
| EC2 Instance Connect | 短命 SSH 接続 | 60 秒で失効する一時 SSH 公開鍵をプッシュして接続 |
| CloudTrail | 全操作の監査ログ | 誰が・いつ・何をしたかを自動記録 |
# SSO ログイン
aws sso login --profile production
# SSM で EC2 に接続
aws ssm start-session --target i-0123456789abcdef0
# SSM ポートフォワーディングで RDS に接続
aws ssm start-session --target i-0123456789abcdef0 \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["5432"],"localPortNumber":["15432"]}'
# ローカルから RDS に接続
psql -h localhost -p 15432 -U dbuser mydb
Google Cloud のセキュアアクセス
Google Cloud では IAP(Identity-Aware Proxy)を中心としたゼロトラストアクセスが可能です。
| 機能 | 用途 | メリット |
|---|---|---|
| IAP TCP Forwarding | GCE への接続 | SSH 鍵不要。IAP がトンネルを作り、IAM で認可 |
gcloud compute ssh |
GCE への SSH | IAP 経由で接続。OS Login で SSH 鍵を自動管理 |
| OS Login | SSH 鍵管理 | Google アカウントに紐づけ。鍵の配布・回収が不要 |
| Cloud SQL Auth Proxy | Cloud SQL への接続 | IAM 認証でプライベート DB に安全に接続 |
| Workload Identity | GKE からのアクセス | サービスアカウントキーなしで GCP リソースにアクセス |
| Cloud Audit Logs | 監査ログ | 全 API 呼び出しを自動記録 |
# IAP 経由で GCE に SSH
gcloud compute ssh my-instance --tunnel-through-iap
# IAP TCP トンネルでポートフォワーディング
gcloud compute start-iap-tunnel my-instance 5432 \
--local-host-port=localhost:15432
# Cloud SQL Auth Proxy
cloud-sql-proxy my-project:asia-northeast1:my-db \
--port=15432 --auto-iam-authn
Azure のセキュアアクセス
Azure では Entra ID(旧 Azure AD)と Azure Bastion を組み合わせます。
| 機能 | 用途 | メリット |
|---|---|---|
| Azure Bastion | VM への接続 | ブラウザから SSH/RDP。VM にパブリック IP 不要 |
| Entra ID 認証 | Azure リソースへのログイン | az login で一時認証。MFA 対応 |
| Managed Identity | VM / App Service からのアクセス | 認証情報の管理なしで Azure リソースにアクセス |
| Azure Private Link | PaaS へのプライベート接続 | SQL Database 等にインターネットを経由せず接続 |
| Just-In-Time VM Access | VM への一時アクセス | 必要な時だけポートを開放し、時間経過で自動閉鎖 |
| Activity Log | 監査ログ | 全操作を自動記録 |
# Azure CLI ログイン
az login
# Bastion 経由で VM に SSH
az network bastion ssh \
--name my-bastion --resource-group my-rg \
--target-resource-id /subscriptions/.../my-vm \
--auth-type AAD
# SSH トンネルで DB に接続
az network bastion tunnel \
--name my-bastion --resource-group my-rg \
--target-resource-id /subscriptions/.../my-vm \
--resource-port 5432 --port 15432
3 クラウド比較まとめ
| 機能 | AWS | Google Cloud | Azure |
|---|---|---|---|
| SSO / IdP 連携 | IAM Identity Center | Cloud Identity / Workspace | Entra ID |
| CLI ログイン | aws sso login |
gcloud auth login |
az login |
| SSH レス接続 | SSM Session Manager | IAP TCP Forwarding | Azure Bastion |
| DB ポートフォワーディング | SSM ポートフォワーディング | IAP Tunnel / Cloud SQL Auth Proxy | Bastion Tunnel |
| SSH 鍵の自動管理 | EC2 Instance Connect | OS Login | Entra ID 認証 |
| 認証情報なしのワークロード | IAM ロール(EC2, ECS, Lambda) | Workload Identity | Managed Identity |
| 監査ログ | CloudTrail | Cloud Audit Logs | Activity Log |
どのクラウドでも共通する原則は 「長期認証情報を持たない」「SSH 鍵を直接管理しない」「全操作をログに残す」 です。
Cloudflare Tunnel: ポートを開けないリモートアクセス
クラウドの 3 大プロバイダー以外にも、Cloudflare Tunnel(旧 Argo Tunnel) を使えば、サーバー側でインバウンドポートを一切開けずに外部から安全にアクセスできます。
| 特徴 | 説明 |
|---|---|
| ポート開放不要 | サーバーから Cloudflare へアウトバウンド接続するため、ファイアウォールでインバウンドを全閉じにできる |
| SSH / RDP / HTTP 対応 | SSH だけでなく、任意の TCP プロトコルをトンネル経由で転送可能 |
| Cloudflare Access 連携 | IdP(Google, Entra ID, GitHub 等)と連携し、アクセスの認証・認可を Cloudflare 側で実施 |
| 監査ログ | 誰がいつアクセスしたかを Cloudflare ダッシュボードで確認可能 |
| 無料プランあり | 小規模利用なら無料で開始できる |
サーバー側の設定:
# cloudflared をインストール
curl -L https://pkg.cloudflare.com/cloudflared-stable-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
# トンネルを作成
cloudflared tunnel login
cloudflared tunnel create my-server
# SSH 用の設定(config.yml)
tunnel: <TUNNEL_ID>
credentials-file: /root/.cloudflared/<TUNNEL_ID>.json
ingress:
- hostname: ssh.example.com
service: ssh://localhost:22
- service: http_status:404
# トンネルを起動
cloudflared tunnel run my-server
クライアント側の設定(~/.ssh/config):
Host ssh.example.com
ProxyCommand cloudflared access ssh --hostname %h
User myuser
これにより ssh ssh.example.com だけで、ブラウザ認証を経てサーバーに接続できます。
サーバー側で 22 番ポートを外部に公開する必要はありません。
