Copy/Export AWS 安全组到多个 AWS 账户
Copy/Export AWS Security Group to multiple AWS accounts
我有多账户 AWS 环境(使用 AWS Landing Zone 设置),我需要将特定安全组复制到所有账户。我确实写了一个 CFT,但是一个一个地做这个太重复了。
安全组位于中央(共享服务)帐户中,该帐户可以访问所有其他帐户。如果有一种方法可以将其集成到帐户自动售货机 (AVM) 中,以避免将来将 SG 导出到新生成的帐户的任务,那就更好了。
您可以使用 CloudFormer 使用 CloudFormation 导出安全组和其他配置,这会根据现有帐户配置创建模板。查看本指南中的步骤 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-cloudformer.html 它将在 S3 上上传模板,您可以重复使用它或其中的某些部分。
由于您使用的是 AWS Landing Zone,因此您可以将安全组添加到 aws_baseline
模板中,作为新模板或添加到现有文件之一。提交后,AWS Landing Zone 使用 Step Functions 和 AWS Stack Sets 将您的 SG 部署到所有现有和未来的账户。如果您选择在新文件中创建安全组,则必须在 manifest.yaml
文件中添加对它的引用(与其他模板的引用方式进行比较)。
您应该使用 CloudFormation Stacksets。 StackSets 是 cloudformation 的一项功能,其中您有一个主帐户,您在其中 create/update/remove 堆栈集,并且您有子帐户。在堆栈集中,您可以配置要部署 CF 模板和区域的子 aws 帐户。
根据您的评论,您的主帐户将成为 shared-services,其余帐户将成为子帐户。您将需要部署几个 IAM 角色以允许 cross-account 访问,但之后,您将能够在最多 500 个 aws 账户中自动部署所有模板并更新它们。
这里有更多信息:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html
我能够通过帐户自动售货机完成此操作。但是 AGL 的 Stacksets 应该也是一个不错的选择。
要将 AWS Security Gp 从任何区域的一个账户复制到其他 AWS 账户到任何区域,需要在 aws cli 或 boto3 中编写大量脚本(编码)。
但是我做的一件事对我的用例(HTTPS 的白名单 14 个 IP)是可行的,那就是写一个 bash 脚本
在此之前,我在其他 AWS 帐户上创建了一个空白 SG(或者您也可以使用 aws cli 来创建它),
`
Region1=
SGFromCopy=
profilefromcopy=
Region2=
SGToCopy=
profiletocopy=
for IP in $(aws ec2 describe-security-groups --region $Region1 --group-id=$SGFromCopy --profile $profilefromcopy --query SecurityGroups[].IpPermissions[].IpRanges[].CidrIp --output text) ;
do
aws ec2 authorize-security-group-ingress --group-id=$SGToCopy --ip-permissions IpProtocol=TCP,FromPort=443,ToPort=443,IpRanges=[{CidrIp=$IP}] --profile $profiletocopy --region $Region2;
done ;
`
如果您有 SG 格式的 csv,然后在 while 循环中迭代,您可以修改脚本
奖金
要获得所需的输出,您必须更改文件或其他地方的输出
> aws ec2 describe-security-groups --region $Region1 --group-id $SGFromCopy --profile $profilefromcopy --query SecurityGroups[].IpPermissions[] --输出文本
我有多账户 AWS 环境(使用 AWS Landing Zone 设置),我需要将特定安全组复制到所有账户。我确实写了一个 CFT,但是一个一个地做这个太重复了。
安全组位于中央(共享服务)帐户中,该帐户可以访问所有其他帐户。如果有一种方法可以将其集成到帐户自动售货机 (AVM) 中,以避免将来将 SG 导出到新生成的帐户的任务,那就更好了。
您可以使用 CloudFormer 使用 CloudFormation 导出安全组和其他配置,这会根据现有帐户配置创建模板。查看本指南中的步骤 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-cloudformer.html 它将在 S3 上上传模板,您可以重复使用它或其中的某些部分。
由于您使用的是 AWS Landing Zone,因此您可以将安全组添加到 aws_baseline
模板中,作为新模板或添加到现有文件之一。提交后,AWS Landing Zone 使用 Step Functions 和 AWS Stack Sets 将您的 SG 部署到所有现有和未来的账户。如果您选择在新文件中创建安全组,则必须在 manifest.yaml
文件中添加对它的引用(与其他模板的引用方式进行比较)。
您应该使用 CloudFormation Stacksets。 StackSets 是 cloudformation 的一项功能,其中您有一个主帐户,您在其中 create/update/remove 堆栈集,并且您有子帐户。在堆栈集中,您可以配置要部署 CF 模板和区域的子 aws 帐户。
根据您的评论,您的主帐户将成为 shared-services,其余帐户将成为子帐户。您将需要部署几个 IAM 角色以允许 cross-account 访问,但之后,您将能够在最多 500 个 aws 账户中自动部署所有模板并更新它们。
这里有更多信息:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html
我能够通过帐户自动售货机完成此操作。但是 AGL 的 Stacksets 应该也是一个不错的选择。
要将 AWS Security Gp 从任何区域的一个账户复制到其他 AWS 账户到任何区域,需要在 aws cli 或 boto3 中编写大量脚本(编码)。
但是我做的一件事对我的用例(HTTPS 的白名单 14 个 IP)是可行的,那就是写一个 bash 脚本
在此之前,我在其他 AWS 帐户上创建了一个空白 SG(或者您也可以使用 aws cli 来创建它),
`
Region1=
SGFromCopy=
profilefromcopy=
Region2=
SGToCopy=
profiletocopy=
for IP in $(aws ec2 describe-security-groups --region $Region1 --group-id=$SGFromCopy --profile $profilefromcopy --query SecurityGroups[].IpPermissions[].IpRanges[].CidrIp --output text) ;
do
aws ec2 authorize-security-group-ingress --group-id=$SGToCopy --ip-permissions IpProtocol=TCP,FromPort=443,ToPort=443,IpRanges=[{CidrIp=$IP}] --profile $profiletocopy --region $Region2;
done ;
`
如果您有 SG 格式的 csv,然后在 while 循环中迭代,您可以修改脚本
奖金
要获得所需的输出,您必须更改文件或其他地方的输出
> aws ec2 describe-security-groups --region $Region1 --group-id $SGFromCopy --profile $profilefromcopy --query SecurityGroups[].IpPermissions[] --输出文本