ExternalSecretOperator 可以帮助您将统一存储和管理在 腾讯云凭据管理系统(SSM)中的密钥凭据,以 K8S 原生 Secret 对象的形式导入到集群中,并实现密钥数据的自动同步,实现由 SSM 来统一存储和管理密钥的生命周期。
限制条件
使用 ExternalSecrets 组件需要 Kubernetes 版本大于等于1.19。操作系统镜像支持 x86 架构。
启用外部密钥访问能力
安装扩展组件
1. 登录 容器服务控制台。2. 为集群安装 ExternalSecrets(外部密钥访问组件)组件。如果您还没有创建集群,可以在创建集群的时候安装 ExternalSecrets 组件。详情请参见 通过集群创建页安装。如果您需要给已创建好的集群开启外部密钥访问能力,请在组件管理中安装 ExternalSecrets 组件。详情请参见 通过组件管理页安装。
3. 在组件管理页面查看组件状态。如组件状态为“成功”,代表组件部署完成。如下图所示:
使用方式
方式一:通过 AKSK 授权
步骤1:通过 AKSK 授权方式配置认证信息
1. 登录 腾讯云访问管理控制台,选择左侧导航中的策略。2. 进入策略页面,单击新建自定义策略 > 按策略语法创建。3. 在按策略语法创建页面,选择空白模板,如下图所示:
4. 单击下一步,进入编辑策略页面,在策略内容编辑框中添加以下内容:
{ "statement": [ { "action": [ "ssm:GetSecretValue" ], "effect": "allow", "resource": [ "*" ] } ], "version": "2.0"}
5. 单击完成即可添加策略。6. 在策略页面查看已创建的自定义策略,选择自定义策略 > 关联用户/组/角色,如下图所示:
在关联用户/组/角色页面,选择需要绑定的用户,如下图所示:
7. 单击确定。
步骤2:组件使用说明
该组件涉及两种自定义资源(CRD):SecretStore 用于存放访问凭据,ExternalSecret 用于指定 SecretStore 并存放需要同步的凭据基础信息。通过这种方式,权限和数据得到分离,提高了使用的灵活性。在 SSM 凭据管理系统中,您需要添加以下凭据:
SecretName: hello-testSecretData: {"name":"jack","password":"123"}VersionId: v1
请参见 腾讯云凭据管理系统文档 以获取详细的创建凭据流程。注意:以下 secret、SecretStore、ExternalSecret 均在 default 命名空间中。1. 创建 secret。您可以使用以下命令创建 secret:
echo -n 'KEYID' > ./accessKeyIdecho -n 'SECRETKEY' > ./accessKeySecretkubectl 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": [ "*" ] } ], "version": "2.0"}
5. 单击完成即可添加策略。
步骤2:为子账号赋予扮演角色策略
1. 登录 腾讯云访问管理控制台,选择左侧导航中的用户 > 用户列表。2. 在用户列表页面,单击新建用户。新建用户流程详情请参见 新建子用户。3. 为创建的子用户赋予扮演角色的策略。详情请参见 为子账号赋予扮演角色策略。
步骤3:为创建的子用户赋予访问 SSM 凭据的策略
1. 在策略页面查看已创建的自定义策略,选择自定义策略 > 关联用户/组/角色,如下图所示:
2. 在关联用户/组/角色页面,选择需要绑定的子用户,如下图所示:
3. 单击确定。
步骤4:组件使用说明
该组件涉及两种自定义资源(CRD):SecretStore 用于存放访问凭据,ExternalSecret 用于指定 SecretStore 并存放需要同步的凭据基础信息。通过这种方式,权限和数据得到分离,提高了使用的灵活性。在 SSM 凭据管理系统中,您需要添加以下凭据:
SecretName: hello-testSecretData: {"name":"jack","password":"123"}VersionId: v1
请参见 腾讯云凭据管理系统文档 以获取详细的创建凭据流程。注意:以下 secret、SecretStore、ExternalSecret 均在 default 命名空间中。1. 创建 secret。您可以使用以下命令创建 secret:
echo -n 'KEYID' > ./accessKeyIdecho -n 'SECRETKEY' > ./accessKeySecretkubectl 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 右侧的
。如下图所示:说明:如果您需要体验 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": [ "*" ] } ], "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:组件使用说明
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 会完成同步。
容器服务官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠
转转请注明出处:http://www.yunxiaoer.com/148390.html