tencent cloud

容器服务

动态与公告
产品动态
公告
产品发布记录
产品简介
产品概述
产品优势
产品架构
应用场景
产品功能
基本概念
原生 Kubernetes 名词对照
容器服务高危操作
地域和可用区
开源组件
购买指南
购买指引
购买 TKE 标准集群
购买原生节点
购买超级节点
快速入门
新手指引
快速创建一个标准集群
入门示例
容器应用部署 Check List
集群配置
标准集群概述
集群管理
网络管理
存储管理
节点管理
GPU 资源管理
远程终端
应用配置
工作负载管理
服务和配置管理
组件和应用管理
弹性伸缩
容器登录方式
可观测配置
运维可观测性
成本洞察和优化
调度配置
调度组件概述
资源利用率优化调度
业务优先级保障调度
Qos 感知调度
安全和稳定性
容器服务安全组设置
身份验证和授权
应用安全
多集群管理
计划升级
备份中心
云原生服务指南
云原生 etcd
Prometheus 监控服务
TKE Serverless 集群指南
TKE 注册集群指南
实践教程
集群
Serverless 集群
调度
安全
服务部署
网络
发布
日志
监控
运维
Terraform
DevOps
弹性伸缩
容器化
微服务
成本管理
混合云
AI
故障处理
节点磁盘爆满排障处理
节点高负载排障处理
节点内存碎片化排障处理
集群 DNS 解析异常排障处理
集群 Kube-Proxy 异常排障处理
集群 API Server 网络无法访问排障处理
Service&Ingress 网络无法访问排障处理
Service&Ingress 常见报错和处理
Nginx Ingress 偶现 Connection Refused
CLB Ingress 创建报错排障处理
Pod 网络无法访问排查处理
Pod 状态异常与处理措施
授权腾讯云售后运维排障
CLB 回环问题
API 文档
History
Introduction
API Category
Making API Requests
Elastic Cluster APIs
Resource Reserved Coupon APIs
Cluster APIs
Third-party Node APIs
Relevant APIs for Addon
Network APIs
Node APIs
Node Pool APIs
TKE Edge Cluster APIs
Cloud Native Monitoring APIs
Scaling group APIs
Super Node APIs
Other APIs
Data Types
Error Codes
TKE API 2022-05-01
常见问题
TKE 标准集群
TKE Serverless 集群
运维类
隐患处理
服务类
镜像仓库类
远程终端类
事件类
资源管理类
服务协议
TKE Service Level Agreement
TKE Serverless Service Level Agreement
联系我们
词汇表
文档容器服务实践教程安全使用 ExternalSecretOperator 导入腾讯云 SSM 凭据

使用 ExternalSecretOperator 导入腾讯云 SSM 凭据

PDF
聚焦模式
字号
最后更新时间: 2025-12-22 17:09:54
ExternalSecretOperator 可以帮助您将统一存储和管理在 腾讯云凭据管理系统(SSM)中的密钥凭据,以 K8S 原生 Secret 对象的形式导入到集群中,并实现密钥数据的自动同步,实现由 SSM 来统一存储和管理密钥的生命周期。

限制条件

使用 ExternalSecrets 组件需要 Kubernetes 版本大于等于1.19。
操作系统镜像支持 x86 架构。

启用外部密钥访问能力

安装扩展组件

2. 为集群安装 ExternalSecrets(外部密钥访问组件)组件。
如果您还没有创建集群,可以在创建集群的时候安装 ExternalSecrets 组件。详情请参见 通过集群创建页安装
如果您需要给已创建好的集群开启外部密钥访问能力,请在组件管理中安装 ExternalSecrets 组件。详情请参见 通过组件管理页安装



3. 在组件管理页面查看组件状态。如组件状态为“成功”,代表组件部署完成。如下图所示:




使用方式

方式一:通过 AKSK 授权

步骤1:通过 AKSK 授权方式配置认证信息

1. 登录 腾讯云访问管理控制台,选择左侧导航中的策略
2. 进入策略页面,单击新建自定义策略 > 按策略语法创建
3. 按策略语法创建页面,选择空白模板,如下图所示:



4. 单击下一步,进入编辑策略页面,在策略内容编辑框中添加以下内容:
{
"statement": [
{
"action": [
"ssm:GetSecretValue"
],
"effect": "allow",
"resource": [
"qcs::ssm:$region:uin/$uin:secret/creatorUin/$creatorUin/$secretName"
]
}
],
"version": "2.0"
}
5. 单击完成即可添加策略。
6. 策略页面查看已创建的自定义策略,选择自定义策略 > 关联用户/组/角色,如下图所示:



关联用户/组/角色页面选择需要绑定的用户,如下图所示:



7. 单击确定

步骤2:组件使用说明

该组件涉及两种自定义资源(CRD):SecretStore 用于存放访问凭据,ExternalSecret 用于指定 SecretStore 并存放需要同步的凭据基础信息。通过这种方式,权限和数据得到分离,提高了使用的灵活性。
在 SSM 凭据管理系统中,您需要添加以下凭据:
SecretName: hello-test
SecretData: {"name":"jack","password":"123"}
VersionId: v1
请参见 腾讯云凭据管理系统文档 以获取详细的创建凭据流程。
注意:
以下 secret、SecretStore、ExternalSecret 均在 default 命名空间中。
1. 创建 secret。
您可以使用以下命令创建 secret:
echo -n 'KEYID' > ./accessKeyId
echo -n 'SECRETKEY' > ./accessKeySecret
kubectl create secret generic tencent-credentials --from-file=./accessKeyId --from-file=./accessKeySecret
说明:
密钥可前往 访问管理 进行获取。
2. 创建 SecretStore。
您可以将以下内容保存到 my-secretstore.yaml 文件中:
apiVersion: external-secrets.io/v1beta1 kind: SecretStore metadata: name: my-secretstore spec: provider: tencent: regionID: ap-guangzhou auth: secretRef: accessKeyIDSecretRef: name: tencent-credentials key: accessKeyId accessKeySecretSecretRef: name: tencent-credentials key: accessKeySecret
3. 创建 ExternalSecret。
您可以将以下内容保存到 my-externalsecret.yaml 文件中:
apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: my-externalsecret spec: refreshInterval: 1m secretStoreRef: kind: SecretStore name: my-secretstore target: name: my-secret-key-to-be-created creationPolicy: Owner data: - secretKey: secret-key-to-be-managed remoteRef: key: hello-test version: v1 # option property: password
4. 部署示例,请执行以下命令:
kubectl apply -f my-secretstore.yaml kubectl apply -f my-externalsecret.yaml
5. 使用获取的凭据。
您可以将以下内容保存到 my-pod.yaml 文件中:
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: busybox command: - /bin/sh - -c - 'echo "Secret value: ${SECRET_KEY_TO_BE_MANAGED}"' env: - name: SECRET_KEY_TO_BE_MANAGED valueFrom: secretKeyRef: name: my-secret-key-to-be-created key: secret-key-to-be-managed restartPolicy: Never
然后,使用以下命令部署 Pod 资源:
kubectl apply -f my-pod.yaml
最后,使用以下命令查看获取的凭据:
kubectl logs my-pod
您将看到获取的凭据信息:
# ExternalSecret中获取的凭据信息如下所示。 Secret value: 123

方式二:通过 AKSK 与角色扮演授权

步骤1:创建获取 SSM 凭据的策略

1. 登录 腾讯云访问管理控制台,选择左侧导航中的策略
2. 进入策略页面,单击新建自定义策略 > 按策略语法创建
3. 按策略语法创建页面,选择空白模板,如下图所示:



4. 单击下一步,进入编辑策略页面,在策略内容编辑框中添加以下内容:
{
"statement": [
{
"action": [
"ssm:GetSecretValue"
],
"effect": "allow",
"resource": [
"qcs::ssm:$region:uin/$uin:secret/creatorUin/$creatorUin/$secretName"
]
}
],
"version": "2.0"
}
5. 单击完成即可添加策略。

步骤2:为子账号赋予扮演角色策略

1. 登录 腾讯云访问管理控制台,选择左侧导航中的用户 > 用户列表。
2. 用户列表页面,单击新建用户。新建用户流程详情请参见 新建子用户
3. 为创建的子用户赋予扮演角色的策略。详情请参见 为子账号赋予扮演角色策略

步骤3:为创建的子用户赋予访问 SSM 凭据的策略

1. 策略页面查看已创建的自定义策略,选择自定义策略 > 关联用户/组/角色,如下图所示:


2. 关联用户/组/角色页面选择需要绑定的子用户,如下图所示:



3. 单击确定

步骤4:组件使用说明

该组件涉及两种自定义资源(CRD):SecretStore 用于存放访问凭据,ExternalSecret 用于指定 SecretStore 并存放需要同步的凭据基础信息。通过这种方式,权限和数据得到分离,提高了使用的灵活性。
在 SSM 凭据管理系统中,您需要添加以下凭据:
SecretName: hello-test
SecretData: {"name":"jack","password":"123"}
VersionId: v1
请参见 腾讯云凭据管理系统文档 以获取详细的创建凭据流程。
注意:
以下 secret、SecretStore、ExternalSecret 均在 default 命名空间中。
1. 创建 secret。
您可以使用以下命令创建 secret:
echo -n 'KEYID' > ./accessKeyId
echo -n 'SECRETKEY' > ./accessKeySecret
kubectl create secret generic tencent-credentials --from-file=./accessKeyId --from-file=./accessKeySecret
说明:
密钥可前往 访问管理 进行获取。
2. 创建 SecretStore。
您可以将以下内容保存到 my-secretstore.yaml 文件中:
apiVersion: external-secrets.io/v1beta1 kind: SecretStore metadata: name: secretstore-assumerole spec: provider: tencent: regionID: ap-guangzhou role: "qcs::cam::uin/12345:roleName/test-assume-role" auth: secretRef: accessKeyIDSecretRef: name: tencent-credentials key: accessKeyId accessKeySecretSecretRef: name: tencent-credentials key: accessKeySecret
说明:
role 字段在 步骤2 中获取。
3. 创建 ExternalSecret。
您可以将以下内容保存到 my-externalsecret.yaml 文件中:
apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: external-secret-assumerole spec: refreshInterval: 1m secretStoreRef: kind: SecretStore name: secretstore-assumerole target: name: my-secret-key-to-be-created creationPolicy: Owner data: - secretKey: secret-key-to-be-managed remoteRef: key: hello-test version: v1 property: password
4. 部署示例,请执行以下命令:
kubectl apply -f my-secretstore.yaml kubectl apply -f my-externalsecret.yaml
5. 使用获取的凭据。
您可以将以下内容保存到 my-pod.yaml 中:
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: busybox command: - /bin/sh - -c - 'echo "Secret value: ${SECRET_KEY_TO_BE_MANAGED}"' env: - name: SECRET_KEY_TO_BE_MANAGED valueFrom: secretKeyRef: name: my-secret-key-to-be-created key: secret-key-to-be-managed restartPolicy: Never

然后,使用以下命令部署 Pod 资源:
kubectl apply -f my-pod.yaml
最后,使用以下命令查看获取的凭据:
kubectl logs my-pod
您将看到获取的凭据信息:
# ExternalSecret中获取的凭据信息如下所示。 Secret value: 123

方式三:通过 TKE OIDC 授权

步骤1:开启 OIDC 资源访问控制能力

1. 登录 容器服务控制台,选择左侧导航中的集群
2. 集群管理页面,选择集群 ID,进入集群的基本信息页面。
3. 在集群基本信息中,单击 ServiceAccountIssuerDiscovery 右侧的

。如下图所示:



4. 进入修改 ServiceAccountIssuerDiscovery 相关参数页面,若系统提示您无法修改相关参数,请先进行服务授权。

在角色管理页面,查看授权策略 QcloudAccessForTKERoleInOIDCConfig,单击同意授权



5. 授权完毕后,勾选“创建 CAM OIDC 提供商”和“创建webhook组件”,并填写客户端 ID,单击确定。如下图所示:
说明:
客户端 ID 是选填参数,当不填写时,默认值是 "sts.cloud.tencent.com",本文示例中创建 CAM OIDC 提供商采用默认值。



6. 返回集群详情页,当 ServiceAccountIssuerDiscovery 可再次编辑时,表明本次开启 OIDC 资源访问控制结束。
注意:
"service-account-issuer" 和 "service-account-jwks-uri" 参数值不允许编辑,采用默认规则。
7. 进入修改 ServiceAccountIssuerDiscovery 相关参数页面,系统将提示“您创建的身份提供商已存在,前往查看”。单击前往查看。如下图所示:



8. 集群信息 > 组件管理中,如在列表看到 pod-identity-webhook 组件状态是“成功”,即表示安装组件成功。如下图所示:



步骤2:创建获取 SSM 凭据的策略

1. 登录 腾讯云访问管理控制台,选择左侧导航中的策略
2. 进入策略页面,单击新建自定义策略 > 按策略语法创建
3. 按策略语法创建页面,选择“空白模板”,如下图所示:



4. 单击下一步,进入编辑策略页面,在策略内容编辑框中添加以下内容:
{
"statement": [
{
"action": [
"ssm:GetSecretValue"
],
"effect": "allow",
"resource": [
"qcs::ssm:$region:uin/$uin:secret/creatorUin/$creatorUin/$secretName"
]
}
],
"version": "2.0"
}
5. 单击完成即可添加策略。

步骤3:新建 OIDC 角色

1. 登录 腾讯云访问管理控制台,选择左侧导航中的角色
2. 角色页面,选择新建角色 > 身份提供商
3. 新建自定义角色页面,参考以下信息进行设置。



身份提供商类型:选择 OIDC。
选择身份提供商:选择本次为哪个身份提供商创建角色。
使用条件:填写 oidc:aud 的 value 值。
注意:
身份提供商的 value 值标识为 $my_provider_id。
oidc:aud 的 value 值需要和 CAM OIDC 提供商的客户端 ID value 值保持一致。
oidc:aud 的 value 值标识为$my_pod_audience,当oidc:aud的 value 值有多个时,任选其中之一即可。
4. 单击下一步,进入配置角色策略页面,选择在 步骤2 中创建并获取 SSM 的策略,如下图所示:



5. 单击下一步,进入配置角色标签页面,若不需要设置标签可直接下一步,如下图所示:



6. 单击下一步,进入审阅页面,编辑角色名称角色描述,如下图所示:



7. 单击完成。角色创建完成后,进入角色详情页,可以查看 OIDC 角色的 RoleArn 与该角色拥有的权限,如下图所示:



注意:
RoleArn 的 value 值标识为$my_pod_role_arn

步骤4:组件使用说明

该组件涉及两种自定义资源(CRD):SecretStore 用于存放访问凭据,ExternalSecret 用于指定 SecretStore 并存放需要同步的凭据基础信息。通过这种方式,权限和数据得到分离,提高了使用的灵活性。
在 SSM 凭据管理系统中,您需要添加以下凭据:
SecretName: hello-test
SecretData: {"name":"jack","password":"123"}
VersionId: v1
请参见 腾讯云凭据管理系统文档 以获取详细的创建凭据流程。
注意:
以下 ServiceAccount、SecretStore、ExternalSecret 均在 default 命名空间中。
1. 创建 ServiceAccount。
您可以将以下内容保存到 my-serviceaccount.yaml 中:
apiVersion: v1 kind: ServiceAccount metadata: name: my-serviceaccount annotations: tke.cloud.tencent.com/role-arn: $my_pod_role_arn tke.cloud.tencent.com/audience: $my_pod_audience tke.cloud.tencent.com/providerID: $my_provider_id
说明:
将 $my_pod_role_arn 替换为 RoleArn 的 value 值。
将 $my_pod_audience 替换为 oidc:aud 的 value 值。
将 $my_provider_id 替换为“身份提供商”。
2. 创建 SecretStore。
您可以将以下内容保存到 my-secretstore.yaml 中:
apiVersion: external-secrets.io/v1beta1 kind: SecretStore metadata: name: secretstore-tkeoidc spec: provider: tencent: regionID: ap-guangzhou auth: serviceAccountRef: name: my-serviceaccount
3. 创建 ExternalSecret。
您可以将以下内容保存到 my-externalsecret.yaml 中:
apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: external-secret-tkeoidc spec: refreshInterval: 1h secretStoreRef: kind: SecretStore name: secretstore-tkeoidc target: name: my-secret-key-to-be-created creationPolicy: Owner data: - secretKey: secret-key-to-be-managed remoteRef: key: hello-test version: v1 # option property: password
4. 部署示例,请执行以下命令:
kubectl apply -f my-serviceaccount.yaml kubectl apply -f my-secretstore.yaml kubectl apply -f my-externalsecret.yaml
5. 查看目标 Secret 是否创建成功,请执行以下命令:
kubectl get secret my-secret-key-to-be-created -o yaml
注意:
在没有关闭同步刷新的前提下,可以修改 SSM 凭据管理系统中的密钥内容,等到刷新时间到达后,目标 secret 会完成同步。


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈