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

【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-secretnamespace: 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_namedocument    = <<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"}EOFdescription = "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 namepolicy_document = <<EOF{"Version": "1","Statement": [{"Action": ["kms:GetSecretValue","kms:Decrypt"],"Resource": "*","Effect": "Allow"}]}EOFdescription     = "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.lryc.cn/news/483259.html

相关文章:

  • 探索JavaScript的强大功能:从基础到高级应用
  • 新增支持Elasticsearch数据源,支持自定义在线地图风格,DataEase开源BI工具v2.10.2 LTS发布
  • Spark的容错机制
  • YOLOv8改进 | 利用YOLOv8进行视频划定区域目标统计计数
  • 基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • wafw00f源码详细解析
  • 什么是crm?3000字详细解析
  • WEB3.0介绍
  • 【深度学习】LSTM、BiLSTM详解
  • 分子对接--软件安装
  • 【Python无敌】在 QGIS 中使用 Python
  • 全面解读:低代码开发平台的必备要素——系统策划篇
  • Vue开发自动生成验证码功能 前端实现不使用第三方插件实现随机验证码功能,生成的验证码添加干扰因素
  • # filezilla连接 虚拟机ubuntu系统出错“尝试连接 ECONNREFUSED - 连接被服务器拒绝, 失败,无法连接服务器”解决方案
  • 2024/11/13 英语每日一段
  • 【全栈开发平台】全面解析 StackBlitz 最新力作 Bolt.new:AI 驱动的全栈开发平台
  • 文献解读-DNAscope: High accuracy small variant calling using machine learning
  • 成都睿明智科技有限公司解锁抖音电商新玩法
  • 【操作系统】——调度算法
  • MySQL LOAD DATA INFILE导入数据报错
  • AI 写作(五)核心技术之文本摘要:分类与应用(5/10)
  • CTFL(二)贯穿软件开发生存周期中的测试
  • PMIC FS8405
  • matlab建模入门指导
  • 微搭低代码入门03函数
  • 零基础Java第十六期:抽象类接口(二)
  • 【css】html里面的图片宽度设为百分比,高度要与宽度一样
  • 前端三大组件之CSS,三大选择器,游戏网页仿写
  • sqlsever 分布式存储查询
  • deeponet(nature原文部分重点提取)