当前位置: 首页 > article >正文

【AliCloud】ack + ack-secret-manager + kms 敏感数据安全存储

介绍

ack-secret-manager支持以Kubernetes Secret实例的形式向集群导入或同步KMS凭据信息,确保您集群内的应用能够安全地访问敏感信息。通过该组件,您可以实现密钥数据的自动更新,使应用负载通过文件系统挂载指定Secret实例来使用凭据信息,同时帮助您解决负载应用和阿里云凭据管家交互的兼容性问题。

模块图(Modules Digram)

集成

ACK 即是Aliyun Kubernetes, 阿里云提供了若干版本的k8s云上集群,这边测试选用ack-serverless版本。

假设你有一套ack(ali cloud k8s)集群,一般来说我们的敏感数据会选用k8s secrets组件来存储。如下:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
  namespace: my-namespace
type: Opaque
data:
  xx_token: <BASE64ENCODE Your Secret Value>

xx_token 一般来说默认的加密是基于base64。但是这样的加密程度是远远不够的。几乎还是裸奔的存在。但是我们也可以依赖一些插件选择合适的加密算法进行加密来避免简单base64 encode。这是一种解决方案。

由于aliyun已经提供了一个密钥凭据管理的组件KMS。他在提供了加密存储的同时也对加解密的性能提供了SLA和Latency的保证。支持一些rotate的策略,并且支持多个VPC账号的访问,对于企业级应用来说是个不错的选择。

那么我们接下来就操作下如何在ack中集成kms,让你的pod可以访问使用kms的凭据。

安装ack-secret-manager组件

手动方式

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. Helm页面,单击创建,在Chart区域搜索并选中ack-secret-manager,其他设置保持默认,然后单击下一步

    根据弹出的页面提示确认,组件将被安装在默认的kube-system命名空间中,并以组件名称发布应用。如果您需要自定义应用名和命名空间,请根据页面提示设置。

  4. 参数配置页面,选择Chart版本为最新版本,并设置相应参数,然后单击确定

    • 如需开启RRSA认证功能,您需要将参数rrsa.enable设置为true

创建成功后,会自动跳转到目标集群的ack-secret-manager页面,检查安装结果。若下图中所有资源创建成功,则表明组件安装成功。

Helm安装ack-secret-manager

     helm 配置链接你的ack集群,请自行查询helm 使用。简单来说是在kubectl之上封装了一层,可以帮我们生成我们需要发布的yaml并且带有版本控制概念。

  1. 首先安装helm,然后下载ack-secret-manger的chart包
    下载地址:https://github.com/AliyunContainerService/ack-secret-manager/tree/master
  2. 运行命令安装
    helm install ./ack-secret-manager ack-secret-manager

配置组件认证信息RRSA

说明

安装ack-secret-manager时,需要将参数rrsa.enable设置为true,以启用RRSA功能。

  1. 在容器服务管理控制台开启集群的RRSA功能。具体操作,请参见启用RRSA功能。

  2. 创建可信实体为身份提供商的RAM角色,以供ack-secret-manager使用。

    说明

    阿里云账号(主账号)对账号中的资源具有完全管理权限,您也可以在RAM中创建一个RAM用户,授予AdministratorAccess权限,充当账号管理员,该管理员可以对账号下所有云资源进行管控操作。更多信息,请参见创建RAM用户作为账号管理员。

    1. 使用阿里云账号(主账号)登录RAM控制台。

    2. 在左侧导航栏,选择身份管理 > 角色

    3. 角色页面,单击创建角色

    4. 创建角色页面,选择可信实体类型为身份提供商,然后单击下一步

    5. 在配置角色页面,配置如下角色信息后,单击完成

置项

描述

角色名称

自定义角色名称。

备注

选填有关该角色的备注信息。

身份提供商类型

OIDC

选择身份提供商

ack-rrsa-<cluster_id>。其中,<cluster_id>为您的集群ID。

限制条件

说明

如果您将ack-secret-manager安装在其他的命名空间,请将kube-system替换为对应命名空间的名称。

  • oidc:iss:保持默认。

  • oidc:aud:选择sts.aliyuncs.com

  • oidc:sub:条件判定方式选择StringEquals,值的格式为system:serviceaccount:<namespace>:<serviceAccountName>

    • <namespace>:应用所在的命名空间。

    • <serviceAccountName>:服务账户名称。

  • 根据测试应用的信息,此处需要填入system:serviceaccount:kube-system:ack-secret-manager

 terraform 创建, 关于terraform语法自行百度或者查阅官方文档。

# Role
resource "alicloud_ram_role" "default" {
  name        = role_name
  document    = <<EOF
  {
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "oidc:aud": [
            "sts.aliyuncs.com"
          ],
          "oidc:iss": "https://oidc-ack-<region>.oss-<regionID>.aliyuncs.com/<your-ack-cluster-id>",
          "oidc:sub": "system:serviceaccount:<your namespace>:<service account name>"
        }
      },
      "Effect": "Allow",
      "Principal": {
        "Federated": [
          "<oidc-provider-arn>"
        ]
      }
    }
  ],
  "Version": "1"
  }
  EOF
  description = "desc"
}

创建自定义授权策略并为上一步创建的RAM角色授权。

  1. 创建ack-secret-manager导入KMS凭据时所需的权限策略。
     

    {
        "Action": [
           "kms:GetSecretValue",
           "kms:Decrypt"
        ],
        "Resource": [
            "*"
        ],
        "Effect": "Allow"
    }

    使用terraform创建, 关于terraform语法自行百度或者查阅官方文档。

    resource "alicloud_ram_policy" "default" {
      policy_name     = your policy name
      policy_document = <<EOF
      {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "kms:GetSecretValue",
                    "kms:Decrypt"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
      }
      EOF
      description     = "desc"
    }

    • 为上一步创建的RAM角色授权。具体操作,请参见为RAM角色授权。
    • 创建自定义资源SecretStore关联对应的认证方式并部署。

    • 使用以下内容,替换相关字段后,创建secretstore-rrsa.yaml文件。

      1.{roleName}:替换为步骤2中创建的RAM角色名称。
      2.{clusterID}:替换为您的集群ID。
      3.{accountID}:替换为同步KMS凭据的阿里云账号ID。
apiVersion: 'alibabacloud.com/v1alpha1'
kind: SecretStore
metadata:
  name: scdemo-rrsa
spec:
  KMS:
    KMSAuth:
      oidcProviderARN: "acs:ram::{accountID}:oidc-provider/ack-rrsa-{clusterID}"
      ramRoleARN: "acs:ram::{accountID}:role/{roleName}"	                     

执行以下命令,部署SecretStore。

 

配置数据同步信息

认证信息配置完成后,您需要通过自定义资源ExternalSecret来配置待访问的KMS凭据信息,从而将KMS凭据导入到Kubernetes Secret。

创建自定义资源ExternalSecret并部署。

  1. 使用以下内容,替换相关字段后,创建external.yaml文件。
     

    apiVersion: 'alibabacloud.com/v1alpha1'
    kind: ExternalSecret
    metadata:
      name: esdemo
    spec:
      data: # 无需特殊处理的数据源。
        - key: {KMS secret name}
          name: {Kubernetes secret key}
          versionStage: {KMS secret version stage}
          secretStoreRef:
            name: {secret store name}
            namespace: {secret store namespace}

    2.执行以下命令,部署ExternalSecret。
     

    kubectl apply -f external.yaml
    

执行以下命令,查看集群中是否存在对应的Kubernetes Secret生成。

kubectl get secret esdemo

查询存在Secret,表明Secret同步成功。 


http://www.kler.cn/a/391650.html

相关文章:

  • 在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别
  • Scala入门基础(17.1)Set集习题
  • 【C++】new操作符的使用说明
  • JavaScript高级程序设计基础(四)
  • 使用pytest+openpyxl做接口自动化遇到的问题
  • BERT配置详解1:构建强大的自然语言处理模型
  • Elasticsearch中什么是倒排索引?
  • 前端页面性能优化的常见问题与解决方案
  • 死信交换机,延迟队列和惰性队列
  • 电脑监控如何多画面显示?3大方法带你玩转多屏一画,实现管理效率翻倍涨!
  • Mac 安装protobuf2.5.0
  • C++(Qt)软件调试---静态分析工具cppcheck(22)
  • LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略
  • C# DataTable使用Linq查询详解
  • 2024最新版JavaScript逆向爬虫教程-------基础篇之Proxy与Reflect详解
  • 知识见闻 - 苹果手机拨号键长按
  • C# 字典应用
  • CTF-RE 从0到N: windows反调试-获取Process Environment Block(PEB)信息来检测调试
  • 时间序列数据结构、持久数据结构详细解读
  • DHCP与FTP
  • 【设计模式】行为型模式(一):模板方法模式、观察者模式
  • 番外篇 | 关于YOLO11算法的改进点总结
  • 计算机毕业设计Python+大模型动漫推荐系统 动漫视频推荐系统 机器学习 协同过滤推荐算法 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计
  • Pytorch实现运动鞋识别
  • KPI绩效系统源码,java版医院绩效核算系统源码,科室绩效考核、奖金核算、审核、发放一体化
  • GIS前后端分离项目展示