拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Infisical 如何动态生成 Kubernetes ServiceAccount 短生命周期令牌?

Infisical 如何动态生成 Kubernetes ServiceAccount 短生命周期令牌【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical如果你在 Kubernetes 集群里还在使用长期有效的 ServiceAccount 令牌Infisical 的 Kubernetes 动态密钥功能可以帮你改成按需生成短生命周期令牌每次需要访问时生成一个带指定 TTLTime To Live的 JWT到期自动失效。本文基于 Infisical 官方文档 Kubernetes 动态密钥 说明完整的操作路径创建用于请求令牌的 ServiceAccount、配置 RBAC 权限、在 Infisical 中配置动态密钥以及生成和清理 lease。一个关键前提要先知道Kubernetes ServiceAccount 令牌一旦签发就无法撤销它是有固定过期时间的 JWT生命周期也无法延长。所以这个方案的安全边界完全依赖 TTL——Infisical 中删除 lease 不会使令牌失效令牌会一直有效到 TTL 到期。生成新令牌是获得更长访问时间的唯一方式。前置准备Infisical 支持两种凭据类型对应不同的权限要求Static静态凭据为已存在的 ServiceAccount 生成令牌权限每次生成时保持一致。需要一个已有所需 RBAC 权限的 ServiceAccount。Dynamic动态凭据每次生成一个临时 ServiceAccount绑定到指定 Role/ClusterRole并可自动清理。要求更高请求方还需要创建和管理 RBAC 资源的权限。认证方式也分两种Token (API)直接向 Infisical 提供一个集群访问令牌Infisical 用它调用集群 API。适合公开集群或能直连 API server 的网络环境。Gateway在集群内部署 Infisical Gateway由 Gateway 用它自带的 ServiceAccount 调用 API server。适合私有集群避免存储静态令牌此时集群 URL 和 TLS 配置由 Gateway 内部处理通常使用https://kubernetes.default.svc动态密钥里不用单独填写。下面主路径按Static 凭据 Token (API) 认证走这是文档中最短的一条路径。创建令牌请求方 ServiceAccount 并获取令牌Infisical 需要一个专门用于请求令牌的 ServiceAccount。在能访问该集群的机器上需要kubectl且已配好对该集群的访问创建 infisical-service-account.yamlapiVersion: v1 kind: ServiceAccount metadata: name: infisical-token-requester namespace: defaultkubectl apply -f infisical-service-account.yaml再创建 RBAC 权限文件rbac.yaml。Static 场景下该账号只需要对serviceaccounts和serviceaccounts/token资源的create、get权限apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: tokenrequest rules: - apiGroups: [] resources: - serviceaccounts/token - serviceaccounts verbs: - create - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tokenrequest roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: tokenrequest subjects: - kind: ServiceAccount name: infisical-token-requester namespace: defaultkubectl apply -f rbac.yaml这个权限的用途是Infisical 拿着下面要生成的令牌去调用serviceaccounts/tokenAPI 为目标ServiceAccount 签发令牌所以它必须具备为别的 ServiceAccount 创建令牌的权限。然后创建令牌 Secret 并取出令牌值。service-account-token.yamlapiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: name: infisical-token-requester-token annotations: kubernetes.io/service-account.name: infisical-token-requesterkubectl apply -f service-account-token.yaml kubectl patch serviceaccount infisical-token-requester -p {secrets: [{name: infisical-token-requester-token}]} -n default kubectl get secret infisical-token-requester-token -n default -ojsonpath{.data.token} | base64 --decode最后一条命令会输出令牌明文把它记下来后面填到 Infisical 的动态密钥配置里。在 Infisical 中配置 Kubernetes 动态密钥打开 Infisical 控制台的Secret Overview面板选择要添加动态密钥的环境。点击Add Dynamic Secret在弹窗中选择Kubernetes。凭据类型选Static认证方式选Token (API)然后填写参数。参数说明以文档描述为准Secret Name该密钥在 Infisical 中的引用名必填Default TTL生成令牌的默认有效期必填生成后仍可修改该值Max TTL允许的最大有效期必填Auth Method本文选 Token (API)另一选项是 GatewayCluster Token上一步取出的infisical-token-requester令牌Token 认证时必填Credential Type本文选 StaticCluster URLAPI server 地址例如https://kubernetes.default.svc使用 Gateway 认证时不需要填Service Account Name要为哪个目标 ServiceAccount 生成令牌必填Namespace目标 ServiceAccount 所在命名空间必填Enable SSL / CA / SSL Reject Unauthorized控制 API server 连接的证书校验自签证书场景下可将 SSL Reject Unauthorized 设为关闭Gateway私有集群时选择对应 Gateway不指定则使用 Internet GatewayAudiences可选令牌中携带的受众列表填写完成后点Submit此时动态密钥会出现在 dashboard 列表中说明配置已保存。可选分支一Gateway 认证私有集群。先在集群内部署 Infisical Gateway部署方式见 Gateway 概述然后给 Gateway 的 ServiceAccount 绑定同样的tokenrequest权限区别是 ClusterRoleBinding 的 subjects 指向infisical命名空间下的infisical-gatewaysubjects: - kind: ServiceAccount name: infisical-gateway namespace: infisical之后在动态密钥配置里把 Auth Method 选为 GatewayCluster URL、Enable SSL、CA 这些项就可以留空Gateway 会用其内部集群地址和 TLS 配置访问 API server。可选分支二Dynamic 凭据。适合需要每次生成临时 ServiceAccount 并按需绑定 Role的场景。它与 Static 路径的差异Cluster Token 需要更高权限除serviceaccounts、serviceaccounts/token的create/get外还需要delete以及对rolebindings、clusterrolebindings的create/delete。额外参数Allowed Namespaces逗号分隔的多个命名空间例如default,kube-system,monitoring创建 lease 时从中选一个、Role TypeClusterRole 或 Role、Role要绑定到临时 ServiceAccount 的 Role 名。文档给出的示例 RBAC 中还会创建一个名为infisical-dynamic-role-binding-sa的 ClusterRoleBinding把请求方绑定到infisical-dynamic-role。一个容易踩的权限边界在 Kubernetes RBAC 中ServiceAccount 只能为它自己有权访问的资源创建 role binding。也就是说如果你想让动态生成的 ServiceAccount 能读 secrets那么请求方账号Token 或 Gateway 的 ServiceAccount本身也必须能读 secrets。生成短生命周期令牌并确认 lease配置完成后把鼠标悬停在 dashboard 中的该动态密钥条目上点击Generate或者在动态密钥的 lease 列表区域点击New Lease两种方式都会发起一次 lease 创建。生成时需要指定 TTL即这批凭据的有效期。注意lease 的 TTL 不能超过配置动态密钥时设定的 Max TTL。点击Submit后一个新的 secret lease 会出现在 lease 列表中ServiceAccount 令牌随即展示出来文档中展示了kubernetes-lease-value界面截图令牌内容以你实际生成的 JWT 为准。验证是否配置成功以文档给出的可观察结果为准Submit 表单后 dashboard 中出现该动态密钥——配置已创建Generate/New Lease 提交后lease 列表中新增一条记录并展示令牌——一次生成成功。之后点开对应的动态密钥条目可以查看 lease 详情并可以在到期前提前删除该 lease。再次强调文档中的限制删除 lease 只是从 Infisical 侧移除记录Kubernetes 令牌本身不会被撤销它会在 TTL 到期后自然失效。因此设置令牌时宁可给短的 TTL、重新生成也不要指望删除即失效。局限与下一步令牌不可撤销、不可延长只能用短 TTL 控制暴露面——这是该功能的设计前提不是配置问题。Static 路径要求目标 ServiceAccount 已具备所需权限Dynamic 路径要求请求方拥有创建/删除 RBAC 资源的权限且受只能绑定自己有权限的资源这一 Kubernetes RBAC 规则约束。私有集群无法直连 API server 时文档给出的替代路径是 Gateway 认证Gateway 的部署细节见 Gateway 部署 与 Gateway 概述。如果你还想了解底层接口Infisical API 提供了POST /api/v1/dynamic-secrets/leases/kubernetesCreate Kubernetes lease等端点可以程序化地替代 dashboard 上的 Generate 操作。【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门