教程:在 CloudFormation 中使用 Bridgecrew 强制执行安全和合规性策略





0/5 (0投票)
在本文中,我们将介绍配置 Bridgecrew 以扫描 CloudFormation 部署、运行扫描、查找问题并修复问题的过程。
AWS CloudFormation 通过利用自动化和配置即代码,使云资源调配变得简单且可扩展。将云基础设施和应用程序定义为代码,可以简化重复的 DevOps 任务,并为您提供应用程序和环境配置的单一事实来源。
这使得确保您的基础设施即代码 (IaC) 资源遵循安全最佳实践变得更加重要——您的 CloudFormation 配置现在是您代码库的另一部分,应该像任何其他代码审查一样进行测试和扫描以查找错误和风险。
借助 Bridgecrew,您可以扫描您的 IaC 代码库和已部署的资源,发现配置错误,并快速修复问题。在本文中,我们将介绍配置 Bridgecrew 以扫描 CloudFormation 部署、运行扫描、查找问题并修复问题的过程。
使用 CloudFormation 进行基础设施即代码
CloudFormation 允许您使用模板定义 AWS 基础设施,您可以将这些模板检入版本控制或存储在 S3 存储桶中。
CloudFormation 模板是 JSON 或 YAML 文件。例如,以下模板定义了一个 S3 存储桶
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "AWS CloudFormation Sample Template: Sample template showing how to create a publicly accessible S3 bucket.",
"Resources" : {
"S3Bucket" : {
"Type" : "AWS::S3::Bucket",
"Properties" : {
"AccessControl" : "PublicRead",
"WebsiteConfiguration" : {
"IndexDocument" : "index.html",
"ErrorDocument" : "error.html"
}
},
"DeletionPolicy" : "Retain"
}
},
"Outputs" : {
"WebsiteURL" : {
"Value" : { "Fn::GetAtt" : [ "S3Bucket", "WebsiteURL" ] },
"Description" : "URL for website hosted on S3"
},
"S3BucketSecureURL" : {
"Value" : { "Fn::Join" : [ "", [ "https://", { "Fn::GetAtt" : [ "S3Bucket", "DomainName" ] } ] ] },
"Description" : "Name of S3 bucket to hold website content"
}
}
}
您可以使用 AWS CLI 在几秒钟内创建此存储桶
aws cloudformation create-stack --stack-name myteststack --template-body file:///home/testuser/mytemplate.json
使用 CloudFormation 定义基础设施的好处在于,它允许您在模板部署之前对其进行审核。当您这样做时,您就是在将安全最佳实践融入您的开发和部署生命周期。
开始使用 Bridgecrew
CloudFormation 使我们能够完全控制 AWS 中资源的创建、更改和删除。通过 CloudFormation,可以轻松地选择和部署 AWS 示例模板 中提供的数百个现成可用模板。由于这些模板仅以功能为设计目标,因此很容易忘记重要的安全配置,从而导致生产环境中运行不安全的服务。
这就是为什么在部署之前扫描 CloudFormation 模板如此重要。Bridgecrew 集成到您的工作流程中,并在安全问题造成任何损害之前阻止它们。
要开始,请检查您是否具备以下先决条件
Bridgecrew CLI 可在 Windows、Mac 和 Linux 上运行。您可以使用 pip 进行安装
pip install bridgecrew
或
pip3 install bridgecrew
如果遇到问题,请尝试 备用安装说明。
使用 Bridgecrew 分析 CloudFormation 配置
在本教程中,我们将首先测试 Bridgecrew CLI 与 CfnGoat 模板。CfnGoat 是 Bridgecrew 的一个故意设计为易受攻击的项目,旨在帮助演示 AWS CloudFormation 中的常见错误和安全最佳实践。
首先,克隆存储库
git clone https://github.com/bridgecrewio/cfngoat.git
要运行 Bridgecrew CLI,您需要 Bridgecrew API 令牌,然后才能将结果报告给 Bridgecrew。要获取它,请在登录您的 Bridgecrew 账户时转到集成 > API 令牌,然后复制令牌。
在命令中使用该令牌将结果发送到 Bridgecrew
bridgecrew -f cfngoat.yaml --bc-api-key YOUR_API_KEY
您也可以使用 -d 扫描整个目录
bridgecrew -d cfn --framework cloudformation --bc-api-key YOUR_API_KEY
Bridgecrew 内置了 数百项 AWS 安全和合规性策略。要获取安全检查列表,请使用 -l 或 --list
bridgecrew --list
在许多情况下,您可能只对运行少数几项检查感兴趣。在这种情况下,您可以添加 -c 或 --check 选项
bridgecrew -f cfngoat.yaml -c CKV_AWS_1,CKV_AWS_2 --bc-api-key YOUR_API_KEY
或者,如果您想运行除某些检查之外的所有检查,请使用 --skip-check 选项
bridgecrew -f cfngoat.yaml --skip-check CKV_AWS_1,CKV_AWS_2 --bc-api-key YOUR_API_KEY
结果显示所有失败的检查,以及解释原因和如何修复它们的指南链接。在某些情况下,报告中包含配置错误的原始代码片段
Check: CKV_AWS_56: "Ensure S3 bucket has 'restrict_public_bucket' enabled" FAILED for resource: AWS::S3::Bucket.LogsBucket File: /cfngoat.yaml:644-662 Guide: https://docs.bridgecrew.io/docs/bc_aws_s3_22 644 | Type: AWS::S3::Bucket 645 | DeletionPolicy: Delete 646 | Properties: 647 | BucketName: !Sub "${AWS::AccountId}-${CompanyName}-${Environment}-logs" 648 | AccessControl: LogDeliveryWrite 649 | VersioningConfiguration: 650 | Status: Enabled 651 | BucketEncryption: 652 | ServerSideEncryptionConfiguration: 653 | - ServerSideEncryptionByDefault: 654 | KMSMasterKeyID: !Ref LogsKey 655 | SSEAlgorithm: aws:kms 656 | Tags: 657 | - Key: Name 658 | Value: !Sub "${AWS::AccountId}-${CompanyName}-${Environment}-logs"
将 Bridgecrew 与 AWS 开发工具套件集成
在上一个部分中,我们使用 Bridgecrew CLI 在将更改提交到代码存储库之前进行了一些快速扫描。但是,强迫每个开发人员在他们的机器上手动运行扫描是不方便的。我们需要一种更智能的方法,一种能够持续审计代码的方法。
Bridgecrew 支持所有流行的版本控制系统和 CI/CD 平台。例如,我们可以设置 Bridgecrew,使其在每次开发人员提交到 GitHub 存储库时运行。
本节将向您展示如何通过将 Bridgecrew 与 AWS CodeCommit 和 AWS CodeBuild 集成来持续扫描 CloudFormation 模板。
集成需要三个步骤
- 将您的代码上传到 CodeCommit。
- 配置 CodeBuild 以审计您的代码。
- 设置 CodePipeline 以在每次更改时重新运行审计。
上传您的代码到 CodeCommit
AWS CodeCommit 是一个类似于 GitHub 或 GitLab 的 Git 托管和版本控制系统,但它仅适用于私有存储库。您可以将 Bridgecrew 与 CodeCommit 集成,以自动扫描您的 CloudFormation 模板是否存在安全和合规性错误。
要将 Bridgecrew 与 CodeCommit 集成,您首先需要一个具有 CodeCommit 访问权限的 IAM 用户。打开您的 AWS IAM 服务,并通过 SSH 密钥或 用户+密码组合 配置访问。
其次,转到 AWS CodeCommit 服务并创建一个存储库
第三,将您的代码上传到新存储库
git remote remove origin git remote add origin https://git-codecommit.<YOUR_REGION>.amazonaws.com/v1/repos/cfngoat git push origin master
为获得最佳结果,请添加 repo-id 和 branch 选项,以便 Bridgecrew 在仪表板中显示正确的详细信息
bridgecrew -f cfngoat.yaml --bc-api-key YOUR_API_KEY --repo-id AWS_ACCOUNT/REPO_NAME--branch master
存储库 ID 可以采用任何形式,只要它遵循 owner/name 格式即可。在 AWS 中,所有者通常是账户 ID 或别名。
集成到 CodeCommit 后,我们就可以使用 CodeBuild 和 CodePipeline 设置我们的持续工作流程了。
配置 CodeBuild 以扫描您的模板
AWS CodeBuild 是一个 CI/CD 平台,可以构建项目、运行作业和部署基础设施。我们将使用它在部署之前扫描 CloudFormation 模板。
首先,检索您的连接命令。为此,请打开 Bridgecrew 账户中的集成菜单,然后选择AWS Code Build
复制所示的命令并在您的终端中运行
aws ssm put-parameter --name bridgecrew_api_key --value YOUR_API_KEY --type SecureString
注意:如果命令失败,您的 IAM 用户可能没有在 AWS Systems Manager (SSM) 中创建参数的正确权限。在这种情况下,您需要向用户添加写入权限。
接下来,复制屏幕下半部分显示的 YAML 代码并将其放在手边
现在转到您的 AWS CodeBuild 服务并选择创建构建项目
选择您的 CodeCommit 存储库
在环境镜像下,选择托管镜像。然后选择Ubuntu > standard:4.0。
让 AWS 为您创建服务角色。记下它的名称。
接下来是构建规范。选择插入命令,然后选择切换到编辑器并粘贴您之前从 Bridgecrew 复制的 YAML 代码。完全覆盖以前的内容。
选择创建构建项目以完成设置。
您需要授予 CodeBuild 刚刚创建的角色访问权限。为此,请返回 IAM 服务并找到它
选择添加内联策略,然后在搜索框中键入“Systems Manager”。
勾选 GetParamets 读取权限。
向下滚动,然后在资源下,选择特定。选择添加 ARN。填写区域和账户号码。键入“bridgecrew_api_key”作为参数名称
选择添加,然后选择审核策略 > 创建策略。
设置 CodePipeline 以触发扫描
如果您希望 CodeBuild 在每次更新时运行扫描,您需要配置 AWS CodePipeline。您可以跳过此步骤,但如果您这样做,您将只能运行手动扫描。
要进行设置,请转到 AWS CodePipeline 并选择创建管道
为管道命名后,选择下一步,然后选择AWS Code Commit 作为源提供商和您的存储库
接下来,选择区域和 CodeBuild 项目名称
除非您打算立即部署,否则可以跳过部署阶段。
选择创建管道,它应该会立即开始。
如果一切顺利,管道应该会在构建阶段*失败*。这是正常的,因为 cfngoat 代码是故意设计有安全漏洞的。一旦问题得到修复,管道状态应变为绿色。
您可以在构建作业日志中看到错误报告。
我们在运行中遇到的第一个失败的检查是 CKV_AWS_3
,它测试 AWS Elastic Block Store (EBS) 中的数据是否已加密。在我们的示例中,数据未加密,因此检查失败。
您也可以在您的 Bridgecrew 账户中找到这些错误,您可以在其中按账户、类型、严重性等进行过滤。
Bridgecrew 平台还提供强大的合规性报告和仪表板,以帮助您跟踪构建时和运行时安全状态。
使用 Bridgecrew 解决 AWS 中的安全错误
正如我们到目前为止所展示的,Bridgecrew 提供了在部署之前审计 CloudFormation 模板的策略和工作流程。但已运行的基础设施怎么办?
要获得持续的 AWS 云安全监控,请将 Bridgecrew 与您的 AWS 账户连接。
选择启动堆栈以运行 AWS 只读 CloudFormation 堆栈。然后,系统将提示您创建一个预填充了 Bridgecrew 连接详细信息的 CloudFormation 模板。
选择“我已确认…”旁边的复选框,以允许创建 IAM 资源,然后选择创建堆栈。
集成后,Bridgecrew 将启用提交到云的覆盖,以便您可以解决开发生命周期中任何阶段的安全错误。Bridgecrew 包含数百项检查,并运行 CIS Amazon Web Services Foundations Benchmark 安全评估,并增加了 40 多项涵盖 HIPAA 和 GDPR 等法规的测试。
后续步骤
我们已经了解了如何将自动安全检查集成到使用 Bridgecrew 的 AWS 部署中。现在,您可以随着基础设施的增长保持其安全性。
查看这些资源以继续学习云安全