我有多账户 AWS 环境(使用 AWS 登陆区设置),我需要将特定的安全组复制到所有账户。我确实写了一份 CFT,但要一个一个地完成这项任务太重复了。
安全组位于中央(共享服务)帐户中,该帐户可以访问所有其他帐户。最好有办法将其集成到帐户自动售货机 (AVM) 中,以避免将来将 SG 导出到新生成的帐户的任务。
我有多账户 AWS 环境(使用 AWS 登陆区设置),我需要将特定的安全组复制到所有账户。我确实写了一份 CFT,但要一个一个地完成这项任务太重复了。
安全组位于中央(共享服务)帐户中,该帐户可以访问所有其他帐户。最好有办法将其集成到帐户自动售货机 (AVM) 中,以避免将来将 SG 导出到新生成的帐户的任务。
您应该使用 CloudFormation 堆栈集。StackSets 是 cloudformation 的一项功能,其中您有一个主帐户,您可以在其中创建/更新/删除堆栈集,并且您有子帐户。在堆栈集中,您配置要部署 CF 模板和区域的子 aws 帐户。
根据您的评论,您的主帐户将成为共享服务,而您的其余帐户将成为子帐户。您将需要部署几个 IAM 角色以允许跨账户访问,但之后,您将能够在多达 500 个 aws 账户中自动部署所有模板并进行更新。
更多信息在这里:https ://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html
您可以使用 CloudFormer 通过 CloudFormation 导出安全组和其他配置,它会根据现有帐户配置创建模板。检查本指南中的步骤https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-cloudformer.html它将在 S3 上上传模板,您可以重复使用它或它的某些部分。
要将 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 循环中迭代,你可以修改脚本
我可以通过账户自动售货机做到这一点。但是 AGL 的 Stacksets 也应该是一个不错的选择。
由于您使用的是 AWS Landing Zone,因此您可以将安全组添加到aws_baseline
模板中,作为新模板或添加到现有文件之一。提交后,AWS Landing Zone 使用 Step Functions 和 AWS Stack Sets 将您的 SG 部署到所有现有和未来的账户。如果您选择在新文件中创建安全组,则必须在文件中添加对其的引用manifest.yaml
(与其他模板的引用方式相比)。