19
0

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.

シーエー・アドバンス Advent Calendar 2022Advent Calendar 2022

Day 14

usacloudでさくらクラウド環境に脆弱性診断環境を構築する

Last updated at Posted at 2022-12-14

はじめに

こんにちは、株式会社シーエー・アドバンス技術統括本部の@sk888です。

今回はさくらクラウドの公認CLIクライアントのusacloudを使用して、コマンド一発でさくらクラウド環境に脆弱性診断環境(BurpSuite実行環境)を構築したり、消したりする事をやってみようと思います。

usacloudとは

オープンソースで開発されているさくらクラウドの公認CLIクライアントです。
さくらクラウド環境の操作を、Web管理画面ではなく手元の環境からCLIで実施できるようになります。
Windows、Linux、macOSで利用可能で、Dockerの実行用イメージもあるようです。


ちょっと古いですが、さくらのナレッジにも記事があります。

やりたいこと

脆弱性診断ではBurpSuiteなどの診断ツールによる自動Scan(ActiveScan)を実施すると思いますが、手元のPCでScanを行っているとCPUやメモリ、ディスクのリソースが割かれますし、最近はコロナの影響によるリモートワークで会社と自宅を行き来する等、会社にScan中のPCを置いたままに出来ないなどの事情がありました。
そんな時に、コマンド一発でクラウド上に自動Scan環境を立てられれば、手元では別の作業も出来るしとても便利だなと思いました。

環境・事前準備

「PC」
windows10 PRO

事前準備として、さくらクラウド環境上にubuntu22.04によるリモートデスクトップ環境を構築し、BurpSuiteなどのツールを導入してアーカイブ化してあります。

また、下記サイトを参考にさくらクラウドWebコンソール上でAPIキーを作成しておく必要が有ります。

usacloud導入

先ずは導入ガイドを参考に手元のPCにusacloudをインストールします。
Windowsはchocolateyでインストール出来ますが、今回はその他の手段として実行用バイナリファイルを使用します。
GitHub ReleasesページからWindows用のZIPファイル「usacloud_windows-amd64.zip」をダウンロードして展開し、任意のフォルダー内に配置します。
配置先のフォルダーを環境変数Pathに追加します。

コマンドプロンプトを起動して、usacloud -vを打つことでバージョン情報を確認出来ます。

>usacloud -v
1.10.2 windows/amd64, build 74947b18

usacloud configコマンドで事前準備で作成したアクセストークン・シークレット等を入力します。
操作対象のゾーンとコマンド実行時のデフォルトの出力形式も入力します。

>usacloud config

  Setting SakuraCloud API Token => 
    Enter token: [アクセストークンを入力]

  Setting SakuraCloud API Secret => 
    Enter secret: [アクセスシークレットを入力]

  Setting SakuraCloud Zone => 
    Enter Zone[tk1a/tk1b/is1a/is1b/tk1v]: [ゾーンを入力]

  Setting Default Output Type => 
    Enter Default Output Type[table/json/yaml]: [デフォルトの出力形式を入力]

  Written your settings to ~\.usacloud\default\config.json

コマンドリファレンス

コマンドについては、日本語ドキュメントのページに基本的な利用方法やリファレンスが載っています。

基本的な構文は下記の様になっていて、各コマンドやオプション、引数の部分で--help or -hを打つことで利用可能なものを確認出来ます。

>usacloud -h
CLI to manage to resources on the SAKURA Cloud

Usage:
  usacloud [global options] <command> <sub-command> [options] [arguments] [flags]
  usacloud [command]

Available Commands:
  completion            Generate completion script
  config                Management commands for Configuration file/Profile
  help                  Help about any command
  iaas                  SubCommands for IaaS
  rest                  Invoke SAKURA cloud API directly
  update-self           Update Usacloud to latest-stable version
  version               Show version info
  web-accelerator       SubCommands for WebAccelerator

Flags:
      --profile string               the name of saved credentials
      --token string                 the API token used when calling SAKURA Cloud API
      --secret string                the API secret used when calling SAKURA Cloud API
      --zones strings                permitted zone names
      --no-color                     disable ANSI color output
      --trace                        enable trace logs for API calling
      --fake                         enable fake API driver
      --fake-store string            path to file store used by the fake API driver
      --process-timeout-sec int      number of seconds before the command execution is timed out
      --argument-match-mode string   how to compare the argument and resource name when identifying the resource to be manipulated  options: [partial/exact]
  -v, --version                      show version info
  -h, --help                         help for usacloud

Use "usacloud [command] --help" for more information about a command.

例えばサーバーに関する操作のusacloud server -hでは起動(boot)や停止(shutdown)、作成(create)や削除(delete)等が有ります。

>usacloud server -h
Usage:
  usacloud server [flags]
  usacloud server [command]

Available Commands:
  boot
  create
  delete
  list
  monitor-cpu
  rdp
  read
  reset
  send-nmi
  shutdown
  ssh
  update
  vnc
  wait-until-ready
  wait-until-shutdown

Flags:
  -h, --help   help for server

Global Flags:
      --profile string               the name of saved credentials
      --token string                 the API token used when calling SAKURA Cloud API
      --secret string                the API secret used when calling SAKURA Cloud API
      --zones strings                permitted zone names
      --no-color                     disable ANSI color output
      --trace                        enable trace logs for API calling
      --fake                         enable fake API driver
      --fake-store string            path to file store used by the fake API driver
      --process-timeout-sec int      number of seconds before the command execution is timed out
      --argument-match-mode string   how to compare the argument and resource name when identifying the resource to be manipulated  options: [partial/exact]
  -v, --version                      show version info

Use "usacloud server [command] --help" for more information about a command.

サーバー作成

それではコマンドでサーバーを作成してみましょう。
作成の際にサーバープランやディスクの容量・タイプ等をオプションで選択していきます。
利用可能なオプションについてはusacloud server create -hで確認出来ます。
作成元のアーカイブのスペックに合わせる形で必須(*required)となっているパラメータについて値を指定しています。
ソースアーカイブの容量にもよると思いますが、大体5分~15分くらいで作成出来ます。

>usacloud server create --name TestScanServer --cpu 4 --memory 16 --commitment standard --generation default --interface-driver virtio --disk-connection virtio --disk-disk-plan ssd --disk-size 250 --disk-source-archive-id 「ディスクソースとなるアーカイブのID」 --disk-edit-host-name TestScanServer --disk-edit-password 「管理ユーザーログインパスワード」 --disk-edit-ip-address 「設定するIPアドレス」 --disk-edit-netmask 24 --disk-edit-gateway 「ゲートウェイIPアドレス」 --network-interface-upstream 「サーバーが接続するスイッチID(スイッチにつなぐ場合)--network-interface-user-ip-address 「設定するIPアドレス」 --zone tk1a

Are you sure you want to create?(y/n) [n]: y
[tk1a] server/create: started...
        [tk1a] server/create: 10s elapsed
        [tk1a] server/create: 20s elapsed
--name
サーバー名

--cpu
仮想コア数

--memory
メモリ容量(単位:GB)

--commitment
プラン選択(通常 or コア占有)

--generation
世代?よく分からないのでdefault

--interface-driver
インターフェイスドライバ(準仮想化のvirtioを使用)

--disk-connection
ディスク接続タイプ(準仮想化のvirtioを使用)

--disk-disk-plan
ディスクタイプ(ssd or hdd)

--disk-size
ディスク容量(単位:GB)

--disk-source-archive-id
作成するサーバーの元にするアーカイブのID
コマンドusacloud archive listでアーカイブIDを確認出来る

--disk-edit-host-name
ディスク修正機能にて変更するホスト名

--disk-edit-password
ディスク修正機能にて変更する管理ユーザーパスワード

--disk-edit-ip-address
ディスク修正機能にて変更するIPアドレス

--disk-edit-netmask
ディスク修正機能にて変更するサブネットマスク

--disk-edit-gateway
ディスク修正機能にて変更するゲートウェイIPアドレス

--network-interface-upstream
ネットワーク接続先(共有セグメント or 接続するスイッチのID or 接続無し)

--network-interface-user-ip-address
ネットワークインターフェースに設定するIPアドレス(OSには反映されない)

--zone
対象ゾーン指定(tk1aは東京第1ゾーン)

しばらく待って作成が完了すると、メッセージと共に作成したサーバーの情報が表示されます。

[tk1a] server/create: done
+------+--------------+----------------+------+-----+--------+-----+--------------------+---------------------+----------------+--------------+
| Zone |      ID      |      Name      | Tags | CPU | Memory | GPU |     IPAddress      | Upstream(Mbps)      | InstanceStatus | InstanceHost |
+------+--------------+----------------+------+-----+--------+-----+--------------------+---------------------+----------------+--------------+
| tk1a | XXXXXXXXXXXX | TestScanServer | -    | 4   | 16     | 0   | XXX.XXX.XXX.XXX/24 | switch/1000         | down           | -            |
+------+--------------+----------------+------+-----+--------+-----+--------------------+---------------------+----------------+--------------+

下記コマンドでもサーバが作成されていることを確認出来ます。
>usacloud server read TestScanServer
+------+--------------+----------------+------+-----+--------+-----+--------------------+---------------------+----------------+--------------+
| Zone |      ID      |      Name      | Tags | CPU | Memory | GPU |     IPAddress      | Upstream(Mbps)      | InstanceStatus | InstanceHost |
+------+--------------+----------------+------+-----+--------+-----+--------------------+---------------------+----------------+--------------+
| tk1a | XXXXXXXXXXXX | TestScanServer | -    | 4   | 16     | 0   | XXX.XXX.XXX.XXX/24 | switch/1000         | down           | -            |
+------+--------------+----------------+------+-----+--------+-----+--------------------+---------------------+----------------+--------------+

下記コマンドでサーバを起動します。
>usacloud server boot TestScanServer

Target resource IDs => [
        [tk1a] XXXXXXXXXXXX
]
Are you sure you want to boot?(y/n) [n]: y
[tk1a] server/boot (ID:XXXXXXXXXXXX): started...
        [tk1a] server/boot (ID:XXXXXXXXXXXX): 10s elapsed
        [tk1a] server/boot (ID:XXXXXXXXXXXX): 20s elapsed
        [tk1a] server/boot (ID:XXXXXXXXXXXX): 30s elapsed
        [tk1a] server/boot (ID:XXXXXXXXXXXX): 40s elapsed
        [tk1a] server/boot (ID:XXXXXXXXXXXX): 50s elapsed


起動したサーバーに対してWindowsのリモートデスクトップで接続します。

事前に用意したアーカイブにてリモートデスクトップトップ設定済みなので、
起動すれば直ぐにつながります。Burpの自動Scan(ActiveScan)実行も問題ありませんでした。

スクリーンショット 2022-12-14 013003.png

サーバー削除

診断で利用した後は、サーバーを削除します。
さくらのクラウドのサーバー料金計算はサーバー起動時間とサーバーに接続しているディスクの利用時間の金額の合計なので(Windowsは別途ライセンス料等も)、
サーバーを落としていてもディスクが存在する限りはディスク料金が発生します。
ただし、従量課金はきめ細かく時間割り・日割り・月額の少ない方が採用されるので、
使わない時はディスクも含めて削除しておくことで、使い方にもよりますが月額料金よりコストを抑える事が出来ます。


まずは起動しているサーバーを停止します。

>usacloud server shutdown TestScanServer

Target resource IDs => [
        [tk1a] XXXXXXXXXXXX
]
Are you sure you want to shutdown?(y/n) [n]: y
[tk1a] server/shutdown (ID:XXXXXXXXXXXX): started...
        [tk1a] server/shutdown (ID:XXXXXXXXXXXX): 10s elapsed
        [tk1a] server/shutdown (ID:XXXXXXXXXXXX): 20s elapsed
        [tk1a] server/shutdown (ID:XXXXXXXXXXXX): 30s elapsed
[tk1a] server/shutdown (ID:XXXXXXXXXXXX): done

停止後、サーバーを削除します。
>usacloud server delete TestScanServer --with-disks

Target resource IDs => [
        [tk1a] XXXXXXXXXXXX
]
Are you sure you want to delete?(y/n) [n]: y
[tk1a] server/delete (ID:XXXXXXXXXXXX): started...
        [tk1a] server/delete (ID:XXXXXXXXXXXX): 10s elapsed
--with-disks
サーバーに接続されているディスクも削除


削除した「TestScanServer」が表示されないことを確認します。
>usacloud server read TestScanServer

target resource not found: query=["TestScanServer"]

これでアーカイブを元にしたサーバーの作成から削除までの一連の作業をコマンドのみで実行する事が出来ました。

最後に

いかがだったでしょうか?
今回はサーバ作成のパラメータについて全部コマンドオプションとして渡していましたが、ドキュメントの基本的な使い方ページに載っている様に、--exampleオプションでJSONファイルを出力して編集し、コマンド実行時に--parametersオプションにJSONファイルを渡す形がいいかと思います。
さくらクラウドでの環境構築については、usacloud以外にも直接APIを利用する形やTerraformなどもありますが、usacloudは導入が簡単でコマンドも直感的に理解しやすい形になっているので手軽に使えて便利だと思いました。

19
0
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
19
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?