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?

ACLのパラメーターシート作成

0
Posted at

課題

NACLのパラメーターシートを更新する必要がある。
以下のシート構成にする。

① ACL一覧
ACL ID・VPC ID・名前などの基本情報

② サブネット別ACL適用一覧
各サブネットに適用されているACLを確認する

③ インバウンドルール一覧
全NACLの受信ルールを一覧化

④ アウトバウンドルール一覧
全NACLの送信ルールを一覧化

それぞれを更新するための情報を出力するコマンドを書いていく。

① ACL一覧を出力

aws ec2 describe-network-acls \
  --query 'NetworkAcls[*].[Tags[?Key==`Name`]|[0].Value,NetworkAclId,VpcId,IsDefault]' \
  --output text | sed 's/\t/,/g' > network-acls.csv

『① ACL一覧を出力』のコマンド説明

コマンド 説明
aws ec2 describe-network-acls ネットワークACLの基本情報を取得する
--query 取得する項目を指定する
NetworkAcls[*] すべてのネットワークACLを取得する
Tags[?Key==\Name`]` Nameタグを検索する
[0].Value 最初に見つかったNameタグの値を取得する
NetworkAclId ネットワークACLのIDを取得する
VpcId ネットワークACLが所属するVPC IDを取得する
IsDefault デフォルトACLかどうかを取得する
--output text 取得結果をテキスト形式で出力する
sed 's/\t/,/g' タブ区切りをカンマ区切りに変換する
> network-acls.csv 実行結果をCSVファイルに保存する(既存ファイルは上書き)

② サブネット別ACL適用一覧

aws ec2 describe-subnets --output json > /tmp/subnets.json

aws ec2 describe-network-acls --output json | \
jq -r --slurpfile subnets /tmp/subnets.json '
  .NetworkAcls[] |
  . as $acl |
  .Associations[] |
  .SubnetId as $subnetId |
  [
    ([$subnets[0].Subnets[] |
      select(.SubnetId == $subnetId) |
      .Tags[]? |
      select(.Key == "Name") |
      .Value][0] // ""),
    $subnetId,
    ([$acl.Tags[]? | select(.Key == "Name") | .Value][0] // ""),
    $acl.NetworkAclId
  ] | @csv
' > subnet-network-acls.csv

『② サブネット別ACL適用一覧』のコマンド説明

コマンド 説明
aws ec2 describe-subnets サブネットの基本情報を取得する
--output json 取得結果をJSON形式で出力する
> /tmp/subnets.json サブネット情報を一時ファイルに保存する
aws ec2 describe-network-acls ネットワークACLの情報を取得する
| 前のコマンドの結果を次のコマンドに渡す
jq -r JSONデータを加工して出力する
--slurpfile subnets /tmp/subnets.json サブネット情報を読み込み、変数として利用する
.NetworkAcls[] ネットワークACLを1件ずつ取得する
. as $acl ACL情報を一時的に変数へ保存する
.Associations[] ACLに関連付けられているサブネット情報を取得する
.SubnetId as $subnetId サブネットIDを一時的に変数へ保存する
select(.SubnetId == $subnetId) サブネットIDが一致するサブネットを検索する
.Tags[]? サブネットに設定されたタグを取得する
select(.Key == "Name") Nameタグのみを抽出する
.Value Nameタグの値を取得する
[0] // "" 最初に取得した値を使用し、存在しない場合は空欄にする
$subnetId サブネットIDを出力する
$acl.Tags[]? ACLに設定されたタグを取得する
$acl.NetworkAclId ACL IDを取得する
@csv 取得結果をCSV形式に変換する
> subnet-network-acls.csv CSVファイルに保存する(既存ファイルは上書き)

③ インバウンドルール一覧

aws ec2 describe-network-acls --output json | \
jq -r '
  .NetworkAcls[] |
  . as $acl |
  .Entries[] |
  select(.Egress == false) |
  [
    ([$acl.Tags[]? | select(.Key == "Name") | .Value][0] // ""),
    $acl.NetworkAclId,
    .RuleNumber,
    .RuleAction,
    .Protocol,
    (.PortRange.From // ""),
    (.PortRange.To // ""),
    (.CidrBlock // .Ipv6CidrBlock // "")
  ] | @csv
' > nacl-inbound.csv

『③ インバウンドルール一覧』のコマンド説明

コマンド 説明
aws ec2 describe-network-acls ネットワークACLの情報を取得する
--output json 取得結果をJSON形式で出力する
| 前のコマンドの結果を次のコマンドに渡す
jq -r JSONデータを加工して出力する
.NetworkAcls[] ネットワークACLを1件ずつ取得する
. as $acl ACL情報を一時的に変数へ保存する
.Entries[] ACLに設定された通信ルールを1件ずつ取得する
select(.Egress == false) インバウンドルールのみを抽出する
$acl.Tags[]? ACLに設定されたタグを取得する
select(.Key == "Name") Nameタグのみを抽出する
.Value Nameタグの値を取得する
[0] // "" 最初に取得した値を使用し、存在しない場合は空欄にする
$acl.NetworkAclId ACL IDを取得する
.RuleNumber ルール番号を取得する
.RuleAction 通信の許可(allow)または拒否(deny)を取得する
.Protocol プロトコル番号を取得する(6:TCP、17:UDP、-1:すべて)
.PortRange.From // "" 開始ポートを取得する。存在しない場合は空欄にする
.PortRange.To // "" 終了ポートを取得する。存在しない場合は空欄にする
.CidrBlock // .Ipv6CidrBlock // "" 送信元のIPv4またはIPv6のCIDRを取得する
@csv 取得結果をCSV形式に変換する
> nacl-inbound.csv CSVファイルに保存する(既存ファイルは上書き)

④ アウトバウンドルール一覧

aws ec2 describe-network-acls --output json | \
jq -r '
  .NetworkAcls[] |
  . as $acl |
  .Entries[] |
  select(.Egress == true) |
  [
    ([$acl.Tags[]? | select(.Key == "Name") | .Value][0] // ""),
    $acl.NetworkAclId,
    .RuleNumber,
    .RuleAction,
    .Protocol,
    (.PortRange.From // ""),
    (.PortRange.To // ""),
    (.CidrBlock // .Ipv6CidrBlock // "")
  ] | @csv
' > nacl-outbound.csv

『④ アウトバウンドルール一覧』のコマンド説明

コマンド 説明
aws ec2 describe-network-acls ネットワークACLの情報を取得する
--output json 取得結果をJSON形式で出力する
| 前のコマンドの結果を次のコマンドに渡す
jq -r JSONデータを加工して出力する
.NetworkAcls[] ネットワークACLを1件ずつ取得する
. as $acl ACL情報を一時的に変数へ保存する
.Entries[] ACLに設定された通信ルールを1件ずつ取得する
select(.Egress == true) アウトバウンドルールのみを抽出する
$acl.Tags[]? ACLに設定されたタグを取得する
select(.Key == "Name") Nameタグのみを抽出する
.Value Nameタグの値を取得する
[0] // "" 最初に取得した値を使用し、存在しない場合は空欄にする
$acl.NetworkAclId ACL IDを取得する
.RuleNumber ルール番号を取得する
.RuleAction 通信の許可(allow)または拒否(deny)を取得する
.Protocol プロトコル番号を取得する(6:TCP、17:UDP、-1:すべて)
.PortRange.From // "" 開始ポートを取得する。存在しない場合は空欄にする
.PortRange.To // "" 終了ポートを取得する。存在しない場合は空欄にする
.CidrBlock // .Ipv6CidrBlock // "" 送信先のIPv4またはIPv6のCIDRを取得する
@csv 取得結果をCSV形式に変換する
> nacl-outbound.csv CSVファイルに保存する(既存ファイルは上書き)
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?