使用 Terraform 构建 ECR,在推送容器镜像时执行漏洞扫描

我叫寺冈,是一名基础设施工程师。
在本文中,我将向 AWS ECR 添加一个设置,以便在推送容器镜像时扫描漏洞。
由于有机会,我将尝试使用 Terraform 来实现它。
ECR是AWS托管的容器镜像仓库。
它存储已推送的容器镜像,但
用户必须注意镜像本身存在的漏洞。
ECR 的一个特点是能够在推送时自动运行漏洞扫描,所以
我希望构建一个启用此设置的存储库。
创建 ECR 存储库
我们将使用资源 aws_ecr_repository。
#################### # 提供程序 ################### 变量 "aws_access_key" { description = "AWS 访问密钥" } 变量 "aws_secret_key" { description = "AWS 秘密密钥" } 变量 "aws_role_arn" { description = "AWS 角色 ARN" } 变量 "aws_region" { default = "ap-northeast-1" } 提供程序 "aws" { access_key = "${var.aws_access_key}" secret_key = "${var.aws_secret_key}" region = "${var.aws_region}" assume_role { role_arn = "${var.aws_role_arn}" } } #################### # # ECR ################### 资源 "aws_ecr_repository" "image-scan-test" { name = "image-scan-test" image_tag_mutability = "MUTABLE" image_scanning_configuration { scan_on_push = true } }
在 image_scanning_configuration 代码块中将 scan_on_push 设置为 true。
让我们从初始化开始。
$ terraform init 正在初始化后端... 正在初始化提供程序插件... - 检查可用的提供程序插件... - 正在下载提供程序“aws”(hashicorp/aws)2.56.0 的插件... 以下提供程序在配置中没有任何版本约束,因此安装了最新版本。为了防止自动升级到可能包含重大更改的新主版本,建议在配置中相应的提供程序块中添加 version = "..." 约束,约束字符串如下所示。 * provider.aws: version = "~> 2.56" Terraform 已成功初始化!您现在可以开始使用 Terraform 了。尝试运行“terraform plan”以查看您的基础架构所需的任何更改。所有 Terraform 命令现在应该都可以正常工作了。如果您设置或更改了 Terraform 的模块或后端配置,请重新运行此命令以重新初始化您的工作目录。如果您忘记了,其他命令会检测到并提醒您执行此操作(如果需要)。.
为了保险起见,在进行更改之前先运行一下计划。
$ terraform plan 在执行计划之前,正在刷新内存中的 Terraform 状态…… 刷新后的状态将用于计算此计划,但不会持久化到本地或远程状态存储。 --------------------------------------------------------------------------- 已生成执行计划,如下所示。资源操作用以下符号表示: + 创建 Terraform 将执行以下操作: # 将创建 aws_ecr_repository.image-scan-test + 资源 "aws_ecr_repository" "image-scan-test" { + arn = (应用后可知) + id = (应用后可知) + image_tag_mutability = "MUTABLE" + name = "image-scan-test" + registry_id = (应用后可知) + repository_url = (应用后可知) + image_scanning_configuration { + scan_on_push = true } } 计划:添加 1 个,更改 0 个,销毁 0 个。 --------------------------------------------------------------------------- 注意:您没有指定“-out”参数来保存此计划,因此 Terraform 无法保证如果随后运行“terraform apply”,这些操作将完全执行。.
点击“应用”以应用更改。
$ terraform apply 已生成执行计划,如下所示。资源操作用以下符号表示:+ 创建 Terraform 将执行以下操作:# 将创建 aws_ecr_repository.image-scan-test + resource "aws_ecr_repository" "image-scan-test" { + arn = (apply 后可知) + id = (apply 后可知) + image_tag_mutability = "MUTABLE" + name = "image-scan-test" + registry_id = (apply 后可知) + repository_url = (apply 后可知) + image_scanning_configuration { + scan_on_push = true } } 计划:1 个要添加,0 个要更改,0 个要销毁。是否要执行这些操作?Terraform 将执行上述操作。只有输入“yes”才能确认。请输入值:是 aws_ecr_repository.image-scan-test:正在创建... aws_ecr_repository.image-scan-test:创建完成,耗时 0 秒 [id=image-scan-test] 应用完成!资源:新增 1 个,更改 0 个,销毁 0 个
这一点已经有所体现。
将容器镜像推送到 ECR
我们将使用以下镜像,从其名称来看,该镜像似乎漏洞百出。
请事先将其拉取到本地。https
://hub.docker.com/r/cved/cve-2019-9978
要推送到 ECR,只需使用 aws ecr get-login 命令获取您的身份验证信息,然后
像往常一样运行 docker push 命令即可。
$(aws ecr get-login --no-include-email --region ap-northeast-1 --profile test-profile) $ docker tag cved/cve-2019-9978 XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/image-scan-test:latest $ docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/image-scan-test:latest
推送完成后,请从管理控制台进行检查。

扫描将自动进行,您可以查看结果。
漏洞太多,与漏洞的斗争永无止境……
概括
你觉得怎么样?
设置本身很简单,而且如果你用 Terraform 编写代码,以后部署也会更容易。
我鼓励大家都尝试一下。
如果您觉得这篇文章有帮助,请点赞!
1