AWS 보안 그룹을 복사 할 수 있습니까? 보안 규칙이 상당히 많은 보안

보안 규칙이 상당히 많은 보안 그룹이 있습니다. 사소한 차이점을 수용하기 위해 여러 보안 그룹에 대해 동일한 규칙을 다시 작성하지 않고 시작점으로 사용하기 위해 보안 그룹을 복사하거나 상속 등을 사용할 수 있습니까?



답변

웹 인터페이스에서 보안 그룹을 복사 할 수없는 것 같습니다. 그러나 AWS CLI사용하여 보안 그룹생성 할 수 있습니다 .

사령부 :

$ aws ec2 describe-security-groups --group-id MySecurityGroupID

출력 :

{
    "securityGroupInfo": [
        {
            "ipPermissionsEgress": [],
            "groupId": "sg-903004f8",
            "ipPermissions": [],
            "groupName": "MySecurityGroup",
            "ownerId": "803981987763",
            "groupDescription": "AWS-CLI-Example"
        }
    ],
    "requestId": "afb680df-d7b1-4f6a-b1a7-344fdb1e3532"
}

그리고 command를 사용하여 규칙을 추가하십시오.

aws ec2 authorize-security-group-ingress --group-id MySecurityGroupID --ip-protocol tcp --from-port 22 --to-port 22 --cidr-ip 0.0.0.0/0

산출:

{
    "return": "true",
    "requestId": "c24a1c93-150b-4a0a-b56b-b149c0e660d2"
}

여기에서 보안 그룹 작성을 단순화하는 방법을 파악할 수 있어야합니다.


답변

AWS EC2 콘솔을 사용하면 이제 보안 그룹을 선택하고 UI에서 “새로 복사”작업을 수행 할 수 있습니다.


답변

에서 AWS는 보안 그룹 만들기 문서를, 당신은 콘솔을 사용하여 보안 그룹을 복사 할 수 있습니다.

  1. 복사하려는 보안 그룹을 선택하십시오.
  2. 행동을 선택하십시오
  3. 새로운 것으로 복사

AWS 보안 그룹-새로 복사


답변

이 블로그를 살펴보십시오. 보고있는 내용에 유용 할 수 있습니다.

http://ry4an.org/unblog/post/ec2_security_group_tools/


답변

다음은 이러한 종류의 작업을보다 쉽고 자동화하기 위해 작성한 사용자 지정 라이브러리의 ‘복사 보안 그룹’python / boto 방법입니다. 궁극적으로 이것이 내가 찾은 솔루션이었습니다.

vpcId is the Virtual Private Cloud Id
keys is a dictionary with your AWS keys

나머지는 알아 내기 위해 똑바로 있어야합니다.

def copyEC2SecurityGroup(self, keys, region, securityGroupName, newSecurityGroupName = None, newRegion = None, vpcId = None):


newEc2Connection = None
print("Creating ec2Connection for source region: " + region)
ec2Connection = lib.getEc2Connection(region, keys)

if newRegion is None:
    newRegion = region
else:
    print("New Region Detected, creating for New region: " + newRegion)
    newEc2Connection = lib.getEc2Connection(newRegion, keys)
    newRegionInfo = newEc2Connection.region

print("new region is: %s" % newRegion)

if newSecurityGroupName is None:
    newSecurityGroupName = securityGroupName

print ("new security group is: %s" % newSecurityGroupName)

# if copying in the same region the new security group cannot have the same name.
if newRegion == region:
    if newSecurityGroupName == securityGroupName:
        print ("Old and new security groups cannot have the same name when copying to the same region.")
        exit(1)

groups = [group for group in ec2Connection.get_all_security_groups() if group.name == securityGroupName]
print"got groups count " + str(len(groups))
if groups:
    theOldGroup = groups[0]
    print theOldGroup.rules
else:
    print("Can't find security group by the name of: %s" % securityGroupName)
    exit(1)
print groups
pprint(theOldGroup)

if newEc2Connection is not None:
    print("Creating new security group in new region")
    sg = newEc2Connection.create_security_group(newSecurityGroupName, newSecurityGroupName, vpcId)
    sleep(5)
else:
    print("Creating new security group in current region")
    sg = ec2Connection.create_security_group(newSecurityGroupName, newSecurityGroupName, vpcId)
    sleep(5)

source_groups = []
for rule in theOldGroup.rules:
    for grant in rule.grants:
        strGrant = str(grant)
        print(strGrant)
        if strGrant.startswith("sg"):
            print("Cannot copy 'security group rule' (%s)... only cidr_ip's e.g. xxx.xxx.xxx.xxx/yy." % strGrant)
            continue
        grant_nom = grant.name or grant.group_id
        if grant_nom:
            if grant_nom not in source_groups:
                source_groups.append(grant_nom)
                sg.authorize(rule.ip_protocol, rule.from_port, rule.to_port, grant)
        else:
            sg.authorize(rule.ip_protocol, rule.from_port, rule.to_port, grant.cidr_ip)
return sg


답변

이 작업을 수행하기 위해 만든 스크립트는 다음과 같습니다. aws_sg_migrate

샘플 사용법은

python3 aws_sg_migrate.py --vpc=vpc-05643b6c --shell --src=us-east-1 --dest=us-west-1 sg-111111

이것을 기반 으로 하며 Python3에 적합합니다.


답변

동일한 AWS 리전 내에서 온라인 GUI를 사용하여 보안 정책을 복사 할 수 있습니다. 그러나 때로는 프로그래밍 방식으로 내용을 복사하려고합니다. 예를 들어, 복사 할 보안 정책이 많거나 리전간에 복사하려는 경우입니다.

이를 수행하는 간단한 스 니펫이 있습니다.

import boto3
from os import environ as env


def copy_security_groups(src_region, tgt_region, grp_names):

    # Initialize client connections for regions
    src_client = boto3.client('ec2', region_name=src_region,
                              aws_access_key_id=env['AWS_ACCESS_KEY_ID'],
                              aws_secret_access_key=env['AWS_SECRET_ACCESS_KEY'])
    tgt_client = boto3.client('ec2', region_name=tgt_region,
                              aws_access_key_id=env['AWS_ACCESS_KEY_ID'],
                              aws_secret_access_key=env['AWS_SECRET_ACCESS_KEY'])

    # Get info for all security groups and copy them one-by-one
    g_info = src_client.describe_security_groups(
        GroupNames=grp_names)['SecurityGroups']
    for g in g_info:
        resp = tgt_client.create_security_group(
            GroupName=g['GroupName'], Description=g['Description'])
        new_grp_id = resp['GroupId']
        tgt_client.authorize_security_group_ingress(
            GroupId=new_grp_id, IpPermissions=g['IpPermissions'])
        tgt_client.authorize_security_group_egress(
            GroupId=new_grp_id, IpPermissions=g['IpPermissionsEgress'])


if __name__ == '__main__':
    copy_security_groups('us-east-1', 'ap-south-1', ['rds-public'])