操作指南:限制可从 secret 存储读取的密钥

通过在现有配置资源上添加限制性权限来定义 secret 范围。

除了限定哪些应用可以访问给定组件外,你还可以为应用将命名的 secret 存储组件限定到一个或多个密钥。通过定义 allowedSecrets 和/或 deniedSecrets 列表,你可以限制应用仅访问特定的密钥。

有关配置 Configuration 资源的更多信息:

配置密钥访问

Configuration 规范下的 secrets 部分包含以下属性:

secrets:
  scopes:
    - storeName: kubernetes
      defaultAccess: allow
      allowedSecrets: ["redis-password"]
    - storeName: localstore
      defaultAccess: allow
      deniedSecrets: ["redis-password"]

下表列出了 secret 范围的属性:

属性类型描述
storeNamestringsecret 存储组件的名称。storeName 在列表中必须唯一
defaultAccessstring访问修饰符。接受的值为 “allow”(默认)或 “deny”
allowedSecretslist可访问的密钥列表
deniedSecretslist不可访问的密钥列表

当存在包含至少一个元素的 allowedSecrets 列表时,应用只能访问该列表中定义的密钥。

权限优先级

allowedSecretsdeniedSecrets 列表值优先于 defaultAccess。请参阅以下示例场景中的工作方式:

场景defaultAccessallowedSecretsdeniedSecretspermission
1仅默认访问deny/allowdeny/allow
2默认拒绝且包含允许列表deny["s1"]"s1" 可被访问
3默认允许且包含拒绝列表allow["s1"]"s1" 不可被访问
4默认允许且包含允许列表allow["s1"]"s1" 可被访问
5默认拒绝且包含拒绝列表deny["s1"]deny
6默认拒绝/允许且同时包含两个列表deny/allow["s1"]["s2"]"s1" 可被访问

示例

场景 1:拒绝访问 secret 存储的所有密钥

在 Kubernetes 集群中,默认会为你的 Dapr 应用添加原生的 Kubernetes secret 存储。在某些场景中,可能需要拒绝给定应用对 Dapr 密钥的访问。要添加此配置:

  1. 定义以下 appconfig.yaml

    apiVersion: dapr.io/v1alpha1
    kind: Configuration
    metadata:
      name: appconfig
    spec:
      secrets:
        scopes:
          - storeName: kubernetes
            defaultAccess: deny
    
  2. 使用以下命令将其应用到 Kubernetes 集群:

    kubectl apply -f appconfig.yaml`.
    

对于需要拒绝访问 Kubernetes secret 存储的应用,遵循 Kubernetes 指南,将以下注解添加到应用 pod。

dapr.io/config: appconfig

定义后,应用将无法访问 Kubernetes secret 存储。

场景 2:仅允许访问 secret 存储中的某些密钥

要允许 Dapr 应用仅访问某些密钥,定义以下 config.yaml

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
  name: appconfig
spec:
  secrets:
    scopes:
      - storeName: vault
        defaultAccess: deny
        allowedSecrets: ["secret1", "secret2"]

此示例为名为 vault 的 secret 存储定义了配置。对 secret 存储的默认访问为 deny。同时,根据 allowedSecrets 列表,应用可以访问某些密钥。遵循 边车配置指南 将配置应用到边车。

场景 3:拒绝访问 secret 存储中的某些敏感密钥

定义以下 config.yaml

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
  name: appconfig
spec:
  secrets:
    scopes:
      - storeName: vault
        defaultAccess: allow # 这是默认值,可以省略此行
        deniedSecrets: ["secret1", "secret2"]

此配置明确拒绝访问名为 vault 的 secret 存储中的 secret1secret2,同时允许访问所有其他密钥。遵循 边车配置指南 将配置应用到边车。

后续步骤

服务调用访问控制