VM インスタンスでプロジェクト共通 SSH 鍵を許可

メタデータベースの SSH を使う VM では、プロジェクト共通鍵の必要性を確認し、必要なインスタンスへのアクセスだけを許可してください。

説明

メタデータベースの SSH を使う VM でプロジェクト共通鍵を許可すると、利用者はその VM に個別の鍵を登録しなくても、プロジェクトの鍵でログインできます。すべての VM を必要としない利用者にまでアクセス権を広げないようにしてください。OS Login が有効な VM は、プロジェクトやインスタンスのメタデータにある SSH 鍵をログインに使わないため、まず認証方式を確認してください。

想定される影響

  • プロジェクト共通鍵が漏えいしたり不要なまま残ったりすると、その鍵を受け入れる複数の VM にアクセスされる可能性があります。
  • VM の用途と利用者の役割を区別しない鍵の共有は、侵害の影響を広げ、権限の取り消しを難しくするおそれがあります。

対処方法

  1. メタデータベースの SSH が必要な VM では、block-project-ssh-keys を文字列の TRUE に設定し、必要なインスタンスごとの鍵だけを管理してください。対応する環境では、OS Login と最小権限の IAM も検討してください。
  2. プロジェクト共通鍵を遮断する前に、運用者と自動化処理の代替認証経路を用意し、実際の接続をテストしてください。インスタンスごとの鍵や他のログイン経路は別途確認してください。
  3. google.cloud 1.14.0 の gcp_compute_instance は既存 VM のメタデータを更新しません。既存 VM には対応する Console、gcloud、API のメタデータ変更を使用し、結果を確認してください。

例

新規 VM のメタデータ設定だけを抜粋しています。名前、プロジェクト、マシン、ディスク、認証情報など、その他の入力は省略しています。

変更前

yaml
- name: ssh_keys_unblocked
  google.cloud.gcp_compute_instance:
    metadata:
      block-project-ssh-keys: "FALSE"
    zone: us-central1-a
    auth_kind: serviceaccount

- name: no_metadata
  google.cloud.gcp_compute_instance:
    zone: us-central1-a
    auth_kind: serviceaccount

プロジェクト共通鍵を明示的に許可するか、遮断設定を省略した構成です。実際のアクセスは OS Login の使用状況、鍵、ネットワーク設定によって異なります。

変更後

yaml
- name: ssh_keys_blocked
  google.cloud.gcp_compute_instance:
    metadata:
      block-project-ssh-keys: "TRUE"
    zone: us-central1-a
    auth_kind: serviceaccount

メタデータベースの SSH で、この VM がプロジェクト共通鍵を使わないようにします。プロジェクトの鍵自体を削除したり、インスタンスごとの鍵まで遮断したりするものではありません。既存 VM には別途メタデータの更新が必要です。

参考資料