概要

本記事では、プリンシパル(IAM)に特定のVMインスタンスへのIAP経由でのssh接続を許可する方法を記載しています。詳細は前提をご確認下さい。

前提

設定方法

設定方法は次の2パターンあります。
1つは、Conditionでリソースを絞る方法、もう1つは、リソース(VMインスタンス)に権限を付与する方法になります。
前者をパターン1,後者をパターン2とし、以下に設定方法を紹介いたします。

パターン1.IAM Conditionsでリソースを絞る方法

参考:Conditionsの条件で利用できるリソース一覧

1.OS Loginに必要なロールの「Compute OS (管理者)ログイン」以外をプリンシパルに付与します。

参考:OS Login の IAM ロールを割り当てる
・サービス アカウント ユーザー(roles/iam.serviceAccountUser)
・Compute OS ログインの外部ユーザー(roles/compute.osLoginExternalUser)
※Compute OS ログインの外部ユーザー(roles/compute.osLoginExternalUser)は、組織管理者が組織レベルで付与する権限となります。

2.「Compute OS ログイン(roles/compute.osLogin)」 または 「Compute OS 管理者ログイン(roles/compute.osAdminLogin)」のプリンシパルへの権限追加時に「IAMの条件(省略可)」を追加します。

  • 設定内容

条件タイプ 演算子
名前 = {リソース名}

リソース名(Compute Engine インスタンス ):
projects/{project-id}/zones/{zone-id}/instances/{instance-id}
※リソース毎の値の形式については、こちらに記載があります。

リソース名は任意の文字列が登録可能であるため、入力ミスに注意しましょう。

3.パターン1の最終的なロールの状態

プロジェクトのプリンシパル

ロール 備考
Compute ネットワーク閲覧者 Compute 参照用
IAP で保護されたトンネル ユーザー IAP接続用
サービス アカウント ユーザー OS Login用
Compute OS (管理者)ログイン OS Login用 (条件付き)

組織のプリンシパル

ロール 備考
Compute OS ログインの外部ユーザー OS Login用

パターン2.リソース(VMインスタンス)に権限を付与する方法

1.OS Loginに必要なロールの「Compute OS (管理者)ログイン」以外をプリンシパルに付与します。※パターン1と同様

参考:OS Login の IAM ロールを割り当てる
・サービス アカウント ユーザー(roles/iam.serviceAccountUser)
・Compute OS ログインの外部ユーザー(roles/compute.osLoginExternalUser)
※Compute OS ログインの外部ユーザー(roles/compute.osLoginExternalUser)は、組織管理者が組織レベルで付与する権限となります。

2.VMインスタンスにプリンシパル+権限を追加します。

対象インスタンスのチェックボックスを選択すると権限という項目が表示されるので押下します。

画面が遷移しますので、プリンシパルを追加を選択します。


新しいプリンシパルにsshを許可したいプリンシパルを追加
ロールにroles/compute.osLogin または roles/compute.osAdminLoginを追加します。

3.パターン2の最終的なロールの状態

プロジェクトのプリンシパル

ロール 備考
Compute ネットワーク閲覧者 Compute 参照用
IAP で保護されたトンネル ユーザー IAP接続用
サービス アカウント ユーザー OS Login用

組織のプリンシパル

ロール 備考
Compute OS ログインの外部ユーザー OS Login用

プロジェクトのOS Loginを許可するVMインスタンス 権限

ロール / プリンシパル 備考
Compute OS (管理者)ログイン / 対象ユーザのプリンシパル OS Login用

まとめ

IAP経由でのSSH接続は、IAM権限及び接続対象リソースのセキュリティを高めるために有効です。本記事では、特定のVMインスタンスに対してのみアクセスを許可する2つの設定方法を紹介しました。

VMインスタンスはリソース名の指定に対応しているため問題ありませんが、一部のリソースでは非対応の場合もあります。そのような場合、リソースに直接権限を付与する方法を知っておくと、要件の実装検討時に役立つでしょう。
参考:
リソース名の指定が可能なリソース一覧
許可ポリシーが付与できるリソース一覧

また、権限管理はセンシティブで、構成は複雑な部分がありますので、事前に十分検証を行い、吟味してから実装しましょう。