[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

使用 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 中对其进行编码,则稍后部署将很容易。
请大家尝试使用一下。

如果您觉得这篇文章有帮助,请点赞!
1
加载中...
1 票,平均:1.00 / 11
2,382
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

写这篇文章的人

关于作者

寺冈由纪

于 2016 年加入 Beyond,目前是他担任基础设施工程师
MSP 的第六个年头,他负责排除故障,同时
使用 AWS 等公共云设计和构建基础设施。
最近,我
一直在使用 Terraform 和 Packer 等 Hashicorp 工具作为构建 Docker 和 Kubernetes 等容器基础设施以及自动化操作的一部分,并且我
还扮演了在外部学习小组和研讨会上发言的传播者的角色。

・GitHub
https://github.com/nezumisannn

・演示历史
https://github.com/nezumisannn/my-profile

・演示材料(SpeakerDeck)
https://speakerdeck.com/nezumisannn

・认证:
AWS认证解决方案架构师-
谷歌云专业云架构师