Как использовать AWSCLI для получения отформатированного списка правил доступа группы безопасности? - PullRequest
0 голосов
/ 14 декабря 2018

Как поживаете, ребята?Я пытаюсь использовать AWSCLI для запроса списка групп безопасности входных правил.Я довольно близко, но еще не совсем там.Вот что у меня есть:

$ aws ec2 describe-security-groups --group-id $sgid --region $reg --profile $acct --query "SecurityGroups[].IpPermissions[][].{P:IpProtocol,R:IpRanges}" --output text
tcp
R   10.0.0.0/8  allow for homerun
-1
R   10.12.1.229/32
R   10.227.84.26/32
R   10.26.230.100/32
R   10.26.230.106/32
R   10.230.84.39/32
R   10.28.164.101/32
R   10.28.164.100/32 
R   10.227.84.27/32
R   10.14.240.7/32
R   10.26.230.101/32
R   10.14.240.8/32
R   10.230.84.40/32
R   10.26.230.104/32
udp
R   10.0.0.0/8  allow for homerun

Что-то, что я хотел бы, выглядит примерно так:

tcp 10.0.0.0/8      allow for homerun
-1  10.12.1.229/32
-1  10.227.84.26/32
...
udp 10.0.0.0/8      allow for homerun

с подробностями каждого правила, отображаемыми в одной строке, так что он можетбыть более легко читаемым другим скриптом.

У кого-нибудь есть какие-нибудь советы?

1 Ответ

0 голосов
/ 16 декабря 2018

Вот возможное решение, все в bash, на случай, если вы, как и я, хотите, чтобы оно было простым:

case "$dir" in
    ingress)
        query="SecurityGroups[].IpPermissions[][].{P:IpProtocol,R:IpRanges,F:FromPort,T:ToPort}" 
        ;;
    egress)
        query="SecurityGroups[].IpPermissionsEgress[][].{P:IpProtocol,R:IpRanges,F:FromPort,T:ToPort}"
        ;; 
esac

aws ec2 describe-security-groups --group-id $sgid --region $reg --profile $acct \
--query $query --output text|while read line; 
do 
    cnt=$(echo $line|wc -w)
    if [ $cnt -eq 3 ]; then
        from=$(echo $line|cut -d" " -f1)
        proto=$(echo $line|cut -d" " -f2)
        to=$(echo $line|cut -d" " -f3)
    # this assumes the comment is not gonna be 1 word.  Lets hope :)
    else
        trash=$(echo $line|cut -d" " -f1)
        cidr=$(echo $line|cut -d" " -f2)
        remain=$(echo ${line//$trash/}) 
        remain2=$(echo ${remain//$cidr/})       
        comment="$remain2"
        out+=";"
        out+="$proto:$cidr:$from:$to:$comment"
    fi 
    echo $out>$TMPFILE
done 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...