Secure Steady
クラウドへのセキュアアクセス - クラウドへのセキュアなアクセス の使い方・オプション・サンプル

クラウドへのセキュアアクセス - クラウドへのセキュアなアクセス

AWS SSO / SSM Session Manager / IAM Identity Center など、ゼロトラストを意識したクラウドインフラへの接続方式。SSH 鍵の直接管理や踏み台サーバーに頼らない運用を実現する。

概念図

クラウドへのセキュアなアクセス diagram

実例

AWS SSO でログインし、一時認証情報で操作

bash
aws sso login --profile production
aws s3 ls --profile production

SSM Session Manager で EC2 に接続(SSH 不要)

bash
aws ssm start-session --target i-0123456789abcdef0

SSM ポートフォワーディングで RDS に安全に接続

bash
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 番ポートを外部に公開する必要はありません。

関連トピック