2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Cloud Workstationsを踏み台サーバとして使ってみよう(前編)

Last updated at Posted at 2023-07-18

はじめに

2023年5月にGoogle CloudのCloud WorkstationsがGAとなりました。クラウド上のマネージドなIDEとして注目を集めていますが、踏み台サーバとしても利用できるのではないでしょうか。従来、踏み台サーバはVMを立てて用意してきました。Cloud Workstationsを使えば、マネージドな踏み台サーバとして利用でき、管理や構築の負担の低下、そしてコストの低下も期待できるかもしれません。このブログでは、それらの可能性を見ていきます。

対象読者

企業向けにクラウドを利用しているなど、セキュリティが求められるクラウドを担当している方を想定しています。

結論

Cloud Workstationsを踏み台サーバとして利用することができます。従来のVMサーバで踏み台サーバを構成していた課題に対しては、管理や構築の負担は下がります。しかし、コストはケースバイケースで上下します。そのため、コストについてTCOの観点も含めて利用ケースに合うことを確認してから利用を検討しましょう。

目次

  1. 踏み台サーバの必要性と管理負担の課題
  2. Cloud Workstationsを踏み台サーバとして使ってみる
  3. 後編へつづく

1. 踏み台サーバの必要性と管理負担の課題

セキュリティ要件の高いシステムでは、データベースなど、外部接続させないサーバの構築やメンテナンスに踏み台サーバが必要になりますね。Google Cloudでは、GCE、GKE、Cloud SQLをVPC上にプライベートに配置した場合(Public IPを付与しない場合)に踏み台サーバが必要になります。
bastion_server_image.png
具体的には次のような操作を行うための操作元として必要になります。

操作対象 操作内容
プライベートなGCE VM上のアプリやパッケージなどの操作
プライベートなGKE kubectlによるK8Sの操作
プライベートなCloud SQL SQL接続しテーブル作成、データ投入などの操作

クラウドサービスは日々便利に進化しており、より管理負担が少なく、コストも抑えたマネージドサービスやサーバーレスを使ったクラウドネイティブな活用が進んでいます。そのような状況で、踏み台サーバは依然としてVMで用意する必要があったため、OS管理の負担コスト削減の頭打ち、そして、安全なアクセス管理を用意する負担から解放されないでいたと思います。Cloud Workstationsをマネージドな踏み台サーバとして利用することができれば、これらの負担から解放されることが期待できそうです。

2. CloudWorkstationsを踏み台として使ってみる

まず最初に、そもそもCloud Workstationsが踏み台サーバとして使えるのか検証してみましょう。今回は、プライベートなCloud SQLへsql接続するための踏み台サーバをCloud Workstationsで用意してみます(ここでは、Cloud SQLのデータベースエンジンにMySQLを選択します)。
Workstation_cloudsql.png

2.1. カスタムコンテナイメージの作成

Workstation用にデフォルトで用意されているコンテナイメージには、MySQLクライアントが入っていません。そのため、デフォルトのイメージをベースに、MySQLクライアントをインストールしたカスタムコンテナイメージを作成します。作り方はとても簡単です。

2.1.1. Artifact Registryを用意

まず、Cloud Workstationsで使うカスタムイメージを登録するためのArtifact Registryを用意します。

Artifact Registryの形式はDockerを選んで作成します。このブログでは以下のコマンドで作成しています(参考元)。

Artifact Registryを作成
gcloud artifacts repositories create cloud-workstations-customized-image-repo \
    --repository-format=docker \
    --location=asia-northeast1 \
    --async

出来上がったArtifact Registry
001.PNG

2.1.2. Dockerfileを作成

次の内容で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コマンド書式 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イメージの登録
# docker push [ターゲットイメージのパス:タグ] 
docker push asia-northeast1-docker.pkg.dev/t004-cloudworkstations-trial/cloud-workstations-customized-image-repo/ws-bastion-server:latest

登録されたDockerイメージ
workstation_artifactregistry.PNG

2.2. Workstation Clusterの作成

ここからWorkstationを作って行きます。コンソール画面とコマンドのどちらからも作ることができますが、今回はコマンドで作成します(コマンドリファレンス)。最初にWorkstation Clusterを作成します。これは、Workstationの土台になるもので、リージョン、ネットワーク、パブリック/プライベートなどを選択して作成します。ここでは、今回の目的「踏み台としてCloud SQLにアクセスする」に絞って作成します(ネットワークはデフォルトのVPCとサブネット、Workstationへのアクセスはパブリックにします)。
※20分程度作成に時間がかかります

Workstation Clusterの作成
gcloud workstations clusters create bastion-ws-cluster --region=asia-northeast1

出来上がったWorkstation Cluster
workstation_cluster.PNG

2.3. Workstation Configurationの作成

続いて、Workstation Configurationを作ります。ConfigurationはWorkstationのテンプレートです。WorkstationはマネージドなVM上で稼働するコンテナとして提供されます。Configurationは、そのVMの設定、コンテナイメージの指定などを行います。こちらも今回の目的にそって必要なオプションのみ設定します。

Workstation Configurationの作成
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
workstation_configuration.PNG

2.4. カスタムイメージへのアクセス権を付与

Cloud WorkstationsのConfigurationに対してカスタムイメージへのアクセス権を付与します。Configurationにサービスアカウントが設定されています。デフォルトではservice-[プロジェクト番号]@gcp-sa-workstationsvm.iam.gserviceaccount.comというアカウントです。任意で変更できるため、用途に応じたサービスアカウントを作り、Workstationの権限を管理することができます。今回はデフォルトのアカウントを使います。
workstation_configuration_serviceaccount_02.PNG

カスタムイメージを配置したArtifact Registryのレポジトリで、Workstationのサービスアカウントに対して読み取り権限を設定します。

Artifact RegistryのIAM設定
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'

権限付与したArtifactRegistry
workstation_artifactregistry_authentication_02.PNG

2.5. Workstationの作成

最後にWorkstationを作成して起動します。

Workstationの作成
gcloud workstations create \
    bastion-ws --region \
    asia-northeast1 --cluster \
    bastion-ws-cluster --config \
    bastion-ws-config

出来上がったWorkstation
workstation.PNG
「START」をクリックしてWorkStationを起動します。

2.6. WorkstationからCloud SQLへアクセス

Workstationが起動したらLaunchをクリックし、Workstationへブラウザでアクセスします(gcloudコマンドを使ってsshで接続もできます)。
workstation_launch.PNG

Workstationへ接続したらターミナルを開きます。
workstation_terminal_02.PNG

カスタムイメージで作られたコンテナなので、mysqlクライアントが入っています。Cloud SQLのPrivate IPを確認して接続します。
workstation_mysql_03.PNG
Cloud SQLのデータベースに接続できました。今回はプライベートなCloud SQLへの接続を検証しましたが、同じ要領でプライベートなGCE、プライベートなGKEにもVPCネットワークの中でプライベートに接続することができます。

3. 後編へつづく

前編では、Cloud Workstationsを踏み台サーバとして利用できることが分かりました。後編では、VMで踏み台サーバを構成していた時の課題が解決されるかを見ていきます。

「Cloud Workstationsを踏み台サーバとしても使ってみよう(後編)」へのリンク

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?