仅 Vault Enterprise 的 Vault Sidecar 注入器权限被拒绝

2024-01-09

我正在尝试探索Vault Enterprise,但当我使用Vault Enterprise时,Sidecar的权限被拒绝,但当我尝试使用本地Vault服务器时,似乎工作正常。

这是包含本地保管库的工作示例的存储库保险库边车注射器应用程序 https://github.com/Adiii717/vault-sidecar-injector-app

保险库配置

export VAULT_ADDR="https://vault-cluster.vault.c1c633fa-91ef-4e86-b025-4f31b3f14730.aws.hashicorp.cloud:8200"
export VAULT_NAMESPACE="admin"

#install agent
helm upgrade --install vault hashicorp/vault --set "injector.externalVaultAddr=$VAULT_ADDR"
vault auth enable kubernetes
# get certs & host
VAULT_HELM_SECRET_NAME=$(kubectl get secrets --output=json | jq -r '.items[].metadata | select(.name|startswith("vault-token-")).name')
TOKEN_REVIEW_JWT=$(kubectl get secret $VAULT_HELM_SECRET_NAME --output='go-template={{ .data.token }}' | base64 --decode)
KUBE_CA_CERT=$(kubectl config view --raw --minify --flatten --output='jsonpath={.clusters[].cluster.certificate-authority-data}' | base64 --decode)
KUBE_HOST=$(kubectl config view --raw --minify --flatten --output='jsonpath={.clusters[].cluster.server}')

# set Kubernetes config
vault write auth/kubernetes/config \
        token_reviewer_jwt="$TOKEN_REVIEW_JWT" \
        kubernetes_host="$KUBE_HOST" \
        kubernetes_ca_cert="$KUBE_CA_CERT" \
        issuer="https://kubernetes.default.svc.cluster.local" \
        disable_iss_validation="true" \
        disable_local_ca_jwt="true"


vault auth enable approle
# create admin policy
vault policy write admin admin-policy.hcl
vault write auth/approle/role/admin policies="admin"
vault read auth/approle/role/admin/role-id
# generate secret
vault write -f  auth/approle/role/admin/secret-id
#Enable KV
vault secrets enable -version=2 kv

I can see the role and policy enter image description here

管理政策

这是企业的管理政策

path "*" {
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}

部署 helm 脚本

这是部署脚本,尝试过hcp-root根政策但没有运气

RELEASE_NAME=demo-managed
NAMESPACE=default
ENVIRONMENT=develop
export role_id="f9782a53-823e-2c08-81ae-abc"
export secret_id="1de3b8c5-18c7-60e3-24ca-abc"
export VAULT_ADDR="https://vault-cluster.vault.c1c633fa-91ef-4e86-b025-4f31b3f14730.aws.hashicorp.cloud:8200"
export VAULT_TOKEN=$(vault write -field="token"  auth/approle/login role_id="${role_id}" secret_id="${secret_id}")
vault write auth/kubernetes/role/${NAMESPACE}-${RELEASE_NAME} bound_service_account_names=${RELEASE_NAME} bound_service_account_namespaces=${NAMESPACE} policies=hcp-root ttl=1h
helm upgrade --install $RELEASE_NAME ../helm-chart --set environment=$ENVIRONMENT --set nameOverride=$RELEASE_NAME

也尝试过使用 root 令牌

RELEASE_NAME=demo-managed
NAMESPACE=default
ENVIRONMENT=develop
vault write auth/kubernetes/role/${NAMESPACE}-${RELEASE_NAME} bound_service_account_names=${RELEASE_NAME} bound_service_account_namespaces=${NAMESPACE} policies=hcp-root ttl=1h
helm upgrade --install $RELEASE_NAME ../helm-chart --set environment=$ENVIRONMENT --set nameOverride=$RELEASE_NAME

边车配置

使用命名空间注释,因为我的理解命名空间是必需的

Vault.hashicorp.com/namespace - 配置从 Vault 请求机密时要使用的 Vault Enterprise 命名空间。

https://www.vaultproject.io/docs/platform/k8s/injector/annotations https://www.vaultproject.io/docs/platform/k8s/injector/annotations

vault.hashicorp.com/namespace : "admin"

Error

  | Error making API request.
  |
  | URL: PUT https://vault-cluster.vault.c1c633fa-91ef-4e86-b025-4f31b3f14730.aws.hashicorp.cloud:8200/v1/admin/auth/kubernetes/login
  | Code: 403. Errors:
  |
  | * permission denied

没有命名空间注释出现以下错误

  | URL: PUT https://vault-cluster.vault.c1c633fa-91ef-4e86-b025-4f31b3f14730.aws.hashicorp.cloud:8200/v1/auth/kubernetes/login
  | Code: 400. Errors:
  |
  | * missing client token

甚至启用调试日志vault.hashicorp.com/log-level : "debug"不能帮助我解决这个错误,任何帮助或建议将不胜感激。

也尝试过https://support.hashicorp.com/hc/en-us/articles/4404389946387-Kubernetes-auth-method-Permission-Denied-error https://support.hashicorp.com/hc/en-us/articles/4404389946387-Kubernetes-auth-method-Permission-Denied-error

所以看来我错过了金库企业特有的一些东西


终于能够解决保管库的奇怪问题,作为答案发布可能会对其他人有所帮助。

我唯一错过的是理解Vault 服务器、Sidecar 和 Kubernetes 之间的流程。

Kubernetes 应该可以访问保管库企业以进行令牌审查 API 调用。正如您所看到的,当 sidecar 向保管库发出请求时,保管库企业服务器将执行令牌审核 API 调用。

使用 /config 端点进行配置Vault 与 Kubernetes 对话。使用 kubectl cluster-info 验证Kubernetes 主机地址和 TCP 端口。

https://www.vaultproject.io/docs/auth/kubernetes https://www.vaultproject.io/docs/auth/kubernetes


  | Error making API request.
  |
  | URL: PUT https://vault-cluster.vault.c1c633fa-91ef-4e86-b025-4f31b3f14730.aws.hashicorp.cloud:8200/v1/admin/auth/kubernetes/login
  | Code: 403. Errors:
  |
  | * permission denied
   backoff=2.99s

此错误并不表明它存在连接问题,但当保管库无法与 Kubernetes 集群通信时也会发生这种情况。

库贝主机

vault write auth/kubernetes/config \
        token_reviewer_jwt="$TOKEN_REVIEW_JWT" \
        kubernetes_host="$KUBE_HOST" \
        kubernetes_ca_cert="$KUBE_CA_CERT" \
        issuer="https://kubernetes.default.svc.cluster.local"

KUBE_HOST保险库企业应该可以联系以进行代币审查过程。

因此,为了让保管库与我们的集群进行通信,我们需要进行一些更改。

minikube start --apiserver-ips=14.55.145.30 --vm-driver=none

现在更新vaul-config.sh file

KUBE_HOST=$(kubectl config view --raw --minify --flatten --output='jsonpath={.clusters[].cluster.server}')

将此更改为

KUBE_HOST=""https://14.55.145.30:8443/"

无需手动步骤,首次配置运行

./vault-config.sh

对于 CI/CD 中的其余部署,您可以使用

./vault.sh

每个版本只能访问自己的秘密。

更多详细信息可以找到在 EC2 中启动 minikube https://github.com/Adiii717/vault-sidecar-injector-app/blob/main/README.md#start-minikube-in-ec2

TLDR,

注意:Kubernetes 集群应该可以访问Vault Enterprise 进行身份验证,因此Vault Enterprise 将无法与您的本地minikube 集群进行通信。最好在 EC2 上测试一下

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅 Vault Enterprise 的 Vault Sidecar 注入器权限被拒绝 的相关文章

随机推荐

  • Firebase Once() 超时

    我正在使用 Firebaseonce 方法来检索 React Native 移动应用程序中的值 问题是如果手机离线的话once 永远不会回来 文档说ref off 方法应该取消回调 但这似乎不起作用 我猜off 不适用于once 回调 如果
  • jquery load() 的 Javascript 替代品

    有人可以给我一个替代 jquery load 的纯 JavaScript 示例吗 或者将我指向带有示例的仪式站点 谢谢 UPDATE 这不是我想问的 我需要使用 Ajax 加载 URL 并将返回的 HTML 插入到 div 中 我不太明白缺
  • 如何检查 PL/SQL BEFORE UPDATE 触发器中是否显式指定了列值?

    有没有办法告诉 PL SQL 中哪些列被显式更新BEFORE UPDATE扳机 例如 我要设置 new last modified by USER仅当UPDATE语句没有明确指定该列的值 Use the UPDATING功能 if upda
  • Chrome 开发者工具“样式”选项卡显示 CSS 定义褪色,为什么?

    我已经使用 Chrome 很长时间了 但我从来没有 我不记得了 在样式面板中遇到过褪色的 CSS 定义 选择器尚未在其他地方定义 Example 编辑 为了清楚起见 我不是指用户代理样式表 我不明白为什么它会褪色以及这意味着什么 该定义似乎
  • Laravel 表单 html,带有 PUT 路由的 PUT 方法

    我的路线中有这个 Domain URI Name Action
  • 使用 twinx 时控制跟踪器

    右下角的跟踪器 以红色突出显示 报告相对于右侧 y 轴的 y 值 如何让跟踪器报告相对于左侧 y 轴的 y 值 import matplotlib pyplot as plt import numpy as np np random see
  • 将“django-filter”与 CHOICES 字段一起使用 - 需要“Any”选项

    我正在使用非常酷的 django filter 通过 http github com alex django filter http github com alex django filter 要么似乎无法理解文档 要么只是 需要一点推动
  • Ruby Regex - 需要替换正则表达式匹配中出现的每个字符

    这是我的字符串 mystring Q object1 this is a testyay asdkf asfkd object2 yo ho ho 我要分开mystring在逗号上 因此我想 暂时 去掉转义引号之间的逗号 因此 我需要匹配转
  • C++:宏参数中可以有空格吗?

    如果我定义一个带有参数的宏 如下所示 define define int a int a 并提供一个参数 中间有空格 如下所示 define int a 并得到输出 int a 有可能的使用 define ASSIGN A B B A 我想
  • Grafana日志插件不显示日志面板

    我正在尝试创建一个支持日志面板的 Grafana 插件 我正在关注来自他们网站的路线 https grafana com docs grafana latest developers plugins build a logs data so
  • 突出显示 FlowDocument 中的部分文本

    我想突出显示文本中的某些部分FlowDocument根据搜索结果 我正在做的是获取搜索词在文本中出现的索引FlowDocument然后在从找到的索引开始到找到的索引 搜索词长度结束的文本范围上应用背景颜色 TextRange content
  • 将鼠标悬停在另一个元素上时更改一个元素的类 d3

    我有一个图像列表和图像标题列表 我希望当我将鼠标悬停在相应的图像上时能够显示标题的悬停状态 更改 css 但我不知道如何连接这两个数据 我的代码如下 我有它 这样当您单击顶部数字时 信息就会显示在下面
  • 将焦点设置在 Windows 中的控制台上?

    是否可以将焦点设置在 Windows 中的控制台应用程序上 SetFocus http msdn microsoft com en us library ms646312 VS 85 aspx看起来很有希望 但它需要一个 HWND 而且我不
  • VARCHAR2 列上的 ResultSet.getString() 返回空字符串

    免责声明 我实际上对 Oracle 和 Java 都一无所知 问题出在其他一些开发人员在某个时间点完成然后离开公司的项目中 现在我必须设置网络服务器 数据库并使其全部启动并运行 代码大约是这样的 OracleDataSource ods n
  • 扩展基元而不对其进行原型设计

    我正在开发一个相当丑陋的库 它可以让你做一些奇怪的事情 有了图表 您可以以链式样式映射一组集合 并且当您更改 整个系统中要改变的值 当最终类型是 JS 原语时 问题就出现了 就我而言 在使用值和对象制作图表后 我可以执行以下操作 CHAIN
  • 动态添加项目到边框视口

    我想首先创建一个空视口 布局 边框 然后向其中添加项目 最后渲染并显示 但是当我创建视口元素时 它抛出一个错误 说 未捕获的类型错误 无法读取未定义的属性 flex 这是我的代码
  • 通过adb授予PACKAGE_USAGE_STATS权限

    adb shell pm grant x y z android permission PACKAGE USAGE STATS 这是授予的命令PACKAGE USAGE STATS通过 adb 获得权限 但只有当我从未在本机设置中切换此权限
  • 如何使用react-router-dom创建受保护的路由?

    如何创建受保护的路由react router dom并将响应存储在 localStorage 中 以便用户下次尝试打开时可以再次查看其详细信息 登录后 他们应该重定向到仪表板页面 所有功能都添加到 ContextApi 中 代码沙箱链接 C
  • webpack "--watch" 与 "--hot" :有什么区别?

    使用有什么区别 webpack watch and webpack dev server hot thanks 根据 webpack 文档 https webpack github io docs tutorials getting sta
  • 仅 Vault Enterprise 的 Vault Sidecar 注入器权限被拒绝

    我正在尝试探索Vault Enterprise 但当我使用Vault Enterprise时 Sidecar的权限被拒绝 但当我尝试使用本地Vault服务器时 似乎工作正常 这是包含本地保管库的工作示例的存储库保险库边车注射器应用程序 ht