Google Cloud IAP(Identity-Aware Proxy)を利用したリモートアクセス

## 目的
Google Cloudで稼働中のインスタンスへのリモートアクセス（SSH）を実施する
SSH先のインスタンスはパブリックIPアドレスがないため、IAP経由でリモートアクセスを実現する

## 構成
* ローカル端末：macOS Ventura 13.5 1台
* プラットフォーム:Google Cloud
    * Compute Engine 1サービス(SSHアクセス先)
    * IAP(Identity-Aware Proxy) 1サービス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/eb849bec-aaa4-f8f5-faac-d1c4a039ebec.png)



## 作業の流れ（順不同）
作業1.IAPの設定と権限付与
作業2.IAM権限の付与
作業3.Firewallの設定
作業4.アクセス確認

## IAPの設定と権限付与

IAPのページに移動
![貼り付けた画像_2023_08_10_17_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/d1febcb1-bba1-2932-ec32-c75f780506ec.png)

**APIを有効化する**をクリック
参考:Google Cloud コンソールを使用した IAP の有効化
https://cloud.google.com/iap/docs/enabling-compute-howto?hl=ja#before_you_begin
![貼り付けた画像_2023_08_10_18_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/bb248267-bf93-5e13-fe7a-d34c58e7180f.png)

有効化後の画面から管理画面に移動するため、**IDENTITY-AWARE PROXYに移動**をクリック
![貼り付けた画像_2023_08_14_16_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/c791c76c-adfb-9ada-c3fd-e1f4555229c7.png)

今回はリモートアクセスの制御にIAPを利用するため、**SSHとTCPのリソース**をクリック
![貼り付けた画像_2023_08_14_16_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/aad36473-ec8f-943c-af65-806a3eb133ba.png)

IAPで**リモートアクセスを許可したいインスタンスを選択**し、
アクセス許可の詳細を選択するため、**プリンシパルを追加**をクリック
![貼り付けた画像_2023_08_14_16_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/83c1d070-bff0-6476-2986-9192039e52c3.png)

IAP経由でリモートアクセスを許可するアカウントを記載もしくは、
メンバー（allAuthenticatedUsers等）を選択する
![貼り付けた画像_2023_08_14_16_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/520c7663-e477-3945-e29a-5740a044bb3c.png)

ロールは、**IAP-secured Tunnel User**を選択する
IAP-secured Tunnel User:IAP で保護された VM インスタンスへのアクセス権を付与します。

ロール詳細
参考:IAP で保護されたリソースへのアクセスの管理
https://cloud.google.com/iap/docs/managing-access?hl=ja#roles

![貼り付けた画像_2023_08_14_17_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/3059e84a-e1d9-d118-aaac-c5226abae035.png)


## IAM権限の付与
　GUIコンソールよりIAMの画面に移動
![貼り付けた画像_2023_08_14_17_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/e3cc8439-5ed5-d7c4-0b7e-0a76f62ecc53.png)

**アクセス権の付与**をクリック
![貼り付けた画像_2023_08_14_17_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/28c3b8f0-2af1-c044-5d5b-34a75af41ef7.png)

**ComputeEngineへのアクセスを許可するアカウントを記載**する
続けて、ComputeEngineへのアクセスを許可するため、**Compute OS 管理者ログイン**ロールを選択
`roles/compute.admin`

最後に、**保存**をクリック

ロールの詳細
参考:Compute Engine IAM のロールと権限
https://cloud.google.com/compute/docs/access/iam?hl=ja#before-you-begin

![貼り付けた画像_2023_08_14_17_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/b2e4d495-d51b-5a95-be76-bc8624b6270b.png)


## Firewallの設定
IAPからComputeEngineへの通信を許可する設定をする

　GUIコンソールよりFirewallの画面に移動
![貼り付けた画像_2023_08_14_17_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/2da5c538-6570-3b4a-b2ba-8550143be6ee.png)

現在、ファイアウォールは何も無しの状態のため、通信ができない状態
**ファイアウォールルールを作成**をクリック
![貼り付けた画像_2023_08_14_17_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/0f4427d2-a95e-1477-49c5-e4251c05476d.png)

**名前**：ファイアウォールルールの名前を定義
**説明**：任意
**ログ**：ログを取る場合は、オンにする
**ネットワーク**：環境に応じて指定
**トラフィックの方向**：IAPからVMへの通信を許可するため、**上り**を選択
**一致した時のアクション**：ソースアドレスがIAPだった場合許可とするため、**許可**を選択
**ターゲット**：IAPからのアクセス先を許可するターゲットを選択
![貼り付けた画像_2023_08_14_17_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/6bc5df39-5110-66a9-76a5-1180a71983be.png)

**ソースフィルタ**：IAPのアドレスレンジを記載(固定値：35.235.240.0/20)
**プロトコルとポート**：許可するプロトコル、ポートを記載する。今回はSSH TCP/２２を許可

IAPのネットワークアドレスはこちらに記載されているレンジを利用する
参考:ファイアウォール ルールを作成する
https://cloud.google.com/iap/docs/using-tcp-forwarding?hl=ja#create-firewall-rule

![貼り付けた画像_2023_08_14_17_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703043/90e72f54-3b38-9b9b-6fe8-5898a90594bc.png)

## アクセス確認
gcloudにてSSHアクセスを実施する
参考:Identity-Aware Proxy を使用して Linux VM に接続する
https://cloud.google.com/compute/docs/connect/ssh-using-iap?hl=ja#connect_to_vms

```
user ~ % gcloud compute ssh iap-access-vm1 --tunnel-through-iap
WARNING:  Python 3.5-3.7 will be deprecated on August 8th, 2023. Please use Python version 3.8 and up.

If you have a compatible Python interpreter installed, you can use it by setting
the CLOUDSDK_PYTHON environment variable to point to it.

To increase the performance of the tunnel, consider installing NumPy. For instructions,
please see https://cloud.google.com/iap/docs/using-tcp-forwarding#increasing_the_tcp_upload_bandwidth

Last login: Mon Aug 14 10:33:19 2023 from 35.235.240.1
[user@iap-access-vm1 ~]$ uname -a
Linux iap-access-vm1 3.10.0-1160.95.1.el7.x86_64 #1 SMP Mon Jul 24 13:59:37 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
[user@iap-access-vm1 ~]$
```