IBM Cloud上にWindows Serverの仮想サーバーを作成する

# はじめに
IBM CloudのVPC(Virtual Private Cloud)にWindows Serverの仮想サーバーを作成してみたときのログです。
IBM Cloud上に作成したWindows Serverに対して、作業用のWindows PCからリモートデスクトップで接続するところまでを試してみます。

# 環境情報

作業用のPC: Windows11
IBM Cloud上に作成するWindows Server: Windows Server 2022 

# 事前準備

## 作業用PC上の設定

参考: [Windows インスタンスへの接続](https://cloud.ibm.com/docs/vpc?topic=vpc-vsi_is_connecting_windows&locale=ja)

仮想サーバーを作成する際、Administratorのパスワードが動的に割り当てられるようですが、それを確認するためにIBM CloudのCLI(Command Level Interface)を使えるようにしておく必要があるようです。
そのため、IBM Cloud CLIをセットアップしておきます。


### IBM Cloud CLI

参考: [API 環境と CLI 環境のセットアップ](https://cloud.ibm.com/docs/vpc?topic=vpc-set-up-environment&interface=cli#cli-prerequisites-setup)


PowerShellを管理者として実行

```
PS C:\> iex (New-Object Net.WebClient).DownloadString('https://clis.cloud.ibm.com/install/powershell')
Current platform is Win64. Downloading corresponding IBM Cloud CLI...
Download complete. Executing installer...
Install complete. Please restart to make the modification effective.
```


<details><summary><font color="blue">プラグインの確認</font></summary><div>

```
PS C:\> ibmcloud plugin repo-plugins
すべてのリポジトリーからプラグインを取得しています...

リポジトリー: IBM Cloud
状況                 名前                                            バージョン                     説明
更新が使用可能です   container-registry[cr]                          1.1.0, 1.0.11, 1.0.10...       Manage IBM Cloud Container Registry content and configuration.
未インストール       container-service[kubernetes-service/ks]        1.0.532, 1.0.531, 1.0.528...   Manage IBM Cloud Kubernetes Service clusters
未インストール       cloud-functions[wsk/functions/fn]               1.0.69, 1.0.68, 1.0.67...      Manage Cloud Functions
未インストール       cloud-internet-services[cis]                    1.15.2, 1.14.11, 1.14.9...     Manage Cloud Internet Service
未インストール       dbaas-cli[dbaas]                                2.2.4, 2.2.2, 2.2.1...         Manage Hyper Protect DBaaS clusters
未インストール       cloud-databases[cdb]                            0.16.2, 0.16.1, 0.16.0...      Manage Cloud databases
未インストール       key-protect[kp]                                 0.8.0, 0.7.0, 0.6.12...        Manage encryption keys on IBM Cloud
未インストール       doi[doi]                                        0.4.3, 0.4.2, 0.4.1...         Integrate with DevOps Insights service
未インストール       tke                                             1.3.1, 1.3.0, 1.2.3...         Manage the master key of Cloud HSMs from Hyper Protect Crypto service
未インストール       cloud-object-storage                            1.7.0, 1.6.0, 1.5.0...         Manage Cloud Object Storage service
未インストール       event-streams[es]                               2.4.0, 2.3.2, 2.3.1...         Manage Event Streams service
未インストール       power-iaas[pi]                                  0.4.8, 0.4.6, 0.4.4...         Manage Power Virtual Servers
未インストール       vpc-infrastructure[infrastructure-service/is]   6.16.0, 6.15.0, 6.14.1...      Manage Virtual Private Cloud infrastructure service
未インストール       schematics[sch]                                 1.12.10, 1.12.9, 1.12.8...     Managing IBM Cloud resources with Terraform
未インストール       cloud-dns-services[dns]                         0.7.3, 0.7.2, 0.7.1...         Manage IBM Cloud DNS Services
未インストール       dl-cli[dl]                                      0.5.8, 0.5.7, 0.5.4...         Manage Direct Link
未インストール       watson                                          0.0.11, 0.0.10, 0.0.9...       Manage Watson services
未インストール       catalogs-management                             2.3.5, 2.3.2, 2.3.0...         Manage personal catalogs and offerings
未インストール       tg-cli[tg]                                      0.8.10, 0.8.2, 0.7.1...        Manage Transit Gateway service
未インストール       observe-service                                 1.0.82, 1.0.61, 1.0.54...      Manage logging and monitoring configurations for IBM Cloud Kubernetes Service clusters
未インストール       code-engine[ce]                                 1.45.1, 1.45.0, 1.44.0...      Manage Code Engine components
未インストール       hpvs                                            1.4.24, 1.4.23, 1.4.22...      Manage Hyper Protect Virtual Server service
未インストール       secrets-manager[sm]                             2.0.1, 2.0.0, 0.1.25...        Manage IBM Cloud Secrets Manager secrets and secret groups.
未インストール       app-configuration[ac]                           1.0.12, 1.0.11, 1.0.10...      Interact with IBM Cloud App Configuration service instance
未インストール       monitoring                                      0.2.14, 0.2.13, 0.2.12...      Manage IBM Cloud monitoring
未インストール       logging                                         0.0.8, 0.0.7, 0.0.6...         Manage IBM Cloud logging
未インストール       cloudant[cl]                                    0.0.9, 0.0.8, 0.0.7...         Manage Cloudant service
未インストール       hpcs-cert-mgr[hpcs-cert-mgr]                    1.0.0                          Manage the client certificates for IBM Cloud Hyper Protect Crypto Services
未インストール       atracker[at]                                    0.3.6, 0.3.4, 0.3.3...         Manage IBM Cloud Activity Tracker Event Routing
未インストール       analytics-engine-v3[ae-v3]                      2.4.0, 2.3.0, 2.2.0...         Manage serverless Spark instances and run applications
未インストール       cra[cra]                                        1.3.7, 1.3.6, 1.3.5...         Integrate with Code Risk Analyzer
未インストール       event-notifications[en]                         1.0.1, 1.0.0, 0.2.1...         IBM Cloud Event Notifications.
未インストール       dvaas[watson-query]                             1.0.2                          Manage data virtualization as a service
未インストール       hpnet                                           1.0.2, 1.0.1                   Manage Hyper Protect Secure Network
未インストール       qiskit-runtime[qr]                              0.1.5                          [Beta] Manage Qiskit Runtime
未インストール       hpcs                                            0.0.1                          Manage Hyper Protect Crypto Services Instances
未インストール       cbr                                             1.3.0, 1.2.0, 1.1.0...         Manage Context Based Restrictions
未インストール       privileged-access-gateway[pag]                  1.2.9, 1.2.8, 1.2.6...         Manage Privileged Access Gateway
未インストール       project                                         0.0.11, 0.0.9, 0.0.8...        Manage Infrastructure as Code in IBM Cloud.
未インストール       metrics-router[mr]                              0.0.33, 0.0.31, 0.0.30         Manage IBM Cloud Metrics Routing

C:\Program Files\IBM\Cloud\bin\ibmcloud.exe plugin update PLUGIN_NAME -r REPO_NAME を使用して、リポジトリーからプラグインを更新します。
C:\Program Files\IBM\Cloud\bin\ibmcloud.exe plugin update --all -r REPO_NAME を使用して、リポジトリーからすべての使用可能なプラグインをアップグレードします。

```

</div></details>


VPC CLI プラグイン(vpc-infrastructure)をインストール

```
PS C:\> ibmcloud plugin install vpc-infrastructure
リポジトリー 'IBM Cloud' から 'vpc-infrastructure' を検索しています...
プラグイン 'vpc-infrastructure[infrastructure-service/is] 6.16.0' がリポジトリー 'IBM Cloud' 内で見つかりました
バイナリー・ファイルをダウンロードしようとしています...
 21.69 MiB / 21.69 MiB [======================================================================================================================================================] 100.00% 12s
22744064 バイトがダウンロードされました
バイナリーをインストールしています...
OK
プラグイン 'vpc-infrastructure 6.16.0' は C:\Users\A00527JP6\.bluemix\plugins\vpc-infrastructure に正常にインストールされました。 'C:\Program Files\IBM\Cloud\bin\ibmcloud.exe plugin show vpc-infrastructure' を使用して詳細を表示してください。
```




## IBM Cloud上の設定

### リソース・グループ

参考: [リソースを編成してアクセス権限を割り当てるためのベスト・プラクティス](https://cloud.ibm.com/docs/account?topic=account-account_setup)

VPC上に仮想サーバーやストレージなどを構成する際、それら構成されたリソースに対してアクセス制御を容易に行うために、用途の同じリソースをグループ化して管理することができます。そのグループ化の単位をリソース・グループと呼んでいます。
事前にリソース・グループを作成しておきます。(ここでは詳細は割愛)

### VPC, サブネット

参考: [VPC概要](https://cloud.ibm.com/docs/vpc?topic=vpc-about-vpc)

IBM Cloudには仮想的なプライベート・クラウド環境を提供するVPC(Virtual Private Cloud)と呼ばれる概念があります。これによにサーバー、ストレージなどを論理的に独立した仮想的なサブネット上に構成することができます。
事前にVPC, サブネットを作成しておきます。(ここでは詳細は割愛)

### SSH Key

公開鍵認証のためにキーペアを作成します。

```
C:\temp>ssh-keygen -t rsa -b 4096 -f .\id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in .\id_rsa
Your public key has been saved in .\id_rsa.pub
The key fingerprint is:
SHA256:0hrw7wa2YlK/ZexulFlGVP7L+4FquP2FTCPGYjErnU4 gmx\a00527jp6@IBM-PF3ALW3Q
The key's randomart image is:
+---[RSA 4096]----+
|         ....    |
...
+----[SHA256]-----+

```

秘密鍵: id_rsa,  公開鍵: id_rsa.pub が生成されます。


### ネットワーク構成

作業用PCからIBM Cloud上のVPCへのアクセス方法を決め、それに応じた構成を行います。例えば浮動IPを各仮想サーバーに割り当てて、セキュリティー・グループのルールでアクセス制御をかけるというのが手っ取り早い方法だと思います。(きちんとやるにはVPNの構成やDirect Linkの構成を行うなど適宜要件に応じて考慮してください)

参考:[ネットワーキングについて](https://cloud.ibm.com/docs/vpc?topic=vpc-about-networking-for-vpc&interface=ui)

ここでは浮動IPを割り当てる想定とします。

# 仮想サーバー作成

さて、実際に仮想サーバー(Windows Server)を作成していきます。

## SSH鍵作成

先に作成したおいたSSH Key(公開鍵)を登録しておきます。

IBM Cloudコンソールに入り、VPCインフラストラクチャー - SSH鍵のメニューを選び、「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/53e98edd-c08d-2134-adb7-0ae9109a218d.png)

上で生成したキーペアのうち公開鍵をアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/35cf1df4-7e5a-df09-5d57-e9c8ed76fe77.png)

## 仮想サーバー・インスタンス作成

仮想サーバー・インスタンスの画面から「作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/3339ed41-199d-134b-e682-01e384770a07.png)

オペレーティング・システムとしてWindows Serverを選択し、適当なバージョンを選択します(ここではWindows Server 2022)。その他マシンのプロファイルやストレージなど適宜選択していきます。最終的に右側の「仮想サーバーの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/28e39d3e-5f75-2249-d885-d9683120187f.png)

これで仮想サーバーが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f4e0d236-e5d2-ba60-d73b-75c4ab07516c.png)

## 浮動IPの付与

作成された仮想サーバーのネットワーク・インターフェースの編集アイコンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9cb451d9-2d6a-a22d-f3b0-e7f15f02a934.png)

新規の浮動IPを予約し、適当なセキュリティー・グループに紐づける。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/5d62f60f-9100-09cd-3744-cc8b3da029a3.png)

※リモート・デスクトップ接続する場合、3389番ポートが使用されるため、セキュリティー・グループでインバウンドのポート制御を行う場合、3389番ポートを通すように設定しておく必要があります。
参考: [Windows インスタンスへの接続](https://cloud.ibm.com/docs/vpc?topic=vpc-vsi_is_connecting_windows&locale=ja)

浮動IPがアサインされました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/60da9ac7-789a-ee5e-5904-bde9d50437b9.png)

# 作業用PCからリモートデスクトップでのアクセス

## パスワードの入手
リモート・デスクトップで接続する際に必要な、Administratorのパスワードを入手します。
作業用Windows PCのコマンドプロンプトから、ibmcloudでログインしておきます。
(以下はシングル・サインオンの例)

```
C:\> ibmcloud login -sso
API エンドポイント: https://cloud.ibm.com
リージョン: jp-tok

https://identity-2.ap-north.iam.cloud.ibm.com/identity/passcode からワンタイム・コードを取得して、続行します。
デフォルトのブラウザーで URL を開きますか? [Y/n] > y
ワンタイム・コード >
認証中です...
OK

アカウントを選択:
1. xxxxxx <-> nnnnnnn
2. xxxxxx <-> nnnnnnn
3. xxxxxx <-> nnnnnnn
4. xxxxxx <-> nnnnnnn
5. xxxxxx <-> nnnnnnn
6. xxxxxx <-> nnnnnnn
7. xxxxxx <-> nnnnnnn
数値を入力してください> 4
ターゲットのアカウント xxxxxx <-> nnnnnnn

After 15 September 2023, the CLI will no longer pre-install SoftLayer(sl) commands. To use ibmcloud sl commands, you will need to install the plug-in with 'ibmcloud plugin install sl'. For more information on plug-ins, see https://cloud.ibm.com/docs/cli?topic=cli-plug-ins

API エンドポイント:      https://cloud.ibm.com
Region:                  jp-tok
ユーザー:                xxx@xxx
アカウント:              Ixxxxxx <-> nnnnnnn
リソース・グループ:      リソース・グループがターゲットになっていません。'C:\Program Files\IBM\Cloud\bin\ibmcloud.exe target -g RESOURCE_GROUP' を使用してください
CF API エンドポイント:
組織:
スペース:
```

仮想サーバー・インスタンス情報確認

```
C:\> ibmcloud is instance ezdanalysis01
ユーザー xxx としてアカウント xxxxx の下でインスタンス ezdanalysis01 を取得しています...

ID                               02f7_890a3fd6-2717-4685-80d1-6f34f8f4fe5d
名前                             ezdanalysis01
CRN                              xxx
状況                             running
ホスト障害時の可用性ポリシー     restart
開始可能                         true
プロファイル                     mx2-8x64
アーキテクチャー                 amd64
vCPU メーカー                    intel
vCPU                             8
メモリー (GiB)                   64
帯域幅 (Mbps)                    16000
ボリューム帯域幅 (Mbps)          4000
ネットワーク帯域幅 (Mbps)        12000
ライフサイクルの理由             コード   メッセージ
                                 -        -

ライフサイクルの状態             stable
メタデータ・サービス             有効    プロトコル   応答ホップ限界
                                 false   http         1

イメージ                         ID                                          名前
                                 r022-2a5ae604-c2d6-4450-865c-1571ae7ee889   ibm-windows-server-2022-full-standard-amd64-8

VPC                              ID                                          名前
                                 r022-a9e1fd5d-3911-4cd4-bfb0-032298831d34   vpc01

ゾーン                           jp-tok-2
リソース・グループ               ID                                 名前
                                 07c38a522f014e74aa065dfe2ab7f9af   ISEI20230707-1626-nervous

作成日時                         2023-07-18T14:40:20+09:00
ネットワーク・インターフェース   インターフェース   名前   ID                                          サブネット       サブネット ID                               浮動 IP            セキュリティー・グループ   ソース IP スプーフィングを許可   予約済み IP
                                 1 次               eth0   02f7-8c7fee21-f5f4-4752-b5e2-3f9a94bb0300   sn-20230715-02   02f7-e9aecd6a-ed96-4f1d-9a14-1e3ca1863d74   xxx.xxx.xxx.xxx   secgrp-analysis            false                            xxx.xxx.xxx.xxx

ブート・ボリューム               ID                                          名前                               接続 ID                                     接続名
                                 r022-7bf40953-5442-47cf-95aa-0d021ad03733   ezdanalysis01-boot-1689658631000   02f7-27122b02-17b8-4270-a9d7-831021ab4552   thread-sized-impatient-thicken
```

パスワード取得(上で作成した秘密鍵を指定しています)

```
C:\temp>ibmcloud is instance-initialization-values ezdanalysis01 --private-key @.\id_rsa
ユーザー xxx としてアカウント xxx の下でインスタンス ezdanalysis01 のインスタンス初期設定値を取得しています...

鍵                       ID                                          名前            指紋
                         r022-f19ceab3-884f-4de2-a43f-aefa1b0049ef   ezdanalysis01   SHA256:xxx

暗号化されたパスワード   xxxxxxxxxxxxxxxxxxxx....
暗号鍵 CRN               SHA256:xxxxx....
パスワード               XXXXXXXXXXXXXXXXXX
```

上の最終行の"パスワード"の欄に表示される値がAdministratorのパスワードです。(上の例では大文字の"X"に置き換えています)

## リモート・デスクトップ接続

作業用Windows PCからリモートデスクトップで、VPC上の仮想サーバーに接続してみます。

リモート・デスクトップを開いて、上で割り当てた浮動IPを指定(ここでは、hostsにホスト名設定しているので対応するホスト名を指定しています)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a6a636db-f00f-4c74-d1dc-730ae6326d41.png)

接続
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/2e6e021f-c60a-a57d-83d0-2a9f9c7ee5bf.png)

"別のアカウントを使用する"を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/06808c57-f8db-b640-7b96-281fd03bf742.png)

以下を指定してOK
ユーザー名: ".\Administrator" (先頭に`.\`を指定)
パスワード: 上で取得したパスワード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/321f264a-f850-93e4-d465-063d050813f8.png)

"はい"を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/7d477b3c-4d89-1174-bc96-4712a0712fa3.png)

これでリモートデスクトップ経由で仮想サーバー(Windows Server)に接続できるようになります。

# Windows Server 2022の日本語化

デフォルトではWindows SErverは英語環境で稼働しています。日本語を扱いたい場合は色々と不便なので日本語化の手順を記載しておきます。

## 日本語フィーチャーのインストール
Administratorでリモートデスクトップ接続し、Settingから "Time & Language"を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/279e37ed-9efc-16e2-4f93-414e85005632.png)

languageの画面から "Add a language"をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/99fd6190-dc1e-3a6d-058a-de8e6d06361d.png)

日本語を選択して"Next"
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ead69303-0d0f-7dd8-b71a-fee05ff7e19e.png)

"Install"
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/12387a74-2801-0a75-4e49-791b0190e79b.png)

インストールが完了すると、以下のように一旦サインアウトが促されるので、"Yes, sign out now"をクリックしてサインアウトします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/37e42c29-1e54-8554-b000-ee6f99d6d4b4.png)

再度リモートデスクトップ接続すると、メニューが日本語になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/35094413-24ae-bc76-e0f6-84882bb39c41.png)

## 地域の変更

設定から"時刻と言語"を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/7523ea7a-da31-f7d7-0be0-7a96cd74d1aa.png)

地域の画面で"日本"を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/4554c5f1-7793-47ec-db36-3e4c094de7f9.png)

## 日付と時刻

日付と時刻の画面で、タイムゾーンとして"(UTC+09:00 大阪、札幌、東京"を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/1903e1d5-9e17-5ef4-5a3b-b563327feb9f.png)

## システム・ロケールの設定

言語の画面で、"管理用の言語の設定"をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/524dfa0e-f193-f833-0386-a4fc204ac381.png)

"システム・ロケールの変更"をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/5d95957b-4087-7730-01ec-47ca7ed10a30.png)

"日本語"を選択してOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9a628102-18f8-b1f6-df1d-f8cb6fb7c3c3.png)

Windowsの再起動が促されるので、"今すぐ再起動"をクリックして再起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/00285793-b937-be44-8c72-05d1ff06db45.png)

これで一通り日本語の設定が完了しました。