【OCI】OCI_CLIでセキュリティ・リストの複数ルール設定をする

OCI_CLIでSLルールを設定する ITエンジニア(インフラ)
スポンサーリンク

OCI(Oracle Cloud Infrastructure)で、セキュリティ・リスト(Security List)へのイングレス・ルール設定をCUI(OCI CLI)を使用して設定する方法について記載します。


スポンサーリンク

やりたい事:セキュリティ・リスト(SL)への複数ルール設定をCLI(コマンド)で一括で実行したい

セキュリティ・リストへのルール追加は、OCIコンソール画面(GUI)から、マウスでポチポチすることで、ルール追加が可能ですが、


10個、20個あるルールを、GUIでマウスで1つ1つポチポチ設定をしていくのは、なかなか大変です。また、設定ミスが発生する可能性も出てきます。

OCI イングレスルールの追加
OCIコンソール:セキュリティ・リストへのルール追加(GUI)


なので、CUI(コマンド)で、複数のルールを一括で、かつ正確にルールを入れられないものか?


調べてみた所、OCI_CLIを使用したCUI操作で、セキュリティ・リストへの一括ルール設定が可能
でしたので、下記に設定の手順を記載します。

▼この記事に記載していること

①OCIコンソールから、OCI_CLIを起動する 
②セキュリティ・リストへ追加したいイングレスルールを記述したconfigファイル(json形式) を作成する
③OCI_CLIで、②で作成したjsonファイルをINPUTに、セキュリティ・リストのルール更新コマンドを実行する

【注意事項】
・ルールの「追加」ではなく「更新」のため、既存のルールは削除される(本記事最下部の注意事項を参照)
・本記事のOCI_CLIコマンドでは、「セキュリティリスト」への「イングレスルール」の「更新」のみ対応

スポンサーリンク

手順1:Cloud shellを起動する

まず、Cloud Shellを起動します。

OCI CloudShellの起動
CloudShellの起動ボタン

OCIコンソールへログインした後、画面右上のアイコンから、「Cloud shell」を起動して下さい。

OCI CloudShellの起動
CloudShell起動画面(1)

すると、コンソール上でCUI画面が表示されます。


OCI CloudShell
CloudShell起動画面(2)

Linuxのようにコマンドが打てます。

スポンサーリンク

手順2:追加したいイングレスルールのjsonファイルを作成

次に、セキュリティ・リストへ追加したいイングレスルールを、「jsonファイル形式」で記述し、OCI_CLI上にJSONファイルを作成します。

手順2-1:JSONへ記述するconfigファイルの中身を用意(テキストエディタ)

記述するコンフィグを用意しましょう。(テキストエディタへコピペでOK)
下記に、OCI_CLIで追加するルール例と、config例を記載します。

▼追加したいテスト用ルール(例)
ステートレス:いいえ
ソース:192.168.1.1/32
IPプロトコル:TCP
ソース・ポート範囲:ALL
宛先ポート範囲:1
説明:テストイングレスルール1


上記、テスト用ルールのconfig(json形式)は下記となります。

※下記をそのままテキストエディタへコピー&ペーストでOKです。

{
"ingress-security-rules": [
  {
  "description":"テストイングレスルール1",
  "isStateless": false,
  "protocol": "6",
  "source": "192.168.1.1/32",
  "tcpOptions": {
  "destinationPortRange": {
    "max": 1,
    "min": 1
     }
   }
  }
 ]
}

手順2-2:OCI_CLI上へ、JSONファイルを作成をする

JSONのconfigをテキストエディタで用意したら、OCI_CLI上でJSONファイルを作成します。

▼jsonファイルの作成:OCI_CLIでの手順例
(test.jsonというファイル名で作成する場合)

・2-1で準備したconfigを全てコピー
・vi test.json コマンド押下 (OCI_CLI)
>>vi上の操作 
・「i」を押下してINSERTモードへ(画面下部が–INSERT–となっている事を確認)
・「CTRL+Vキー」を押下してペースト
・「ESC」キーを押下してINSERTモードを離脱
・「:wq」キーを入力し、「Enterキー」で内容を保存し、viを終了する
>>vi操作終了
・cat test.json コマンドでjsonファイルを確認 (OCI_CLI)

OCI CloudShell
OCI_CLI上でのコマンド操作例(1)


OCI CloudShell
viエディタ操作画面(1)
OCI CloudShell
viエディタ操作画面(2)「手順2-1」で準備したconfigの中身をコピー&ペーストして貼り付け


OCI CloudShell
OCI_CLI上でのコマンド操作例(2)

手順3:セキュリティ・リストのルール更新コマンドを押下(OCI_CLI)

OCI_CLI上にJSONファイルを作成したら、下記のコマンドを押下し、
作成したJSONファイルをINPUTとして、指定のセキュリティリストのルール更新を実行します。

▼セキュリティ・リストのルール更新コマンド

oci network security-list update --security-list-id [OCID] --from-json file://./test.json

・OCI_CLI上で、カレントディレクトリ下にある[test.json]ファイルをINPUTとする場合のコマンド例です。
・[OCID]部分には、対象のセキュリティ・リストのOCIDを入力するため、OCIDを取得します。

手順3-1:対象セキュリティリストのOCIDの取得

ルールを設定したい対象セキュリティリストのOCIDをコピーします。

OCI セキュリティリスト OCID
セキュリティ・リストからOCI IDをコピー

ルール追加する対象のセキュリティ・リストの詳細画面を開き、OCID横のコピーをクリックしてコピーします。
コピーをしたら、セキュリティ・リストのルール更新コマンドの[OCID]部分に置き換えて、コマンドを完成させます。

手順3-2:OCI_CLI上で、ルール更新コマンドを押下

手順3-1で作成したルール更新コマンドを、OCI_CLI上にコピー&ペーストし、張り付けてEnterキーを押下します。

OCI_CLI セキュリティルール更新
OCI_CLI ルール更新コマンド操作画面(1) ※OCIDはマスクしています



下記のようにWARNINGメッセージが出力されますので、「y」を入力し、Enterキーを押下します
(メッセージ内容要約:イングレス、エグレスルールを更新すると、既存の値が置き換えられます。続行してもよろしいですか?)

OCI_CLI セキュリティルール更新
OCI_CLI ルール更新コマンド操作画面(2)


ルール更新が成功すると、下記のように実行結果が出力されます。

OCI_CLI セキュリティルール更新
OCI_CLI ルール更新コマンド操作画面(3)


OCIコンソールからセキュリティリストの詳細を確認すると、イングレスルールが追加されている事が確認できます。

OCI セキュリティリスト イングレスルール追加
OCIコンソール:セキュリティ・リストの詳細画面(1)

応用①:UDPやICMPのイングレスルールを追加する場合(JSON)

上記の例では、TCPのイングレスルール追加の例でしたが、UDPやICMPも追加が可能です。
UDPやICMPを追加する場合のJSON記述例を記載します。

▼UDP

{
"ingress-security-rules": [
{
  "description":"UDPルールテスト",
  "isStateless": false,
  "protocol": "17",
  "source": "192.168.1.2/32",
  "udpOptions": {
  "destinationPortRange": {
    "max": 80,
    "min": 80
     }
   }
}
]
}

【特徴】
・”protocol”は17にする
・”udpOptions”にする
あとは、TCPと基本的に同じです。

▼ICMP

{
"ingress-security-rules": [  
{
  "description":"ICMPテスト",
  "isStateless": false,
  "protocol": "1",
  "source": "192.168.1.1/32",
  "icmpOptions": {
    "code": 1,
    "type": 1
   }
}
]
}

【特徴】
・”protocol”は1にする
・”icmpOptions”にする
・”code”と”type”にする
・コード下部の「}」が一つ少ない(「 “destinationPortRange”: {部分が無くなる為」)

あとは、TCPと基本的に同じです。


応用②:複数のルールを設定する場合(JSON)

2つ以上のルールを一度に設定する場合は、下記の様にJSONコードを作成します。

▼複数ルールのJSONコード例(TCP,UDP,ICMP)

{
"ingress-security-rules": [
  {
  "description":"TCPテスト",
  "isStateless": false,
  "protocol": "6",
  "source": "192.168.1.1/32",
  "tcpOptions": {
  "destinationPortRange": {
    "max": 443,
    "min": 443
     }
   }
},
  {
  "description":"ICMPテスト",
  "isStateless": false,
  "protocol": "1",
  "source": "192.168.1.1/32",
  "icmpOptions": {
    "code": 1,
    "type": 1
   }
},
   {
  "description":"UDPテスト",
  "isStateless": false,
  "protocol": "17",
  "source": "192.168.1.2/32",
  "udpOptions": {
  "destinationPortRange": {
    "max": 80,
    "min": 80
     }
   }
}
]
}

【複数コード作成時の注意点】
・先頭に{“ingress-security-rules”: [ を記載する
・データとデータの接続部分に、, を記載する
・末尾に]} を記載する

JSONコードは、1文字でも記述に間違いがあると、エラーとなり処理がされません。

※「JSON チェック」と検索すると、JSONの構文がチェックできるWEBサイトが公開されています。
WEBサイトへJSONを張り付ける事で構文がおかしくないかチェックができます。

上記のコード例では3つのルールですが、JSONコードを追加していけば、3つ以上のルールも一括設定可能です。

応用③:TCP,UDPポートの範囲指定等の記述方法など

筆者が検証が出来ている項目を記載します。

・ポート1000-1100 のように範囲指定をしたい場合
ポート部分の記述を、下記のように記載すれば設定可能です。

    "max": 1100,
    "min": 1000


・複数ルールはいくつまで同時に設定可能?
100ルールまで1度にJSONを作成し投入してみましたが、問題無く設定できました。

・コマンドの詳細について
「OCI_CLI コマンドリファレンス」で検索することで、 最新のOCI_CLIのコマンドリファレンスが参照できます。より詳細にコマンドについて知りたい方は、そちらも参照してみて下さい。

注意事項:既存のイングレスルールは消去されて置き換えられる

今回のOCI-CLIコマンドは、updateというコマンドになり、ルールの「更新」となります。
「追加」では無いため、コマンド投入時に設定されている既存のルールは全て削除され、置き換えらますので注意してください。

※INPUTとなるJSONファイルには、イングレスルールのみを記載しているため、既存のイングレスルールのみ置き換えられます
筆者が検証の時点では、既存のエグレスルールには削除されず、影響はありませんでした。

※本記事は、2022年11月時点での情報となります。
OCIでの仕様変更等により、本記事記載の検証結果と実際の仕様に差異が発生する場合がありますので、ご了承下さい。

OCI関連の記事は、下記も確認してみて下さい。