안녕하세요! 오늘은 보안그룹 인바운드룰을 aws cli를 활용하여 적용하는 법에 대해서 알아보겠습니다.
콘솔상에서 다량으로 json 임포트나 파일로 컨트롤이 어려운데요,
이럴때는 AWS CLI를 사용하는 방법이 있습니다.
1) 보안그룹의 인바운드 룰 추가 (단건 처리시)
aws ec2 authorize-security-group-ingress \
--group-id sg-XXXXXXXXXXXX \
--protocol tcp --port 22 --cidr 0.0.0.0/0
awscli를 통한 컨트롤은 위와 같이 가능합니다.
aws cli 설치 : https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-linux.html
aws configure를 통해서 iam 유저에 대해서 세팅을 하셨다고 가정하고, - 상기 group-id에 수정하실 보안 그룹을 입력합니다. 그리고 나서 ingress 포트와 cidr range를 입력하셔서, 0.0.0.0/0에 대한 22번 포트 인바운드 포트를 추가합니다.
하기는 테스트 결과입니다.
![](https://blog.kakaocdn.net/dn/0OHRq/btrqysFmrTe/5eG8LLHYOfL7uF3uMbehM1/img.png)
참조 링크 : https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/authorize-security-group-ingress.html
2) 멀티플 인바운드룰 추가
다음의 내용은 python sdk를 사용하여,
security_group sg-111223333에 25번 포트에 대한 내용을 추가하는 내용입니다.
하기 profile은 aws configure를 default라고 했을때로 가정합니다.
import boto3import csv
# Set variables
p_name = 'default'
r_name = 'ap-northeast-2'
csv_file = 'abc.csv'
sg_id = 'sg-0e5bebe804129cd5e'
# Session
session = boto3.session.Session(profile_name=p_name)
# EC2 Client
ec2_cli = session.client(service_name='ec2', region_name=r_name)
# Load csv file
f = open("abc.csv")
csv_f = csv.reader(f)
session = boto3.session.Session(profile_name=(p_name),region_name=(r_name))
ec2 = session.resource('ec2')
SG = ec2.SecurityGroup(sg_id)
# SG.revoke_ingress(IpPermissions=SG.ip_permissions) #해당 내용으로 설정한 security_group의 내용을 지웁니다. 필요하시면 주석을 해제하시기 바랍니다.
# Add ingress rules from csv file
for idx, row in enumerate(csv_f):
if idx == 0:
continue
try:
response = ec2_cli.authorize_security_group_ingress(
GroupId=sg_id,
IpPermissions=[
{
'FromPort': int(row[0]),
'ToPort': int(row[1]),
'IpProtocol': row[2],
'IpRanges': [
{
'CidrIp': row[3],
'Description': row[4]
}
]
}
]
)
if response.get('ResponseMetadata').get('HTTPStatusCode') == 200:
print("Success")
else:
print("Failed")
except Exception as e:
print("Failed with exception")
abc.csv
![](https://blog.kakaocdn.net/dn/b0CXWm/btrqAa5gqG2/jwMHrU1ZRqjOWLuDdPybiK/img.png)
상기와 같이 저장하시면, 첫번째 줄을 제외하고 한줄씩 읽어서
다음과 같이 처리합니다. Description을 넣어주시면 적용됩니다.
실행 결과 :
![](https://blog.kakaocdn.net/dn/be1unL/btrqzSwYxED/KaUiWxrjurSzbkuK2DHenk/img.png)
보안 그룹 적용 내용 :
![](https://blog.kakaocdn.net/dn/c9utK3/btrqxSwWKpp/ylZyR5WTedlYaW4VaPZM9k/img.png)
2-2) AWS CLI script를 활용한 멀티 ip 등록
IP=`12.34.56.78/0`
aws ec2 revoke-security-group-ingress \
--group-id GROUP_ID \
--security-group-rule-ids $(cat ruleid_1.txt)
aws ec2 authorize-security-group-ingress --group-id GROUP_ID\
--ip-permissions "IpProtocol"="tcp","FromPort"=433,"ToPort"=443,"IpRanges"="[{CidrIp=$IP/32,Description=Shalev}]"|jq '.SecurityGroupRules[0].SecurityGroupRuleId' -r > ruleid_1.txt
참고로, 보안그룹은 50개 룰까지만 적용이 가능합니다.
참조 링크 :
https://docs.aws.amazon.com/ko_kr/cli/latest/reference/ec2/authorize-security-group-ingress.html
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html?highlight=ingress#EC2.Client.authorize_security_group_ingress
https://github.com/bobbyhadz/aws-cdk-import-existing-security-group
https://honglab.tistory.com/200
https://www.rainingforks.com/blog/2018/use-python-to-add-aws-security-group-rules-from-a-list-of-ips.html
https://stackoverflow.com/questions/50531423/authorize-aws-security-group-using-python-boto3-with-description-for-each-ingres
감사합니다.
'IT > AWS' 카테고리의 다른 글
Redshift CPU가 높을 경우 트러블 슈팅 방법 (0) | 2022.12.28 |
---|---|
S3 보안 모범 사례 (0) | 2022.08.17 |
EC2 CPU Steal (0) | 2022.02.25 |
Lambda vs Fargate (0) | 2022.02.15 |
aws efs vs ebs (0) | 2022.01.25 |