概要
本記事では、プリンシパル(IAM)に特定のVMインスタンスへのIAP経由でのssh接続を許可する方法を記載しています。詳細は前提をご確認下さい。
前提
- VMインスタンスへのIAP経由でのssh接続の内容になります。IAPでの接続に必要な「IAP で保護されたトンネル ユーザー(roles/iap.tunnelResourceAccessor)」の権限が必要です。
- また、IAPでの接続に必要なファイアウォールルールの設定が必要です。
- インスタンスへのSSH接続には、①OSLoginと②メタデータを利用したログインの2つのケースがあり、①OS Loginを利用するケースを扱います。
- OS Loginにはsudo可能なCompute OSログイン管理者と、一般ユーザ用のCompute OSログインのロールがあり、ロールでsudo可否の制御を行います。
- プリンシパルは組織外のユーザを想定しています。※組織内のユーザである場合は、Compute OS ログインの外部ユーザー(roles/compute.osLoginExternalUser)の権限付与は不要です。
- VMインスタンスのメタデータにより、OS Loginの設定の有効化が必要です。
- コンソールからのssh接続オペレーションを想定している場合、参照権限(roles/compute.networkViewer)の付与が必要です。
設定方法
設定方法は次の2パターンあります。
1つは、Conditionでリソースを絞る方法、もう1つは、リソース(VMインスタンス)に権限を付与する方法になります。
前者をパターン1,後者をパターン2とし、以下に設定方法を紹介いたします。
パターン1.IAM 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インスタンスはリソース名の指定に対応しているため問題ありませんが、一部のリソースでは非対応の場合もあります。そのような場合、リソースに直接権限を付与する方法を知っておくと、要件の実装検討時に役立つでしょう。
参考:
リソース名の指定が可能なリソース一覧
許可ポリシーが付与できるリソース一覧
また、権限管理はセンシティブで、構成は複雑な部分がありますので、事前に十分検証を行い、吟味してから実装しましょう。