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

さくらのクラウドのパケットフィルタをCSV形式で保存する

0
Last updated at Posted at 2026-05-22

概要

さくらのクラウドのパケットフィルタルール一覧をCSVで保存したいけど、残念なことにそんな便利なボタンは存在しません。。。

そこで今回はさくらのクラウドで設定されているパケットフィルタのルールを、usacloudjq を使ってCSV形式で保存する手順を紹介します。

パケットフィルタの棚卸し、設定差分の確認、Excelでの確認などを行いたい場合に使えます。

環境

今回の例では以下の環境で実行しています。

# usacloud version
1.14.0 linux/amd64

事前準備

必要なものは以下です。

  • さくらのクラウドのAPIキー
  • usacloud
  • jq

さくらのクラウドAPIキーについては下記を参照してください

usacloud の認証設定

まず、さくらのクラウドのAPIトークンとシークレットを usacloud に設定します。

usacloud config

対話形式で聞かれるので、以下を入力します。

Setting SakuraCloud API Token =>
        Enter token:

ここには、さくらのクラウドの アクセストークン を入力します。

続いて、

Enter secret:

には、アクセストークンシークレット を入力します。

出力形式を聞かれた場合、今回はJSONを使うので json を指定しておくと便利です。

Setting Default Output Type=>
        Enter Default Output Type[table/json/yaml]: json

パケットフィルタ一覧を確認する

まず、パケットフィルタの一覧を確認します。

usacloud packet-filter list --zone=all -o table

出力例です。

+------+--------------+-------------+-------------+------------+----------------------------------+
| Zone |      ID      |    Name     | Description | Expression |          ExpressionHash          |
+------+--------------+-------------+-------------+------------+----------------------------------+
| tk1a | xxxxxxx      | test        | -           | 29         | xxxxxxxxxxx                      |
| tk1a | yyyyyyy      | test_alma   | -           | 29         | yyyyyyyyyyy                      |
| tk1a | zzzzzzz      | test_clone  | -           | 29         | zzzzzzzzzzz                      |
+------+--------------+-------------+-------------+------------+----------------------------------+

この例では、tk1a ゾーンに3つのパケットフィルタがあります。

  • ID: パケットフィルタのID
  • Name: パケットフィルタ名
  • Expression: ルール数
  • ExpressionHash: ルール内容のハッシュ

ExpressionHash が同じものは、ルール内容が同一である可能性があります。

パケットフィルタの詳細をJSONで取得する

対象のパケットフィルタIDを指定して、詳細情報をJSONで取得します。

usacloud packet-filter read xxxxxxx --zone=tk1a -o json

必要に応じてファイルに保存します。

usacloud packet-filter read xxxxxxx --zone=tk1a -o json > packet-filter-test_alma.json

jqでCSV形式に変換する

パケットフィルタのルール本体は、JSON内の Expression 配列に入っています。

以下のコマンドでCSV化できます。

jq -r '
  .Expression
  | sort_by(.DestinationPort, .Protocol, .SourceNetwork, .Description)
  | (["Action","DstPort","Protocol","SourceNetwork","SourcePort","Description"] | @csv),
    (.[] | [
      .Action,
      .DestinationPort,
      .Protocol,
      .SourceNetwork,
      .SourcePort,
      .Description
    ] | @csv)
' packet-filter-test_alma.json > packet-filter-test_alma.csv

これで、以下のようなCSVファイルが作成されます。

"Action","DstPort","Protocol","SourceNetwork","SourcePort","Description"
"allow","80","tcp","","","HTTP"
"allow","443","tcp","","","HTTPS"
"allow","25","tcp","","","SMTP"

usacloudから直接CSVに変換する

JSONファイルを中間保存せず、直接CSVに変換することもできます。

usacloud packet-filter read xxxxxxx --zone=tk1a -o json 2>/dev/null \
  | jq -r '
    .Expression
    | sort_by(.DestinationPort, .Protocol, .SourceNetwork, .Description)
    | (["Action","DstPort","Protocol","SourceNetwork","SourcePort","Description"] | @csv),
      (.[] | [
        .Action,
        .DestinationPort,
        .Protocol,
        .SourceNetwork,
        .SourcePort,
        .Description
      ] | @csv)
  ' > packet-filter-test_alma.csv

ターミナル上で見やすく表示する

CSV保存ではなく、ターミナル上で確認したいだけならTSV形式にして column で整形すると見やすいです。

usacloud packet-filter read xxxxxxx --zone=tk1a -o json 2>/dev/null \
  | jq -r '
    .Expression
    | sort_by(.DestinationPort, .Protocol, .SourceNetwork, .Description)
    | (["Action","DstPort","Protocol","SourceNetwork","SourcePort","Description"] | @tsv),
      (.[] | [
        .Action,
        .DestinationPort,
        .Protocol,
        .SourceNetwork,
        .SourcePort,
        .Description
      ] | @tsv)
  ' | column -t -s $'\t'

複数のパケットフィルタをCSV保存する

複数のパケットフィルタを保存したい場合は、IDごとに実行します。

usacloud packet-filter read xxxxxxx --zone=tk1a -o json > packet-filter-test.json
usacloud packet-filter read yyyyyyy --zone=tk1a -o json > packet-filter-test_alma.json
usacloud packet-filter read zzzzzzz --zone=tk1a -o json > packet-filter-test_clone.json

CSV化します。

for file in packet-filter-*.json; do
  base="${file%.json}"

  jq -r '
    .Expression
    | sort_by(.DestinationPort, .Protocol, .SourceNetwork, .Description)
    | (["Action","DstPort","Protocol","SourceNetwork","SourcePort","Description"] | @csv),
      (.[] | [
        .Action,
        .DestinationPort,
        .Protocol,
        .SourceNetwork,
        .SourcePort,
        .Description
      ] | @csv)
  ' "$file" > "${base}.csv"
done

FAQ

table出力では詳細ルールが見えない

以下のように read -o table を実行しても、概要しか表示されない場合があります。

usacloud packet-filter read xxxxxxx --zone=tk1a -o table

その場合は、-o json または -o yaml を使います。

usacloud packet-filter read xxxxxxx --zone=tk1a -o json

まとめ

(さくらさん、ダウンロードボタンを管理画面に追加してください。)


一応今回やったことのおさらいです。

さくらのクラウドのパケットフィルタをCSV保存するには、以下の流れで対応できます。

usacloud packet-filter list --zone=all -o table

対象のIDを確認します。

usacloud packet-filter read <PACKET_FILTER_ID> --zone=<ZONE> -o json > packet-filter.json

jq でCSV化します。

jq -r '
  .Expression
  | sort_by(.DestinationPort, .Protocol, .SourceNetwork, .Description)
  | (["Action","DstPort","Protocol","SourceNetwork","SourcePort","Description"] | @csv),
    (.[] | [
      .Action,
      .DestinationPort,
      .Protocol,
      .SourceNetwork,
      .SourcePort,
      .Description
    ] | @csv)
' packet-filter.json > packet-filter.csv

パケットフィルタの棚卸しやExcelでの確認を行う場合、この方法でかなり扱いやすくなります。

一例ですがこんな感じのCSVになります。
image.png

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