이것이 가장 효율적인 접근 방식은 아니라고 확신하지만 이 aws 명령의 결과 형식을 지정하는 데 도움이 필요합니다.
aws ec2 describe-security-groups --group-ids sg-xxxxxxxxxxxxx --region=us-east-1 --profile=default | sed -n '/\"FromPort\"\: 22\,/,/\"ToPort\": 22\,/p'
결과에는 포트 22와 관련된 데이터가 표시됩니다. 결과의 예는 다음과 같습니다.
{
"CidrIp": "1.2.3.4/32"
},
{
"CidrIp": "5.6.7.8/32"
},
{
"Description": "test1",
"CidrIp": "4.3.2.1/32"
},
{
"Description": "test2",
"CidrIp": "8.7.6.5/32"
},
앞서 살펴보았듯이 일부 항목에는 설명이 포함되어 있을 수 있지만 다른 항목에는 설명이 포함되어 있지 않을 수도 있습니다.
결과 형식을 다음과 같이 지정하고 싶습니다.
1.2.3.4/32
5.6.7.8/32
4.3.2.1/32 <tab> test1
8.7.6.5/32 <tab> test2
aws 명령에 --filters를 추가하려고 시도했지만 원하는 출력을 얻는 최선의 방법이 명확하지 않습니다. 도와주셔서 감사합니다!
답변1
AWS CLI를 사용하고 있으므로 필요한 형식 지정 및 출력을 얻으려면 --query
및/또는 플래그를 사용하는 것이 좋습니다.--filter
AWS CLI는 서버 측 및 클라이언트 측 필터링을 제공합니다..
이 --filter
플래그는 데이터 세트가 큰 경우 HTTP 응답 시간을 향상시키는 데 도움이 될 수도 있는 서버 측 필터링을 제공하지만, 이 --query
플래그는 사용할 수 있는 보다 강력한 클라이언트 측 필터링을 제공합니다.JMES 경로 구문플래그를 사용하여 --query
필터링 합니다.
--query
다음은 원하는 출력을 얻기 위해 이 플래그를 사용하는 예 입니다 .
--query
참고: +를 조합하여 사용 --filter
하거나 단독으로 사용하여 --query
슬라이스하고 깍둑썰기하는 방법에는 여러 가지가 있습니다 .
aws ec2 describe-security-groups --group-ids sg-xxxxxxxxx --filter 'Name=ip-permission.from-port,Values=[22]' 'Name=ip-permission.to-port,Values=[22]' --query 'SecurityGroups[*].IpPermissions[?FromPort == `22` && ToPort == `22`].IpRanges[*].[CidrIp,Description]' --region <AWS_REGION> --profile <PROFILE> --output text
각 API 메서드는 서버측 응답에서 "검색"할 수 있는 특정 필터를 제공하므로 API 호출에 대한 설명서를 참조하세요.
또한 --output text
무엇이 사용되는지 기록해 두십시오. 이는 탭 대신 공백일 뿐이지만 실제로 찾고 있는 형식으로 출력되는 것입니다.
EC2 SG API에서 제공하는 필터(예 ip-permission.to-port
: )를 사용하고 있음을 알 수 있습니다. 또한 위 명령에 사용된 백틱을 참고하세요. 내 Mac에서는 제대로 작동합니다.