#動機
初投稿です。
AWSのマネジメントコンソールでセキュリティグループの閲覧をしていて、
セキュリティグループとかインバウンドとかチクチク押すのめんどいなと思いまして。
本記事投稿当時、Powershellで作業するのがマイブームであったということもあり、
ちょいとチャレンジした次第です。
#やりたいこと
GroupIDに対し、インバウンドに表示されるルールの見たい項目を配列として格納し、
CSV形式でいい感じに出力したい。
#使ったもの
- Powershell
- AWSCLI
#できたもの
hoge.ps1
#配列の出力先のファイル名の記述
$LogFolder = 'C:\hoge\results'
$TimeStamp = (Get-Date -Format 'yyyyMMdd-HHmmss')
$ResultCsv = $LogFolder + '\' + 'result_' + $TimeStamp + '.csv'
function main {
#配列の宣言とaws ec2 describe-security-groupsで持ってきたjson文を
#AWS_jsonにオブジェクトとして格納
$list = @()
$AWS_json = aws ec2 describe-security-groups | ConvertFrom-Json
#配列の作成
foreach($x in $AWS_json.SecurityGroups){
foreach($y in $x.IpPermissions){
foreach($z in $y.IpRanges){
$list += New-Object PSObject -Property @{
TagName=$x.Tags.Value
GroupName=$x.GroupName
GroupID=$x.GroupID
Protocol=$y.IpProtocol
Port=$y.ToPort
Source=$z.CidrIp
Description=$z.Description
}
}
foreach($z in $y.UserIdGroupPairs){
$list += New-Object PSObject -Property @{
TagName=$x.Tags.Value
GroupName=$x.GroupName
GroupID=$x.GroupID
Protocol=$y.IpProtocol
Port=$y.ToPort
Source=$z.GroupID
Description=$z.Description
}
}
}
}
#表示順変更
$list = $list | Select-Object `
"TagName" , "GroupName" , "GroupID" , `
"Protocol" , "Port" , `
"Source" , "Description"
#配列をCSVファイルに出力
$list | Export-Csv -Path $ResultCsv
}
main
#できたものからできたもの
大方こんな感じ。
「-1」と入っているのはAWSのコンソールから見たときの「すべて」に相当するようです。
TagName | GroupName | GroupID | Protocol | Port | Source | Description |
---|---|---|---|---|---|---|
hoge | hoge | sg-hogehogehoge | tcp | 8080 | 0.0.0.0/0 | hoge |
hoge | hoge | sg-hogehogehoge | tcp | 22 | 0.0.0.0/0 | hoge |
default | sg-hogehogehoge | -1 | sg-hogehogehoge | hoge | ||
hoge | hoge | sg-hogehogehoge | tcp | 80 | 0.0.0.0/0 | hoge |
hoge | hoge | sg-hogehogehoge | tcp | 443 | 0.0.0.0/0 | hoge |
#所感
あまりjsonファイルに触れたことがなかったため、いい勉強になりました。
そしてPowershellでのjsonファイル整形が意外と面白かったです。json好きになりました。
ソース文について、3重ループがちょっと気持ち悪い気がしてます。
今回はNew-Objectだけで記述しましたが、Add-Memberを活用したやり方のが自分は好みです。
一応上記のソース文を最終盤にしてますが、もっといい書きっぷりがあると思って色々試行錯誤してます。
プログラミング自体ご無沙汰なもんで。。。
以上、初投稿でした。