কোনও এডাব্লুএস সুরক্ষা দলটিকে অনুলিপি করা কি সম্ভব?


17

আমাদের কয়েকটি সুরক্ষা গোষ্ঠী রয়েছে যার কয়েকটিতে বেশ কয়েকটি বিধি রয়েছে। কেবলমাত্র সামান্য পার্থক্য মিটানোর জন্য বেশ কয়েকটি সুরক্ষা গোষ্ঠীর জন্য একই নিয়মগুলি পুনরায় তৈরি করার পরিবর্তে, কোনও সুরক্ষা গোষ্ঠীটি একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করার জন্য, বা উত্তরাধিকার ইত্যাদি ব্যবহার করা কি সম্ভব?


2
আপনি একক সংস্থানটিতে একাধিক সুরক্ষা গোষ্ঠী প্রয়োগ করতে পারেন। সুরক্ষা গোষ্ঠীর একটি অনুলিপি তৈরি করা খারাপ ধারণা বলে মনে হচ্ছে। কেবলমাত্র একটি নতুন গোষ্ঠীতে নতুন নিয়ম যুক্ত করুন এবং এটি সঠিক দৃষ্টিতে প্রয়োগ করুন।
লাড্ডাড্ডা

আমি কেবল এই তথ্যটি অনুসন্ধান করার চেষ্টা করেছি তবে এমন কিছু খুঁজে পাচ্ছি না যা দেখায় কীভাবে একটি সুরক্ষিত ইসি 2 ইভেন্টে অতিরিক্ত সুরক্ষা গোষ্ঠী যুক্ত করা যায়। তুমি কি একটি লিংক সরবরাহ করতে পার?
বিল রোজমাস

আমি আস্তে আস্তে যুক্ত করা পাইথন বোটো শ্রেণীর লাইব্রেরিতে আমি একটি নতুন ফাংশন লিখেছি। একটি পিঠা আমার সাথে ডিল করা উচিত ছিল না (যেমন প্রচুর জিনিস রয়েছে) তবে কমপক্ষে এখন আমি যা কিছু দেখেছি তার থেকে এটি করার জন্য একটি সহজ এবং আরও সোজা ফরোয়ার্ড ইন্টারফেস রয়েছে।
বিল রোসমাস

উত্তর:


17

দেখে মনে হচ্ছে না আপনি ওয়েব ইন্টারফেস থেকে সুরক্ষা গোষ্ঠীগুলি অনুলিপি করতে পারেন। তবে আপনি সুরক্ষা গোষ্ঠী তৈরি করতে 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"
}

এবং কমান্ড ব্যবহার করে বিধি যুক্ত করুন:

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 describe-security-groups --group-id MySecurityGroupID --region us-west-2
evan.bovie

7

এডাব্লুএস ইসি 2 কনসোল আপনাকে এখন সিকিউরিটি গ্রুপ নির্বাচন করতে এবং ইউআইতে এখন "কপিরাইট টু নিউ" অপারেশন সম্পাদনের অনুমতি দেয়।


4

AWS সুরক্ষা গোষ্ঠী ডক্স তৈরি করা থেকে আপনি কনসোল ব্যবহার করে কোনও সুরক্ষা গোষ্ঠী অনুলিপি করতে পারেন।

  1. আপনি অনুলিপি করতে চান এমন সুরক্ষা গোষ্ঠীটি নির্বাচন করুন
  2. নির্বাচন করুন
  3. নতুন অনুলিপি

এডাব্লুএস সুরক্ষা দল - নতুনটিতে অনুলিপি করুন


একটি অনুলিপি তৈরি করার জন্য সবচেয়ে পাল্টা স্বজ্ঞাত স্থান। ধন্যবাদ। আপনি ইসি 2 কনসোলটি দেখিয়ে দিলে ভাল হবে।
মাইকেল ম্যাকগারাহ

4
যতক্ষণ আপনি একই অঞ্চলে অনুলিপি করছেন এটি কাজ করে। যদি আপনাকে অন্য অঞ্চলে সদৃশ করতে হয় তবে আপনাকে এখনও ইসি 2 সিএলআই ব্যবহার করতে হবে।
ডেল অ্যান্ডারসন

এই বিকল্পটি ভিপিসি ড্যাশবোর্ডে বিদ্যমান নেই।
evan.bovie

3

এই ব্লগটি একবার দেখুন বিবেচনা করুন। আপনি যা খুঁজছেন তার জন্য এটি কার্যকর হতে পারে।

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


আমি এটি করার জন্য কিছু পাইথন বোটো স্টাফ লিখেছিলাম। আমি যা দেখেছি তার চেয়ে বেশি সহজে ব্যবহার।
বিল রোজমাস

দয়া করে আপনার লিঙ্কের বিষয়বস্তু সংক্ষিপ্তসার করুন
ওয়ার্ড - মনিকা পুনরায়

1
কাজ করে না। Use of uninitialized value $type in string eq at create-firewall-script.pl line 43, <> line 1 (#1)
সানকাচার

3

এই ধরণের জিনিসগুলিকে সহজ করতে / স্বয়ংক্রিয় করার জন্য আমি লিখেছি এমন একটি কাস্টম লাইব্রেরি থেকে 'কপি সুরক্ষা গোষ্ঠীগুলি' অজগর / বোটো পদ্ধতিটি এখানে দেওয়া হল ... শেষ পর্যন্ত আমিই এর সমাধানটি নিয়ে এসেছি।

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 

কোড ইনডেন্টিং হ'ল অসম্পূর্ণ দেখায়। আপনি এটা ঠিক করতে পারেন?
শোয়ান

@ শোয়ান - দুঃখিত খুব দীর্ঘ হয়েছে। আমি এখনই এটির সাথে আসলে কাজ করছি না। এটি আমার লেখা লাইব্রেরি থেকে কাটা একটি পদ্ধতি এবং আমি এটি ব্যবহার করার সময় নিয়মিত ব্যবহার করি। সুতরাং আমি জানি এটি এখানে পোস্ট করার সময় এটি কাজ করেছিল। যদি এটি কোনও ইনডেন্ট জিনিস হয়, তবে এটি নির্ধারণ করা খুব বেশি কঠিন হওয়া উচিত নয় (তবে এটির সাথে ঝাঁকুনির জন্য পরিবেশ তৈরি করার জন্য আমার কাছে এখনই সময় নেই, তবে আপনি পারেন;))) এটি হয়ত লাইব্রেরির সংস্করণ নিয়ে সমস্যা হতে পারে? যাই হোক না কেন, বোটোর সাথে এই প্রোগ্রামটিমেটিকভাবে করতে ইচ্ছুক যে কেউ এখনও এটি সম্ভবত একটি ভাল সূচনার পয়েন্ট।
বিল রোজমাস

1
লাইব কি? আমি এটি কোথা থেকে আমদানি করব?
সানকাচার

2

এটি সম্পাদন করার জন্য আমি তৈরি স্ক্রিপ্টটি এখানে: aws_sg_migrate

নমুনা ব্যবহার হয়

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

এটি এর উপর ভিত্তি করে পাইথন 3 এর জন্য অভিযোজিত।


ব্যবহারটি আকর্ষণীয় বলে মনে হচ্ছে তবে কোনও স্ক্রিপ্ট সংযুক্ত নেই?
জাজারাভা

দুঃখিত, = :) লিঙ্কটি যুক্ত হয়েছে
সানক্যাচার

1

একই এডাব্লুএস অঞ্চলে আপনি অনলাইন জিইআইআই ব্যবহার করে সুরক্ষা নীতি অনুলিপি করতে পারেন। যাইহোক, কখনও কখনও আপনি প্রোগ্রামগুলি বিষয়গুলি অনুলিপি করতে চান। উদাহরণস্বরূপ, অনুলিপি করার জন্য আপনার কাছে যদি সুরক্ষা নীতিমালা প্রচুর থাকে বা আপনি অঞ্চলগুলি জুড়ে অনুলিপি করতে চান।

এটি করার জন্য এখানে একটি সরল স্নিপেট।

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'])

0

অনলাইনে এটি করার কোনও সঠিক পদ্ধতি না থাকার কারণে, আমি এটি পরিচালনা করার জন্য একটি সুপার সিম্পল স্ক্রিপ্ট তৈরি করেছি। আপনি যদি আগ্রহী হন তবে একবার দেখুন।

https://github.com/pedropregueiro/migrate-ec2-secgroups


এটি "উত্তর" জমা দেওয়ার পক্ষে সত্যিই ভাল প্রার্থী নয়। আপনার যখন এগুলিতে পোস্ট করার মতো পর্যাপ্ত প্রতিনিধি থাকে তখন কোনও মন্তব্য হিসাবে কার্যকর হতে পারে।
অ্যান্ড্রু বি

0

ইসি 2 কনসোল থেকে, প্রবর্তন ইনস্ট্যান্সটিতে ক্লিক করুন এবং সুরক্ষা গোষ্ঠী বিভাগে না আসা পর্যন্ত ডামি তথ্য প্রবেশ করার জন্য এগিয়ে যান ..

এখান থেকে "একটি বিদ্যমান সুরক্ষা গোষ্ঠী নির্বাচন করুন" এ ক্লিক করুন, এবং নীচে আপনি সেই নির্দিষ্ট ভিপিসির জন্য আপনার কাছে থাকা সমস্ত সুরক্ষা গোষ্ঠী দেখতে পাবেন। "ক্রিয়াগুলি" এর অধীনে আপনার "নতুন প্রতিলিপি করুন" লিঙ্কটি দেখতে পাওয়া উচিত, আপনার সমস্ত এসিএল একটি নতুন এসজিতে অনুলিপি করতে এটি ব্যবহার করুন।

অথবা আমি মনে করি আপনি কোনও স্ক্রিপ্ট ব্যবহার করতে পারেন - এটি দ্রুত আইএমও ..


0

আমার একই রকম সমস্যা ছিল তবে বিভিন্ন অ্যাকাউন্টে এসজি অনুলিপি করা।

শুরুতে কিছু কনস্ট্যান্ট নির্দিষ্ট করুন এবং ফাংশন copy_sg তাদের অনুলিপি করবে।

কোনও ত্রুটি পরীক্ষার জায়গায় নেই তাই এটি লক্ষ্যমাত্রার এসজি ইতিমধ্যে বিদ্যমান এটি ব্যর্থ হবে।

একটি সাধারণ সমাধান অনুসরণ করুন যা অন্তঃ-অ্যাকাউন্টেও ব্যবহার করা যেতে পারে:

#!/usr/bin/env python3
# coding: utf-8

import boto3
from typing import Any,  List

# This profile needs to be able to assume the specified role in SRC/TGT account
appops_session = boto3.Session(profile_name='YOUR_PRECONFIGURE_PROFILE')

ROLE = "THE ROLE TO BE ASSUMED"  # I presume it is the same in SRC/TGT Account
SRC_ACCOUNT = "YOUR SRC ACCOUNT NUMBER"

TGT_REGION = "eu-central-1"
DST_ACCOUNT = "YOUR TARGET ACCOUNT NUMBER"
TGT_VPC = "vpc-XXXXXXXXXXXXXXX"

region = "ap-southeast-2"
dst_vpc_id = "vpc-XXXXXXXXXXXXXXX"
sg_list = ["sg-XXXXXXXX", "sg-YYYYYYYYY"]

def aws_sts_cred(account, role):
    """Get the STS credential.

    return  credential_object
    """
    sts_creds = {}
    sts_conn = appops_session.client('sts')

    role_arn = "arn:aws:iam::" + account + ":role/" + role
    assumed_role = sts_conn.assume_role(RoleArn=role_arn,
                                        RoleSessionName="TMPROLE")
    sts_creds["aws_access_key_id"] = assumed_role['Credentials']['AccessKeyId']
    sts_creds["aws_secret_access_key"] = assumed_role['Credentials']['SecretAccessKey']
    sts_creds["aws_session_token"] = assumed_role['Credentials']['SessionToken']
    return sts_creds


def aws_conn(service: str, region: str, **kwargs) -> Any:
    """Create a client object."""
    return boto3.client(service, region_name=region, **kwargs)


def dump_sg(client, vpcid: str = "", sgids: List = []) -> List:
    """Dump the specified SG."""
    print(sgids)
    sg_info = client.describe_security_groups(
            Filters = [{'Name': 'group-id', 'Values': sgids}])['SecurityGroups']
    return sg_info


def copy_sg(tgt_client, sgs, vpcid=""):
    for sg in sgs:
        # With no Vpc ID the SG is created in the default VPC.
        resp = tgt_client.create_security_group(
            GroupName=sg['GroupName'], Description=sg['Description'], VpcId=vpcid)
        new_grp_id = resp['GroupId']
        tgt_client.authorize_security_group_ingress(
            GroupId=new_grp_id, IpPermissions=sg.get('IpPermissions', list()))
        if sg.get('IpPermissionsEgress') != []:
            # It doesn't work with an empty list
            tgt_client.authorize_security_group_egress(
                GroupId=new_grp_id, IpPermissions=sg.get('IpPermissionsEgress'))
        print("Create SG {} - \"{}\" - \"{}\" in VPCID: {}".format(new_grp_id, sg['GroupName'], sg['Description'], vpcid))


STS_CRED = aws_sts_cred(SRC_ACCOUNT, ROLE)
STS_CRED_TGT = aws_sts_cred(DST_ACCOUNT, ROLE)

src_client = aws_conn("ec2", region, **STS_CRED)

sg_list = dump_sg(src_client, sgids=sg_list)

tgt_client = aws_conn("ec2", TGT_REGION, **STS_CRED_TGT)

copy_sg(tgt_client, sg_list)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.