本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Control Tower (CT) 部署
AWS Control Tower 定制 (cfcT) 指南适用于想要为公司和客户定制和扩展 AWS Control Tower 环境的管理员、 DevOps 专业人士、独立软件供应商、IT 基础设施架构师和系统集成商。它提供了有关使用 CfCT 自定义包自定义和扩展 AWS Control Tower 环境的信息。
部署时间:大约 30 分钟
先决条件
在部署此解决方案之前,请确保它适用于 AWS Control Tower 管理员。
当您准备好使用 AWS Control Tower 控制台设置着陆区时 APIs,或者按照以下步骤操作:
要开始使用 AWS Control Tower,请参阅:AWS 控制塔入门
要了解如何自定义着陆区,请参阅:自定义着陆区
要启动和部署您的着陆区,请参阅:着陆区部署指南
部署概述
使用以下步骤在 AWS 上部署此解决方案。
注意
S3 存储桶配置-仅适用于管理员。这是一次性设置步骤,最终用户不应重复此步骤。S3 存储桶存储部署包,包括 ASR 运行所需的 AWS CloudFormation 模板和 Lambda 代码。这些资源是使用 CfCt 或部署的 StackSet。
1. 配置 S3 存储桶
设置用于存储和提供部署包的 S3 存储桶。
2. 设置 环境
准备构建和部署过程所需的必要环境变量、凭证和工具。
3. 配置 S3 存储桶策略
定义并应用适当的存储桶策略来控制访问和权限。
4. 准备构建
编译、打包或以其他方式准备您的应用程序或资产以进行部署。
5. 将包部署到 S3
将准备好的构建项目上传到指定的 S3 存储桶。
第 2 步:将堆栈部署到 AWS Control Tower
1. 为 ASR 组件创建生成清单
定义一份列出所有 ASR 组件及其版本、依赖关系和编译说明的构建清单。
2. 更新 CodePipeline
修改 AWS CodePipeline 配置以包括部署 ASR 组件所需的新构建步骤、项目或阶段。
步骤 1:构建并部署到 S3 存储桶
AWS Solutions 使用两个存储桶:一个用于全球访问模板的存储桶(通过 HTTPS 进行访问)和用于访问区域内资产(例如 Lambda 代码)的区域存储桶。
1. 配置 S3 存储桶
选择一个唯一的存储桶名称,例如 asr-staging。在终端上设置两个环境变量,一个应该是基本存储桶名称,后缀为-reference,另一个应以您的预期部署区域作为后缀:
export BASE_BUCKET_NAME=asr-staging-$(date +%s) export TEMPLATE_BUCKET_NAME=$BASE_BUCKET_NAME-reference export REGION=us-east-1 export ASSET_BUCKET_NAME=$BASE_BUCKET_NAME-$REGION
2. 环境设置
在您的 AWS 账户中,使用这些名称创建两个存储桶,例如 asr-staging-reference和 asr-staging-us-east -1。(参考存储桶将存放 CloudFormation 模板,区域存储桶将存放所有其他资产,例如 lambda 代码包。) 您的存储桶应经过加密且不允许公开访问
aws s3 mb s3://$TEMPLATE_BUCKET_NAME/ aws s3 mb s3://$ASSET_BUCKET_NAME/
注意
创建存储桶时,请确保它们不可公开访问。使用随机存储桶名称。禁用公共访问。使用 KMS 加密。并在上传之前验证存储桶所有权。
3. S3 存储桶策略设置
更新 $TEMPLATE_BUCKET_NAME S3 存储桶策略以包含 PutObject 执行账户 ID 的权限。将此权限分配给执行账户中有权写入存储桶的 IAM 角色。此设置允许您避免在管理账户中创建存储桶。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::<template bucket name>/*", "arn:aws:s3:::<template bucket name>" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "<org id>" } } }, { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::<template bucket name>/*", "arn:aws:s3:::<template bucket name>" ], "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::<execute_account_id>:role/<iam_role_name>" } } } ] }
更改资产 S3 存储桶策略以包含权限。将此权限分配给执行账户中有权写入存储桶的 IAM 角色。对每个区域资产存储桶(例如 asr-staging-us-east -1、 asr-staging-eu-west -1 等)重复此设置,允许跨多个区域进行部署,而无需在管理账户中创建存储桶。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "<org id>" } } }, { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::<execute_account_id>:role/<iam_role_name>" } } } ] }
4. 构建准备
-
先决条件:
-
AWS CLI v2
-
带有 pip 的 Python 3.11+
-
AWS CDK 2.171.1+
-
Node.js 20+ 带有 npm
-
带导出插件的 Poetry v2
-
-
Git clon https://github.com/aws-solutions/automated-security-response-one-aws
.git
首先,请确保你已经在源文件夹中运行了 npm install。
接下来,从克隆存储库的部署文件夹中运行 build-s3-dist.sh,传递存储桶的根名称(例如 mybucket)和您正在构建的版本(例如 v1.0.0)。我们建议根据下载的版本使用 semver 版本 GitHub (例如 GitHub: v1.0.0,你的版本:v1.0.0.mybuild)
chmod +x build-s3-dist.sh export SOLUTION_NAME=automated-security-response-on-aws export SOLUTION_VERSION=v1.0.0.mybuild ./build-s3-dist.sh -b $BASE_BUCKET_NAME -v $SOLUTION_VERSION
5。将软件包部署到 S3
cd deployment aws s3 cp global-s3-assets/ s3://$TEMPLATE_BUCKET_NAME/$SOLUTION_NAME/$SOLUTION_VERSION/ --recursive --acl bucket-owner-full-control aws s3 cp regional-s3-assets/ s3://$ASSET_BUCKET_NAME/$SOLUTION_NAME/$SOLUTION_VERSION/ --recursive --acl bucket-owner-full-control
第 2 步:将堆栈部署到 AWS Control Tower
1. 为 ASR 组件生成清单
将 ASR 工件部署到 S3 存储桶后,更新 Control Tower 管道清单以引用新版本,然后触发管道运行,请参阅:controltower 部署
重要
为确保正确部署 ASR 解决方案,请参阅 AWS 官方文档,了解有关 CloudFormation 模板概述和参数描述的详细信息。以下信息链接:CloudFormation 模板参数概述指南
ASR 组件的清单如下所示:
region: us-east-1 #<HOME_REGION_NAME> version: 2021-03-15 # Control Tower Custom CloudFormation Resources resources: - name: <ADMIN STACK NAME> resource_file: s3://<ADMIN TEMPLATE BUCKET path> parameters: - parameter_key: UseCloudWatchMetricsAlarms parameter_value: "yes" - parameter_key: TicketGenFunctionName parameter_value: "" - parameter_key: LoadSCAdminStack parameter_value: "yes" - parameter_key: LoadCIS120AdminStack parameter_value: "no" - parameter_key: TargetAccountIDsStrategy parameter_value: "INCLUDE" - parameter_key: LoadCIS300AdminStack parameter_value: "no" - parameter_key: UseCloudWatchMetrics parameter_value: "yes" - parameter_key: LoadNIST80053AdminStack parameter_value: "no" - parameter_key: LoadCIS140AdminStack parameter_value: "no" - parameter_key: ReuseOrchestratorLogGroup parameter_value: "yes" - parameter_key: LoadPCI321AdminStack parameter_value: "no" - parameter_key: RemediationFailureAlarmThreshold parameter_value: "5" - parameter_key: LoadAFSBPAdminStack parameter_value: "no" - parameter_key: TargetAccountIDs parameter_value: "ALL" - parameter_key: EnableEnhancedCloudWatchMetrics parameter_value: "no" deploy_method: stack_set deployment_targets: accounts: # :type: list - <ACCOUNT_NAME> # and/or - <ACCOUNT_NUMBER> regions: - <REGION_NAME> - name: <ROLE MEMBER STACK NAME> resource_file: s3://<ROLE MEMBER TEMPLATE BUCKET path> parameters: - parameter_key: SecHubAdminAccount parameter_value: <ADMIN_ACCOUNT_NAME> - parameter_key: Namespace parameter_value: <NAMESPACE> deploy_method: stack_set deployment_targets: organizational_units: - <ORG UNIT> - name: <MEMBER STACK NAME> resource_file: s3://<MEMBER TEMPLATE BUCKET path> parameters: - parameter_key: SecHubAdminAccount parameter_value: <ADMIN_ACCOUNT_NAME> - parameter_key: LoadCIS120MemberStack parameter_value: "no" - parameter_key: LoadNIST80053MemberStack parameter_value: "no" - parameter_key: Namespace parameter_value: <NAMESPACE> - parameter_key: CreateS3BucketForRedshiftAuditLogging parameter_value: "no" - parameter_key: LoadAFSBPMemberStack parameter_value: "no" - parameter_key: LoadSCMemberStack parameter_value: "yes" - parameter_key: LoadPCI321MemberStack parameter_value: "no" - parameter_key: LoadCIS140MemberStack parameter_value: "no" - parameter_key: EnableCloudTrailForASRActionLog parameter_value: "no" - parameter_key: LogGroupName parameter_value: <LOG_GROUP_NAME> - parameter_key: LoadCIS300MemberStack parameter_value: "no" deploy_method: stack_set deployment_targets: accounts: # :type: list - <ACCOUNT_NAME> # and/or - <ACCOUNT_NUMBER> organizational_units: - <ORG UNIT> regions: # :type: list - <REGION_NAME>
2. 代码管道更新
将清单文件添加到 custom-control-tower-configuration .zip 并运行 CodePipeline,请参阅:代码管道概述