在 Azure Kubernetes 服务 (AKS) 上创建 OpenID Connect 提供程序

OpenID Connect (OIDC) 扩展了 OAuth 2.0 授权协议,以用作 Microsoft Entra ID 颁发的其他身份验证协议。 在你的 Azure Kubernetes 服务 (AKS) 群集上,可以使用 OIDC 通过称为“ID 令牌”的安全令牌在启用了 OAuth 的应用程序之间启用单一登录 (SSO)。 借助 AKS 群集,可以启用 OpenID Connect (OIDC) 颁发者,从而允许 Microsoft Entra ID 或其他云提供商身份和访问管理平台发现 API 服务器的公用签名密钥。

AKS 自动定期轮换密钥。 如果不想等待,可以即刻手动轮换密钥。 OIDC 提供程序颁发的令牌的最长生命周期为一天。

警告

在现有群集上启用 OIDC 颁发者会将当前服务帐户令牌颁发者更改为新值,这会导致停机并重启 API 服务器。 如果在启用 OIDC 颁发者后,使用服务令牌的应用程序 Pod 仍处于失败状态,我们建议手动重启 Pod。

本文介绍了如何为群集创建、更新和管理 OIDC 颁发者。

重要

在群集上启用 OIDC 颁发者后,不支持禁用它。

需要定期刷新令牌。 如果使用 SDK,将自动轮换。 否则,需要每隔 24 小时手动刷新令牌。

先决条件

  • Azure CLI 版本 2.8.0 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI
  • AKS 支持 1.22 及更高版本的 OIDC 颁发者。

创建使用 OIDC 颁发者的 AKS 群集

可以使用带有 --enable-oidc-issuer 参数的 az aks create 命令创建 AKS 群集,以启用 OIDC 颁发者。 以下示例创建名为“myAKSCluster”的群集,其中一个节点位于 myResourceGroup 中:

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --enable-oidc-issuer \
    --generate-ssh-keys

使用 OIDC 颁发者更新 AKS 群集

可以使用带有 --enable-oidc-issuer 参数的 az aks update 命令更新 AKS 群集,以启用 OIDC 颁发者。 以下示例更新名为 myAKSCluster 的群集:

az aks update --resource-group myResourceGroup --name myAKSCluster --enable-oidc-issuer 

显示 OIDC 颁发者 URL

若要获取 OIDC 颁发者 URL,请运行 az aks show 命令。 替换群集名称和资源组名称的默认值。

az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv

默认情况下,颁发者设置为使用基 URL https://{region}.oic.prod-aks.azure.com,其中 {region} 的值与部署 AKS 群集的位置相匹配。

轮换 OIDC 密钥

若要轮换 OIDC 密钥,请运行 az aks oidc-issuer 命令。 替换群集名称和资源组名称的默认值。

az aks oidc-issuer rotate-signing-keys --name myAKSCluster --resource-group myResourceGroup

重要

轮换密钥后,旧密钥 (key1) 会在 24 小时后过期。 旧密钥 (key1) 和新密钥 (key2) 在轮换后的 24 小时内都有效。 如果要立即使旧密钥 (key1) 失效,则必须需要轮换 OIDC 密钥两次,然后使用投影的服务帐户令牌重启 Pod。 经过此过程,有效的是 key2 和 key3,而 key1 无效。

检查 OIDC 密钥

获取 OIDC 颁发者 URL

若要获取 OIDC 颁发者 URL,请运行 az aks show 命令。 替换群集名称和资源组名称的默认值。

az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv

输出应如下所示:

https://chinaeast2.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/

默认情况下,颁发者设置为使用基 URL https://{region}.oic.prod-aks.azure.com/{tenant_id}/{uuid},其中 {region} 的值与部署 AKS 群集的位置相匹配。 值 {uuid} 表示 OIDC 密钥,它是为每个群集随机生成的不可变的 guid。

获取发现文档

要获取发现文档,请复制 URL https://(OIDC issuer URL).well-known/openid-configuration 并在浏览器中将其打开。

输出应如下所示:

{
  "issuer": "https://chinaeast2.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/",
  "jwks_uri": "https://chinaeast2.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/openid/v1/jwks",
  "response_types_supported": [
    "id_token"
  ],
  "subject_types_supported": [
    "public"
  ],
  "id_token_signing_alg_values_supported": [
    "RS256"
  ]
}

获取 JWK 集文档

要获取 JWK 集文档,请从发现文档复制 jwks_uri,并将其粘贴到浏览器的地址栏中。

输出应如下所示:

{
  "keys": [
    {
      "use": "sig",
      "kty": "RSA",
      "kid": "xxx",
      "alg": "RS256",
      "n": "xxxx",
      "e": "AQAB"
    },
    {
      "use": "sig",
      "kty": "RSA",
      "kid": "xxx",
      "alg": "RS256",
      "n": "xxxx",
      "e": "AQAB"
    }
  ]
}

在密钥轮换期间,发现文档中存在一个其他密钥。

后续步骤