はじめに
2023年5月にGoogle CloudのCloud WorkstationsがGAとなりました。クラウド上のマネージドなIDEとして注目を集めていますが、踏み台サーバとしても利用できるのではないでしょうか。従来、踏み台サーバはVMを立てて用意してきました。Cloud Workstationsを使えば、マネージドな踏み台サーバとして利用でき、管理や構築の負担の低下、そしてコストの低下も期待できるかもしれません。このブログでは、それらの可能性を見ていきます。
対象読者
企業向けにクラウドを利用しているなど、セキュリティが求められるクラウドを担当している方を想定しています。
結論
Cloud Workstationsを踏み台サーバとして利用することができます。従来のVMサーバで踏み台サーバを構成していた課題に対しては、管理や構築の負担は下がります。しかし、コストはケースバイケースで上下します。そのため、コストについてTCOの観点も含めて利用ケースに合うことを確認してから利用を検討しましょう。
目次
1. 踏み台サーバの必要性と管理負担の課題
セキュリティ要件の高いシステムでは、データベースなど、外部接続させないサーバの構築やメンテナンスに踏み台サーバが必要になりますね。Google Cloudでは、GCE、GKE、Cloud SQLをVPC上にプライベートに配置した場合(Public IPを付与しない場合)に踏み台サーバが必要になります。
具体的には次のような操作を行うための操作元として必要になります。
操作対象 | 操作内容 |
---|---|
プライベートなGCE | VM上のアプリやパッケージなどの操作 |
プライベートなGKE | kubectlによるK8Sの操作 |
プライベートなCloud SQL | SQL接続しテーブル作成、データ投入などの操作 |
クラウドサービスは日々便利に進化しており、より管理負担が少なく、コストも抑えたマネージドサービスやサーバーレスを使ったクラウドネイティブな活用が進んでいます。そのような状況で、踏み台サーバは依然としてVMで用意する必要があったため、OS管理の負担、コスト削減の頭打ち、そして、安全なアクセス管理を用意する負担から解放されないでいたと思います。Cloud Workstationsをマネージドな踏み台サーバとして利用することができれば、これらの負担から解放されることが期待できそうです。
2. CloudWorkstationsを踏み台として使ってみる
まず最初に、そもそもCloud Workstationsが踏み台サーバとして使えるのか検証してみましょう。今回は、プライベートなCloud SQLへsql接続するための踏み台サーバをCloud Workstationsで用意してみます(ここでは、Cloud SQLのデータベースエンジンにMySQLを選択します)。
2.1. カスタムコンテナイメージの作成
Workstation用にデフォルトで用意されているコンテナイメージには、MySQLクライアントが入っていません。そのため、デフォルトのイメージをベースに、MySQLクライアントをインストールしたカスタムコンテナイメージを作成します。作り方はとても簡単です。
2.1.1. Artifact Registryを用意
まず、Cloud Workstationsで使うカスタムイメージを登録するためのArtifact Registryを用意します。
Artifact Registryの形式はDockerを選んで作成します。このブログでは以下のコマンドで作成しています(参考元)。
gcloud artifacts repositories create cloud-workstations-customized-image-repo \
--repository-format=docker \
--location=asia-northeast1 \
--async
2.1.2. Dockerfileを作成
次の内容でDockerfileを作成します。
FROM us-central1-docker.pkg.dev/cloud-workstations-images/predefined/code-oss:latest
RUN apt update && apt install -y \
mariadb-client-core-10.3 \
&& rm -rf /var/lib/apt/lists/*
ベースイメージは、Google Cloudで事前構成されたベースイメージから、Cloud Workstationsのデフォルトイメージを選択しています。ベースイメージのあとに、MySQLクライアントを追加でインストールしています。
2.1.3. Dockerイメージを作成
Dockerファイルを置いている場所で、作成したArtifact Registryに対するターゲットイメージパスを指定し、docker buildを実行してイメージを作成します(参考元)。
# dockerコマンド書式 docker build [Dockerファイルを配置したフォルダ] -t [ターゲットイメージのパス:タグ]
docker build . -t asia-northeast1-docker.pkg.dev/t004-cloudworkstations-trial/cloud-workstations-customized-image-repo/ws-bastion-server:latest
2.1.4. Dockerイメージを登録
作成したDockerイメージをArtifact Registryへプッシュします(プッシュする前にArtifact Registryに対するdockerの認証設定をしています(詳細はこちら))。
# docker push [ターゲットイメージのパス:タグ]
docker push asia-northeast1-docker.pkg.dev/t004-cloudworkstations-trial/cloud-workstations-customized-image-repo/ws-bastion-server:latest
2.2. Workstation Clusterの作成
ここからWorkstationを作って行きます。コンソール画面とコマンドのどちらからも作ることができますが、今回はコマンドで作成します(コマンドリファレンス)。最初にWorkstation Clusterを作成します。これは、Workstationの土台になるもので、リージョン、ネットワーク、パブリック/プライベートなどを選択して作成します。ここでは、今回の目的「踏み台としてCloud SQLにアクセスする」に絞って作成します(ネットワークはデフォルトのVPCとサブネット、Workstationへのアクセスはパブリックにします)。
※20分程度作成に時間がかかります
gcloud workstations clusters create bastion-ws-cluster --region=asia-northeast1
2.3. Workstation Configurationの作成
続いて、Workstation Configurationを作ります。ConfigurationはWorkstationのテンプレートです。WorkstationはマネージドなVM上で稼働するコンテナとして提供されます。Configurationは、そのVMの設定、コンテナイメージの指定などを行います。こちらも今回の目的にそって必要なオプションのみ設定します。
gcloud workstations configs \
create bastion-ws-config \
--machine-type e2-standard-2 \
--region asia-northeast1 \
--cluster bastion-ws-cluster \
--container-custom-image \
asia-northeast1-docker.pkg.dev/t004-cloudworkstations-trial/cloud-workstations-customized-image-repo/ws-bastion-server:latest
出来上がったWorkstation Configuration
2.4. カスタムイメージへのアクセス権を付与
Cloud WorkstationsのConfigurationに対してカスタムイメージへのアクセス権を付与します。Configurationにサービスアカウントが設定されています。デフォルトではservice-[プロジェクト番号]@gcp-sa-workstationsvm.iam.gserviceaccount.comというアカウントです。任意で変更できるため、用途に応じたサービスアカウントを作り、Workstationの権限を管理することができます。今回はデフォルトのアカウントを使います。
カスタムイメージを配置したArtifact Registryのレポジトリで、Workstationのサービスアカウントに対して読み取り権限を設定します。
gcloud artifacts repositories add-iam-policy-binding \
cloud-workstations-customized-image-repo \
--location='asia-northeast1' \
--member='serviceAccount:service-888620181761@gcp-sa-workstationsvm.iam.gserviceaccount.com' \
--role='roles/artifactregistry.reader'
2.5. Workstationの作成
最後にWorkstationを作成して起動します。
gcloud workstations create \
bastion-ws --region \
asia-northeast1 --cluster \
bastion-ws-cluster --config \
bastion-ws-config
出来上がったWorkstation
「START」をクリックしてWorkStationを起動します。
2.6. WorkstationからCloud SQLへアクセス
Workstationが起動したらLaunchをクリックし、Workstationへブラウザでアクセスします(gcloudコマンドを使ってsshで接続もできます)。
カスタムイメージで作られたコンテナなので、mysqlクライアントが入っています。Cloud SQLのPrivate IPを確認して接続します。
Cloud SQLのデータベースに接続できました。今回はプライベートなCloud SQLへの接続を検証しましたが、同じ要領でプライベートなGCE、プライベートなGKEにもVPCネットワークの中でプライベートに接続することができます。
3. 後編へつづく
前編では、Cloud Workstationsを踏み台サーバとして利用できることが分かりました。後編では、VMで踏み台サーバを構成していた時の課題が解決されるかを見ていきます。