使用 Terraform 构建 ECR,在推送容器镜像时执行漏洞扫描
我叫寺冈,是一名基础设施工程师。
这次,我们将添加在 AWS ECR 中推送容器映像时执行漏洞扫描的设置。
我想尝试使用 Terraform 构建它。
ECR 是 AWS 的托管容器映像注册表。
它存储推送的容器镜像,但
用户必须注意镜像本身的漏洞。
作为ECR的功能之一,有一个设置可以在推送时自动运行漏洞扫描,所以
我想构建一个启用此设置的存储库。
创建 ECR 存储库
我们将使用名为 aws_ecr_repository 的资源。
#################### # 提供程序 #################### 变量 "aws_access_key" { 描述 = " AWS 访问密钥" } 变量 "aws_secret_key" { 描述 = "AWS 密钥" } 变量 "aws_role_arn" { 描述 = "AWS Role Arn" } 变量 "aws_region" { 默认 = "ap-northeast-1" } 提供商 "aws" { access_key = "${var.aws_access_key}" Secret_key = "${var.aws_secret_key}" 区域 = "${var.aws_region}" Should_role { role_arn = "${var.aws_role_arn}" } } ##### ############### # ECR #################### 资源 "aws_ecr_repository" "image-scan-test" { 名称=“图像扫描测试” image_tag_mutability =“可变” image_scanning_configuration { scan_on_push = true } }
在 image_scanning_configuration 块中将 scan_on_push 设置为 true。
让我们从 init 开始。
$ terraform init 正在初始化后端...正在初始化提供程序插件... - 检查可用的提供程序插件... - 正在下载提供程序“aws”的插件(hashicorp/aws)2.56.0... 以下提供程序没有任何配置中的版本约束,因此为了防止自动升级到可能包含重大更改的新主要版本,建议在配置中向相应的提供程序块添加 version = "..." 约束,并使用约束。下面建议的字符串。 * provider.aws: version = "~> 2.56" Terraform 已成功初始化!您现在可以开始使用 Terraform 来查看您的基础设施所需的任何更改。如果您曾经设置或更改 Terraform 的模块或后端配置,请重新运行此命令来重新初始化您的工作目录,如果您忘记了,其他命令将检测到它并在必要时提醒您这样做。
为了确保万无一失,请在反思之前运行计划。
$ terraform plan 正在计划之前刷新内存中的 Terraform 状态...刷新的状态将用于计算此计划,但不会持久保存到本地或远程状态存储 ------------。 -------------------------------------------------- ---------- 执行计划已生成,如下所示。资源操作用以下符号指示: + create 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 已生成执行计划,如下所示。 资源操作用以下符号表示: + create 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 表示销毁。 Terraform 将执行上述操作。 仅接受“是”。输入值:是 aws_ecr_repository.image-scan-test:正在创建... aws_ecr_repository.image-scan-test:0 秒后创建完成 [id=image-scan-test] 应用完成!已更改,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 标签 cved/cve-2019-9978 XXXXXXXXXXXX.dkr.ecr.ap-northeast-1 .amazonaws.com/image-scan-test:最新 $ docker Push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/image-scan-test:最新
推送后,在管理控制台查看。
扫描将自动执行,您可以检查结果。
即便如此,针对大量漏洞的斗争也永无止境。 。 。
概括
你觉得怎么样?
设置本身很简单,如果您在 Terraform 中对其进行编码,则稍后部署将很容易。
请大家尝试使用一下。
如果您觉得这篇文章有帮助,请点赞!