选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

在亚马逊上使用AWS私有 CA TLS 在 A AWS pp Mesh 中激活 m EKS - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在亚马逊上使用AWS私有 CA TLS 在 A AWS pp Mesh 中激活 m EKS

由 Omar Kahil (AWS)、Emmanuel Saliu ()、Muhammad Shahzad (AWS) 和 Andy Wong (AWS) 创作 AWS

摘要

此模式显示如何在 A AWS pp M TLS esh 中使用私有证书颁发机构(AWS私有 CAAWS)的证书在 Amazon Web Services (AWS) 上实现相互传输层安全 (m)。它API通过适用于所有人的安全生产身份框架 (SDS) 使用 Envoy 秘密发现服务 (SPIFFE)。 SPIFFE是一个 Cloud Native Computing Foundation (CNCF) 开源项目,拥有广泛的社区支持,可提供精细的动态工作负载身份管理。要实施SPIFFE标准,请使用SPIRESPIFFE运行时环境。

TLS在 App Mesh 中使用 m 可以提供双向对等身份验证,因为它可以增加一层安全保护,TLS并允许网格中的服务验证正在建立连接的客户端。客户端-服务器关系中的客户端还会在会话协商过程中提供 X.509 证书。服务器使用此证书来识别和验证客户端。这有助于验证证书是否由受信任的证书颁发机构 (CA) 颁发,以及证书是否有效。

先决条件和限制

先决条件

  • 带有自我管理或托管节点组的亚马逊 Elastic Kubernetes Servic EKS e (Amazon) 集群

  • 已SDS激活的 App Mesh 控制器部署在集群上

  • 来自 Certifice Manager (ACM) 的私有AWS证书,由AWS私有 CA 颁发

限制

  • SPIRE无法在 AWS Fargate 上安装,因为SPIRE代理必须作为 Kubernetes 运行。 DaemonSet

产品版本

  • AWSApp Mesh 控制器图表 1.3.0 或更高版本

架构

下图显示了中包含 App Mesh 的EKS集群VPC。一个工作节点中的SPIRE服务器与其他工作节点中的SPIRE代理以及AWS私有 CA 通信。Envoy 用于SPIRE代理工作节点之间的TLS通信。

EKS带有SPIRE代理和服务器、App M TLS esh 和 Envoy 的集群工作节点。

下图说明了以下步骤:

  1. 颁发证书。

  2. 请求证书签名和证书。

工具

AWS 服务

  • AWS私有 CA — AWS 私有证书颁发机构(AWS私有 CA)允许创建私有证书颁发机构 (CA) 层次结构,包括根和下级 CACAs,而无需支付运营本地 CA 的投资和维护成本。

  • AWSApp Mes h — AWS App Mesh 是一种服务网格,可以更轻松地监控和控制服务。App Mesh 将服务通信方式标准化,为应用程序中的每个服务提供一致的可见性和网络流量控制。

  • 亚马逊 EKS — 亚马逊 Elastic Kubernetes Servic EKS e(亚马逊)是一项托管服务,您可以使用它来运行 AWS Kubernetes,而无需安装、操作和维护自己的 Kubernetes 控制平面或节点。

其他工具

  • Helm – Helm 是 Kubernetes 的软件包管理器,可帮助您在 Kubernetes 集群上安装和管理应用程序。此模式使用 Helm 来部署 AWS App Mesh 控制器。

  • AWSApp Mesh 控制器图表 — 此模式使用 AWS App Mesh 控制器图表在亚马逊上启用 A AWS pp Mesh EKS。

操作说明

任务描述所需技能

使用亚马逊设置 App Mesh EKS。

按照存储库中提供的基本部署步骤进行操作。

DevOps 工程师

安装 SPIRE。

使用 spi re _setup.yaml 在EKS集群SPIRE上安装。

DevOps 工程师

安装AWS私有 CA 证书。

按照AWS文档中的说明为您的私有根 CA 创建和安装证书。

DevOps 工程师

向集群节点实例角色授予权限。

若要将策略附加到集群节点实例角色,请使用其他信息部分中的代码。

DevOps 工程师

为AWS私有 CA 添加SPIRE插件。

要将插件添加到SPIRE服务器配置中,请使用 “其他信息” 部分中的代码。将 certificate_authority_arn Amazon 资源名称 (ARN) 替换为您的私有 CA ARN。使用的签名算法必须与私有 CA 上的签名算法相同。your_region替换为您所在AWS的地区。

有关该插件的更多信息,请参阅服务器插件: UpstreamAuthority “aws_pca”。

DevOps 工程师

更新 bundle.cert。

创建SPIRE服务器后,将创建一个spire-bundle.yaml文件。将 spire-bundle.yaml 文件中的 bundle.crt 值从私有 CA 更改为公共证书。

DevOps 工程师

设置环境

任务描述所需技能

使用亚马逊设置 App Mesh EKS。

按照存储库中提供的基本部署步骤进行操作。

DevOps 工程师

安装 SPIRE。

使用 spi re _setup.yaml 在EKS集群SPIRE上安装。

DevOps 工程师

安装AWS私有 CA 证书。

按照AWS文档中的说明为您的私有根 CA 创建和安装证书。

DevOps 工程师

向集群节点实例角色授予权限。

若要将策略附加到集群节点实例角色,请使用其他信息部分中的代码。

DevOps 工程师

为AWS私有 CA 添加SPIRE插件。

要将插件添加到SPIRE服务器配置中,请使用 “其他信息” 部分中的代码。将 certificate_authority_arn Amazon 资源名称 (ARN) 替换为您的私有 CA ARN。使用的签名算法必须与私有 CA 上的签名算法相同。your_region替换为您所在AWS的地区。

有关该插件的更多信息,请参阅服务器插件: UpstreamAuthority “aws_pca”。

DevOps 工程师

更新 bundle.cert。

创建SPIRE服务器后,将创建一个spire-bundle.yaml文件。将 spire-bundle.yaml 文件中的 bundle.crt 值从私有 CA 更改为公共证书。

DevOps 工程师
任务描述所需技能

向注册节点和工作负载条目SPIRE。

要向SPIRE服务器注册节点和工作负载(服务),请使用存储库中的代码。

DevOps 工程师

在 App Mesh 中创建一个TLS激活 m 的网格。

在 App Mesh 中创建一个新网格,其中包含微服务应用程序的所有组件(例如,虚拟服务、虚拟路由器和虚拟节点)。

DevOps 工程师

检查已注册的条目。

您可以通过运行以下命令来检查节点和工作负载的已注册条目。

kubectl exec -n spire spire-server-0 -- /opt/spire/bin/spire-server entry show

这将显示SPIRE代理的条目。

DevOps 工程师

部署和注册工作负载

任务描述所需技能

向注册节点和工作负载条目SPIRE。

要向SPIRE服务器注册节点和工作负载(服务),请使用存储库中的代码。

DevOps 工程师

在 App Mesh 中创建一个TLS激活 m 的网格。

在 App Mesh 中创建一个新网格,其中包含微服务应用程序的所有组件(例如,虚拟服务、虚拟路由器和虚拟节点)。

DevOps 工程师

检查已注册的条目。

您可以通过运行以下命令来检查节点和工作负载的已注册条目。

kubectl exec -n spire spire-server-0 -- /opt/spire/bin/spire-server entry show

这将显示SPIRE代理的条目。

DevOps 工程师
任务描述所需技能

验证我的TLS流量。

  1. 从前端服务向后端服务发送HTTP标头,然后使用注册的服务验证响应是否成功。SPIRE

  2. 对于相互TLS身份验证,您可以通过运行以下命令来检查ssl.handshake统计信息。

    kubectl exec -it $POD -n $NAMESPACE -c envoy -- curl http://localhost:9901/stats | grep ssl.handshake

    运行上一个命令后,应会看到侦听器 ssl.handshake 计数,该计数将类似于以下示例:

    listener.0.0.0.0_15000.ssl.handshake: 2
DevOps 工程师

验证证书是否由AWS私有 CA 颁发。

您可以通过查看SPIRE服务器中的日志来检查插件是否配置正确,以及证书是否已从上游私有 CA 颁发。运行以下命令。

kubectl logs spire-server-0 -n spire

然后查看生成的日志。此代码假定您的服务器名为 spire-server-0,并托管在您的 spire 命名空间中。您应该看到插件已成功加载,并且正在与上游私有 CA 建立连接。

DevOps 工程师

验证我的TLS流量

任务描述所需技能

验证我的TLS流量。

  1. 从前端服务向后端服务发送HTTP标头,然后使用注册的服务验证响应是否成功。SPIRE

  2. 对于相互TLS身份验证,您可以通过运行以下命令来检查ssl.handshake统计信息。

    kubectl exec -it $POD -n $NAMESPACE -c envoy -- curl http://localhost:9901/stats | grep ssl.handshake

    运行上一个命令后,应会看到侦听器 ssl.handshake 计数,该计数将类似于以下示例:

    listener.0.0.0.0_15000.ssl.handshake: 2
DevOps 工程师

验证证书是否由AWS私有 CA 颁发。

您可以通过查看SPIRE服务器中的日志来检查插件是否配置正确,以及证书是否已从上游私有 CA 颁发。运行以下命令。

kubectl logs spire-server-0 -n spire

然后查看生成的日志。此代码假定您的服务器名为 spire-server-0,并托管在您的 spire 命名空间中。您应该看到插件已成功加载,并且正在与上游私有 CA 建立连接。

DevOps 工程师

相关资源

其他信息

将权限附加到集群节点实例角色

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ACMPCASigning", "Effect": "Allow", "Action": [ "acm-pca:DescribeCertificateAuthority", "acm-pca:IssueCertificate", "acm-pca:GetCertificate", "acm:ExportCertificate" ], "Resource": "*" } ] } AWS Managed Policy: "AWSAppMeshEnvoyAccess"

添加SPIRE插件 ACM

Add the SPIRE plugin for ACM Change certificate_authority_arn to your PCA ARN. The signing algorithm used must be the same as the signing algorithm on the PCA. Change your_region to the appropriate AWS Region. UpstreamAuthority "aws_pca" { plugin_data { region = "your_region" certificate_authority_arn = "arn:aws:acm-pca:...." signing_algorithm = "your_signing_algorithm" } }
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。