新闻中心

通过 AWS Secrets Manager、AWS KMS 和 AWS Certificate M

2026-01-27 14:53:13

加强 DevOps 流水线并保护数据:AWS Secrets Manager、AWS KMS 和 AWS Certificate Manager

作者:Magesh Dhanasekaran 和 Karna Thandapani,日期:2024年1月10日

通过 AWS Secrets Manager、AWS KMS 和 AWS Certificate M

关键要点

在本篇文章中,我们将探讨如何使用 AWS 的数据保护服务,例如 AWS Secrets Manager、AWS Key Management Service (AWS KMS) 和 AWS Certificate Manager (ACM),来巩固 DevOps 流水线的安全性。这些服务不仅能增强流水线的整体安全性,而且还能确保敏感数据的保护。我们将通过一个三层 WordPress Web 应用程序的部署示例,说明如何在 DevOps 流水线中实施这些服务。

DevOps 流水线涉及持续的集成、交付和部署云基础设施和应用程序,这些系统可能存储和处理敏感数据。在当前越来越多组织采用 DevOps 流水线进行应用程序和云基础设施部署的背景下,保护敏感数据已成为一项重要任务。

需要保护的敏感数据类型包括:

凭证:用于访问云资源、数据库和应用程序的用户名和密码。配置文件:包含应用程序、数据库和其他系统的设置和配置信息的文件。证书:用于加密系统间通信的 TLS 证书。密钥:其他用于访问或进行身份验证的敏感数据,如私钥、安全令牌或第三方服务的密码。

未经授权的访问或数据泄露可能导致生产力损失、法律责任、财务损失及声誉损害。因此,将数据保护放在优先位置,有助于有效降低这些风险。

安全性分为两部分:流水线安全性 和 流水线中的安全性。前者关注实现保护整个 DevOps 流水线即基础设施、工具和过程的一系列安全措施;而后者则集中在开发和部署过程中直接嵌入安全实践和控制。

通过使用 Secrets Manager、AWS KMS 和 ACM,您可以加强 DevOps 流水线的安全性,保护敏感数据,并促进应用程序的安全合规部署。我们的目标是为您提供知识和工具,以建立安全的 DevOps 环境,确保您流水线基础设施的完整性,并在整个软件交付过程中保护组织的敏感数据。

示例应用架构概述

因其普及性、开源特性、容器化支持以及与 AWS 服务的集成,WordPress 被选为该 DevOps 流水线实施的用例。AWS 云中 WordPress 应用程序的示例架构使用了以下服务:

服务名称描述Amazon Route 53负责将流量路由到正确的 AWS 资源的 DNS Web 服务。Amazon CloudFront全球内容分发网络 (CDN) 服务,以低延迟和高传输速率安全地向用户传递数据和视频。AWS WAF网络应用程序防火墙,保护 Web 应用程序不受常见网络攻击。AWS Certificate Manager (ACM)提供 SSL/TLS 证书以启用安全连接的服务。Application Load Balancer (ALB)将流量路由到 Amazon EKS 中的适当容器。Amazon Elastic Kubernetes Service (Amazon EKS)一个可扩展且高可用的 Kubernetes 集群,用于部署容器化应用程序。Amazon Relational Database Service (Amazon RDS)提供可扩展且安全的托管关系数据库服务。AWS Key Management Service (AWS KMS)一个密钥管理服务,允许您创建和管理用于保护静态数据的加密密钥。AWS Secrets Manager提供轮换、管理和检索数据库凭据的能力的服务。AWS CodePipeline一个完全托管的持续交付服务,帮助自动化发布流水线,实现快速可靠的应用程序和基础设施更新。AWS CodeBuild一个完全托管的持续集成服务,编译源代码、运行测试并生成可部署的软件包。AWS CodeCommit一个安全、高度可扩展、全面管理的源控制服务,用于承载私有 Git 存储库。

在探讨示例应用架构的具体细节之前,重要的是澄清图表中的几个方面。尽管图中仅显示了一个可用性区域 (AZ),但请注意,应用程序和基础设施可以设计为高可用,以在多个 AZ 中改善故障容忍。这意味着即使某个 AZ 不可用,其他 AZ 中的服务也能继续运行,确保用户持续享受服务。

数据保护服务工作流程概述

首先,我们将讨论如何保护您的流水线。您可以使用 Secrets Manager 安全存储敏感信息,例如 Amazon RDS 凭据。我们会展示如何在 DevOps 流水线中从 Secrets Manager 检索这些密钥,以访问数据库。通过使用 Secrets Manager,您可以保护关键凭证,并帮助防止未授权访问,从而加强流水线的安全性。

接下来,我们将讨论数据加密。使用 AWS KMS,您可以对静态数据进行加密。我们将说明如何使用 AWS KMS 加密存储在 Amazon RDS 中的数据,确保其安全且不被未授权访问。通过实施 KMS 加密,您为数据添加了一层额外保护,增强了流水线的整体安全性。

黑石加速器官网入口

最后,我们将讨论如何在您的 WordPress 应用程序中保护连接传输中的数据。ACM 用于管理 SSL/TLS 证书。我们将向您展示如何使用 ACM 配置和管理 SSL/TLS 证书,以及如何配置 Amazon EKS 集群以使用这些证书来实现用户与 WordPress 应用程序之间的安全通信。借助 ACM,您可以建立安全的通信渠道,以确保数据隐私,并增强流水线的安全性。

注意: 本文中的代码示例仅用于演示关键概念。实际代码可在 GitHub 查找。

使用 Secrets Manager 保护敏感数据

在这个示例应用架构中,Secrets Manager 被用于存储和管理敏感数据。提供的 AWS CloudFormation 模板设置了一个 Amazon RDS for MySQL 实例,并通过使用 KMS 加密安全地设置了主用户密码。

以下是在该示例应用架构中实施 Secrets Manager 的步骤:

创建一个 Secrets Manager 密钥。使用 CloudFormation 创建一个包含 Amazon RDS 数据库凭据的 Secrets Manager 密钥。使用 AWS KMS 客户管理密钥对秘密进行加密。示例代码: yaml RDSMySQL Type AWSRDSDBInstance Properties ManageMasterUserPassword true MasterUserSecret KmsKeyId !Ref RDSMySqlSecretEncryption

CloudFormation 模板中的 ManageMasterUserPassword true 行指示堆栈将管理 Amazon RDS 实例的主用户密码。为了安全地检索主用户密码,CloudFormation 模板使用 MasterUserSecret 参数,从 Secrets Manager 中检索密码。同时,KmsKeyId !Ref RDSMySqlSecretEncryption 行指定用于加密 Secrets Manager 中密钥的 KMS 密钥 ID。

该设计确保主用户密码在检索和设置时不会以明文形式暴露。此外,为加密指定 KMS 密钥 ID 为 Secrets Manager 中存储的密钥增添了一层额外的安全保障。

从 Secrets Manager 中检索秘密。Secrets store CSI 驱动程序是一个 Kubernetes 原生驱动程序,提供与 Amazon EKS 的 Secrets Store 集成的通用接口。secretsstorecsidriverprovideraws 是一个特定的提供程序,与 Secrets Manager 进行集成。设置 Amazon EKS 的第一步是创建一个 SecretProviderClass,指定 Amazon RDS 数据库的密钥 ID。然后在 Kubernetes 部署对象中使用这个 SecretProviderClass 来部署 WordPress 应用程序,并在部署期间动态检索 Secrets Manager 中的密钥。这个过程完全动态且验证不会在任何地方记录秘密。SecretProviderClass 在特定的应用命名空间中创建,例如 wp 命名空间。示例代码: yaml apiVersion secretsstorecsixk8sio/v1 kind SecretProviderClass spec provider aws parameters objects objectName rds!db0x00000x00000x00000x00000x0000

在使用 Secrets Manager 时,请注意以下最佳实践,以管理和保护 Secrets Manager 密钥:

使用 AWS 身份和访问管理 (IAM) 身份策略来定义哪些人可以对 Secrets Manager 密钥执行特定操作,例如读取、写入或删除。使用 Secrets Manager 资源策略来 管理对密钥的访问,在更细粒度的水平上定义谁可以访问特定的密钥。使用 AWS KMS 密钥加密 Secrets Manager 密钥。使用 CloudFormation 模板自动化 Secrets Manager 密钥的创建和管理,包括轮换密钥。使用 AWS CloudTrail 监控对 Secrets Manager 密钥的访问和更改。使用 CloudFormation 钩子在部署前后验证 Secrets Manager 密钥。如果密钥验证未通过,将回滚部署。

使用 AWS KMS 加密数据

数据加密涉及将敏感信息转换为仅能通过适当地解密密钥访问的编码形式。通过在流水线中实施加密措施,您可以确保即使未授权人员获得数据访问权限,他们也无法理解数据的内容。

以下是在本示例应用架构中实现 AWS KMS 静态数据加密的步骤:

亚马逊 RDS 密钥加密:加密密钥:使用 AWS KMS 客户管理密钥加密 Secrets Manager 中存储的密钥,以确保它们在 DevOps 构建过程中保持机密。示例代码: yaml RDSMySQL Type AWSRDSDBInstance Properties ManageMasterUserPassword true MasterUserSecret KmsKeyId !Ref RDSMySqlSecretEncryption

RDSMySqlSecretEncryption Type AWSKMSKey Properties KeyPolicy Id rdsmysqlsecretencryption Statement Sid Allow administration of the key Effect Allow Action [ kmsCreate kmsDescribe kmsEnable kmsList kmsPut ] Sid Allow use of the key Effect Allow Action [ kmsDecrypt kmsGenerateDataKey kmsDescribeKey ]

亚马逊 RDS 数据加密:使用 CloudFormation 为 Amazon RDS 实例启用加密。在 CloudFormation 堆栈中指定 KMS 密钥 ARN,RDS 将使用指定的 KMS 密钥加密静态数据。示例代码: yaml RDSMySQL Type AWSRDSDBInstance Properties KmsKeyId !Ref RDSMySqlDataEncryption StorageEncrypted true

RDSMySqlDataEncryption Type AWSKMSKey Properties KeyPolicy Id rdsmysqldataencryption Statement Sid Allow administration of the key Effect Allow Action [ kmsCreate kmsDescribe kmsEnable kmsList kmsPut ] Sid Allow use of the key Effect Allow Action [ kmsDecrypt kmsGenerateDataKey kmsDescribeKey ]

Kubernetes Pods 存储:使用加密的 亚马逊弹性块存储Amazon EBS 卷来存储配置数据。使用以下代码片段创建一个托管的加密的 Amazon EBS 卷,然后将其作为持久性卷声明 (PVC) 挂载到 Kubernetes pod。示例代码: yaml kind StorageClass provisioner ebscsiawscom parameters csistoragek8sio/fstype xfs encrypted true

kind Deployment spec volumes name persistentstorage persistentVolumeClaim claimName ebsclaim

亚马逊 ECR:为了保护 亚马逊弹性容器注册表Amazon ECR 中的静态数据,使用 AWS 管理控制台或 AWS Command Line Interface (AWS CLI) 启用加密。为 Amazon ECR 创建一个 KMS 密钥,并使用该密钥加密静态数据。使用 DevOps 流水线自动创建加密的 ECR 存储库,并启用静态数据加密,使用 CodePipeline 自动化 CloudFormation 堆栈的部署。在流水线中定义加密 Amazon ECR 存储库的创建。示例代码: yaml ECRRepository Type AWSECRRepository Properties EncryptionConfiguration EncryptionType KMS KmsKey !Ref ECREncryption

ECREncryption Type AWSKMSKey Properties KeyPolicy Id ecrencryptionkey Statement Sid Allow administration of the key Effect Allow Action [

                Sid Allow use of the key                 Effect Allow                 Action [                     kmsDecrypt                     kmsGenerateDataKey                     kmsDescribeKey                 ]

AWS 最佳实践:管理 AWS 环境中的加密密钥

为了有效管理加密密钥并确保 AWS 环境中静态数据的安全,建议遵循以下最佳实践:

为数据分类使用不同的 AWS KMS 客户管理 KMS 密钥,提供更好的密钥控制和管理。通过将创建和轮换密钥、设置密钥策略或授予权限等不同角色和责任分配给可信人员来强制执行职责分离。通过分离密钥管理职责,可以降低意外或故意泄露密钥的风险,提高整体安全性。使用 CloudTrail 监视 AWS KMS API 活动,检测潜在的安全事件。根据合规要求定期轮换 KMS 密钥。使用 CloudFormation 钩子验证 KMS 密钥策略,以确保其符合组织和合规要求。

采取这些最佳实践并在各种服务如 Amazon RDS、Kubernetes Pods 存储和 Amazon ECR 中实施静态数据加密,将帮助确保敏感数据保持在加密状态下。

使用 ACM 保护通信

安全通信是现代环境中的一项关键需求,在 DevOps 流水线上实施它对于确保基础设施安全、一致和可重复性至关重要。在此在 Amazon EKS 上运行的 WordPress 应用程序中,ACM 被用于实现端到端的安全通信。以下是实现该功能的步骤:

通过 DevOps 流水线使用 ACM 提供 TLS 证书使用 ACM 自动化创建和部署 TLS 证书。通过 AWS CloudFormation 模板创建证书,并将其作为基础设施代码的一部分进行部署。这确保了多个环境中创建和部署证书的一致性和安全性。示例代码: yaml DNSDomainCertificate Type AWSCertificateManagerCertificate Properties DomainName !Ref DNSDomainName ValidationMethod DNS

DNSDomainName Description dns domain name Type String Default examplecom

使用 AWS ALB Ingress
网络攻击影响了克里斯比奶霜的在线订购系统 媒体
网络攻击影响了克里斯比奶霜的在线订购系统 媒体
2026-01-27