你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Key Vault 机密存储扩展配置参考

可以在四个位置配置 SSE:创建或更新扩展、资源、 AKVSyncSecretSync kubernetes 资源和 kubernetes 资源 SecretProviderClass 时提供给 Arc 基础结构的配置设置。

Arc 扩展配置设置

可以在创建 SSE Arc 扩展实例时设置配置设置,也可以稍后进行更新。 分别用于--configuration-settings <setting>=<value>az k8s-extension create ...az k8s-extension update ...创建或更新 SSE 实例。

SSE 接受以下 Arc 扩展配置参数:

参数名称 DESCRIPTION 默认值
rotationPollIntervalInSeconds 指定 SSE 检查或更新其管理机密的频率。 3600(1 小时)
enablePartialSecretSync false仅当成功从 Azure Key Vault (AKV) 提取每个包含的项时,才会更新机密。 true如果机密中的每个项成功提取,则更新机密中的每个项时,而不考虑机密中的其他项是否成功。 true
jitterSeconds 指定最大附加 SecretSync 抖动。 SSE 等待 0 和 jitterSeconds 每次考虑 SecretSync 资源的随机时间。 每次更新 SecretSync 或经过之后 rotationPollIntervalInSeconds ,都会发生此延迟。 有关更多指南,请参阅 AKV 速率限制 0 (无抖动)

AKVSync 资源(预览版)

AKVSync 资源通过将配置合并到单个资源中来简化最常见的 SSE 用例。 此单一资源更易于人工配置,并且不太容易出现不一致。 应用后, AKVSync 资源将转换为其等效 SecretSync 资源和资源 SecretProviderClass 。 请勿修改自动生成 SecretSync 的资源 SecretProviderClass ;它们将根据需要自动更新。

简化的配置是一项预览功能,可能受益于即将推出的版本中的细微更改。 直接配置样式仍可用于所有部署。

示例:

kind: AKVSync
apiVersion: secret-sync.x-k8s.io/v1alpha1
metadata:
  name: my-akv-secrets
  namespace: workload-namespace
spec:
  keyvaultName: exampleKeyvault
  clientID:  "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
  tenantID:  "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
  serviceAccountName: workload-serviceaccountname
  objects:
    - secretInAKV: "secret-A"
    - secretInAKV: "secret-B"
      kubernetesSecretName: "k8s-secret-b"
      labels:
        - test-label-0: "label-value-0"
      annotations:
        - test-annotation-0: "annotation-value-0"
      versionHistory: 3
    - kubernetesSecretName: "compound-secret"
      mapping:
        - dataKey: "username"
          secretInAKV: secret-A
        - dataKey: "password"
          secretInAKV: secret-B
          version: 1

价值观

  • metadata.name(必需):此 AKVSync 资源的名称。

在 .spec 中:

  • serviceAccountName(必需):用于访问 Kubernetes 机密存储的 Kubernetes 服务帐户。 此服务帐户应与托管标识联合,并有权访问 Azure Key Vault 中的机密。

  • clientID(必需):有权访问所需机密的托管标识的 clientID。 此托管标识必须具有与命名服务帐户关联的联合凭据。

  • tenantID(必需):包含 AKV 实例的 Azure 租户的 ID。

  • keyvaultName(必需):密钥保管库的名称。

  • objects(required):项列表(secretInAKVkubernetesSecretName)。 项可以是从 AKV 提取的机密,也可以是可能包含 AKV 中许多项的复杂“复合机密”。

    • secretInAKV(可选):应从 AKV 中提取的机密的名称。

      • kubernetesSecretName(可选):新 Kubernetes 机密的名称。
      • labels(可选):要应用于机密对象的附加标签的键值对列表。
      • annotations(可选):要应用于机密对象的附加批注的键值对列表。
      • versionHistory(可选):默认值为 1。 SSE 从 AKV 下载此多版本的机密。 版本存储在 Kubernetes 机密中,其密钥名为“v0”、“v1”、“v2”等,“v0”是最新版本。
    • kubernetesSecretName(可选):定义 Kubernetes 中复合机密的名称,该机密可以包含任意数量的项。 在这种情况下,无法使用 versionHistory。 如果需要多个版本,则必须显式枚举它们。 可以选择指定 标签批注

      • mapping(required):数据键及其 AKV 源的列表。 没有默认键。
        • dataKey(必需):Kubernetes 机密中保存从 AKV 提取的机密的数据密钥的名称。

        • secretInAKV(必需):应从 AKV 提取并存储在指定数据密钥中的机密的名称。

        • version(可选):要从 AKV 提取的机密的版本。 0 是最新版本,1 是第二个最新版本,等等。

SecretSync 资源

SecretSync 资源配置 SSE 如何将机密和证书存储在 Kubernetes 机密存储中。 每个 SecretSync 资源定义一个 Kubernetes 机密,尽管它可能包含多个机密。

示例:

apiVersion: secret-sync.x-k8s.io/v1alpha1
kind: SecretSync
metadata:
  name: secret-sync-name
  namespace: workload-namespace
spec:
  serviceAccountName: workload-serviceaccountname
  secretProviderClassName: secret-provider-class-name
  secretObject:
    type: Opaque
    data:
    - sourcePath: aSecret/0
      targetKey: aSecret-data-key0
    - sourcePath: aSecret/1
      targetKey: aSecret-data-key1
    labels:
      - fromExample: absolutelyYes
    annotations:
      - exampleAnnotation: annotationValue 
  forceSynchronization: ArbitraryValue12354

价值观

  • metadata.name(必需):此 SecretSync 资源的名称。 注意:自动创建的机密资源的名称与此资源相同。

在 .spec 中:

  • serviceAccountName(必需):用于访问 Kubernetes 机密存储的 Kubernetes 服务帐户。 此服务帐户应与托管标识联合,并有权访问 Azure Key Vault 中的机密。
  • secretProviderClassName(必需):用于定义从 Azure Key Vault 提取的机密的 SecretProviderClass 资源的名称。
  • secretObject(必需):定义存储的机密资源的结构。
    • type(required):Kubernetes 机密对象的类型。 将此字段设置为 Opaque 不带强制结构的常规用途机密。 请参阅 Kubernetes 机密类型 ,获取有关如何构建特殊用途机密类型的指南。
    • data(必需):机密资源中的数据项列表。 必须至少有一项。 每个数据项必须包含以下两个字段:
      • sourcePath(必需):从 AKV 提取的项的路径。 从 AKV 提取命名机密的一个版本时,路径就是这样 <secret name>
        如果从 AKV 提取了多个命名机密版本,则最新版本的 sourcePath 为 <secret name>/0、第二个最新版本 <secret name>/1等。
        从 AKV 提取证书时,sourcePaths 取决于 SecretProviderClass 中的值 objectTypeobjectType当 SPC 中的密钥为“机密”时,证书和私钥在 sourcePaths <secret name>/tls.crt<secret name>/tls.key以及分别提供。
      • targetKey(必需):要将数据存储到的 Kubernetes 机密对象中的密钥。
    • labels(可选):要应用于机密对象的附加标签的键值对列表。
    • annotations(可选):要应用于机密对象的附加批注的键值对列表。
    • forceSynchronization(可选):更改此字段会触发 SSE 以重新检查 AKV 中的更改。 如果 SSE 找到更新的数据,Kubernetes 会像往常一样更新。 此字段的值不会影响 SSE 的行为方式。

SecretProviderClass 资源

SecretProviderClass 资源配置从 Azure Key Vault 提取的内容和方法。 此引用仅涵盖 SecretProviderClass 的 SSE 用例所需的字段。

示例:

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: secret-provider-class-name
  namespace: workload-namespace
spec:
  provider: azure
  parameters:
    clientID: "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
    tenantID: "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
    keyvaultName: exampleKeyvault
    objects: |
      array:
        - |
          objectName: aSecret
          objectType: secret
          objectVersionHistory: 2
        - |
          objectName: aCertificate
          objectType: secret

价值观

在 .spec 中:

  • provider(必需):使用 SSE 从 Azure Key Vault 提取机密时,请将此字段设置为此字段 azure
  • parameters(required):定义从中提取 AKV 机密的方式和位置。
    • clientID(必需):有权访问所需机密的托管标识的 clientID。 此托管标识必须具有与使用此 SecretProviderClass 的 SecretSync 资源中命名的服务帐户关联的联合凭据。
    • tenantID(必需):包含 AKV 实例的 Azure 租户的 ID。
    • keyvaultName(必需):keyvault 的名称。
    • objects(必需):一个 字符串 ,包含一个 YAML 片段,表示要从此 AKV 提取的项。 请密切关注该示例,了解对象字段的构造方式。 可以在 AKV 提供程序文档中找到用于 Azure Key Vault 的 SecretProviderClass 资源的其他示例。 对象 必须在“array”子对象中至少包含一个项。
      • objectName(必需):要从 AKV 提取的机密或证书的名称。
      • objectType(必需):从 AKV 提取机密时将此字段设置为 secret 此字段。
        提取证书时,将此字段设置为:
        • cert (仅提取证书)。
        • key 仅提取证书的公钥。
        • secret 获取证书 私钥。
      • objectVersionHistory(可选):如果存在且大于一个,则从 AKV 提取此多个版本,从最新版本开始。