【问题标题】:How to authenticate Kubernetes application with Vault using AppRole method如何使用 AppRole 方法通过 Vault 对 Kubernetes 应用程序进行身份验证
【发布时间】:2022-08-13 23:55:00
【问题描述】:

我的应用程序在 Kubernetes 上运行,它需要一些敏感数据才能运行应用程序。例如,数据库用户名和密码。目前,我将这些敏感值作为 Kubernetes 定义文件中的环境变量传递。

由于这种方式不安全,我部署了 vault,现在我需要使用 vault 对我的应用程序进行身份验证。我还在保险库中创建了秘密,我正在使用 \'AppRole\' 方法进行身份验证。我获得了 RoleID 和 SecretID。

如何从我的应用程序中指定保险库并对其进行身份验证?在我的 Kubernetes 部署文件中将 RoleID 和 SecretID 作为环境变量传递是否足够?

  • 为什么不使用 Kubernetes 身份验证引擎呢?
  • 什么是“(安全)足够”取决于很多事情,即您的安全要求。 AppRole 身份验证比 K8S 更容易配置,尤其是如果您打算使用组和实体别名来管理权限。但是您将在哪里存储 AppRole 凭据以传递给您的部署文件?在 Vault 中 - 好主意 - 但是您首先将用于向 Vault 进行身份验证的凭据存储在哪里?安全秘密引入是一个难题,Kubernetes 身份验证是一个解决方案。但没有什么是免费的。
  • @ixe013 所以在代码中传递 AppRole 凭据是不够的?除了在代码中定义 AppRole 凭据之外,我们还需要在其他任何地方指定它们吗?就像在部署清单中一样?
  • 是的,AppRole 身份验证工作就足够了。可能不足以满足查看您的部署代码的安全审计员。至少,不要存储凭据代码,在您的源代码存储库中。

标签: kubernetes hashicorp-vault vault


【解决方案1】:

对于您的用例,绝对可以使用 AppRole auth 方法,因为 approle auth 方法允许机器或应用程序使用 Vault 定义的角色进行身份验证。

启用AppRole auth 方法,为您的应用程序创建必要的policies 并生成role_idsecret_id。您可以创建包含这些值的 K8s 机密。

apiVersion: v1
kind: Secret
metadata:
  name: auth-secret
type: Opaque
data:
  VAULT_APPROLE_ROLE_ID: <role_id>
  VAULT_APPROLE_SECRET_ID: <secret_id>

现在,在您的应用程序中引用它:

spec:
  containers:
    - name: test-container
      image: <image_name>
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:
      - secretRef:
          name: auth-secret

【讨论】:

    猜你喜欢
    • 2022-08-11
    • 2021-01-22
    • 2017-03-03
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2021-06-24
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多