获取签名密钥 - Amazon EKS

获取签名密钥

Kubernetes 向每个 ProjectedServiceAccountToken Kubernetes 颁发一个 Service Account。此令牌是一个 OIDC 令牌,进一步讲是一种 JSON web token (JWT)。Amazon EKS 为包含令牌的签名密钥的每个集群托管公有 OIDC 端点,这样外部系统就可以验证。

您需要获取 OIDC 公有签名密钥(也称为 JSON Web Key Set (JWKS))才能验证 ProjectedServiceAccountToken。在应用程序中使用这些密钥来验证令牌。例如,您可以使用 PyJWT Python 库来验证使用这些密钥的令牌。有关 ProjectedServiceAccountToken 的更多信息,请参阅 IAM、Kubernetes 以及 OpenID Connect(OIDC)背景信息

先决条件
  • 集群的现有 AWS Identity and Access Management IAM OpenID Connect (OIDC) 提供商。要确定您是否已经拥有一个或是否要创建一个,请参阅 为集群创建 IAM OIDC 提供商

  • AWS CLI – 与 AWS 服务一起使用的命令行工具,包括 Amazon EKS。有关更多信息,请参阅 AWS Command Line Interface 用户指南中的安装、更新和卸载 AWS CLI。在安装 AWS CLI 后,建议您还要对其进行配置。有关更多信息,请参阅 AWS Command Line Interface 用户指南中的如何使用 aws configure 快速配置

获取 OIDC 公有签名密钥 (AWS CLI)
  1. 使用 AWS CLI 检索适用于 Amazon EKS 集群的 OIDC URL。

    $ aws eks describe-cluster --name my-cluster --query 'cluster.identity.oidc.issuer' "https://oidc.eks.us-east-1.amazonaws.com/id/8EBDXXXX00BAE"
  2. 使用 curl 或类似工具检索公有签名密钥。结果是 JSON Web Key Set (JWKS)

    重要

    Amazon EKS 会限制对 OIDC 端点的调用。您应该缓存公共签名密钥。请遵守响应中包含的 cache-control 标题。

    重要

    Amazon EKS 每七天轮换一次 OIDC 签名密钥。

    $ curl https://oidc.eks.us-east-1.amazonaws.com/id/8EBDXXXX00BAE/keys {"keys":[{"kty":"RSA","kid":"2284XXXX4a40","use":"sig","alg":"RS256","n":"wklbXXXXMVfQ","e":"AQAB"}]}