相关文章推荐
风流的火柴  ·  js数组对象求和-掘金·  1 年前    · 
逆袭的黑框眼镜  ·  Sql ...·  1 年前    · 

1.1 服务端加密

服务端在对象落盘之前加密对象,下载对象时由服务端自动解密。
MinIO支持的服务端加密又有两种具体的方式:

  • SSE-S3(使用S3托管密钥的服务器端加密)
  • SSE-C(使用客户托管密钥的服务器端加密)

1.2 客户端加密

客户端加密对象,然后上传服务端。下载对象时也由客户端解密。

2、MinIO加密实践

2.1 SSE-S3加密实践

MinIO使用密钥管理系统(KMS)支持SSE-S3(使用S3托管密钥的服务器端加密)。如果客户端请求SSE-S3,或启用了自动加密,则MinIO服务器会使用唯一的对象密钥对每个对象进行加密,该对象密钥受KMS管理的主密钥保护。由于开销极低,因此可以为每个应用程序和实例打开自动加密。
根据中文官网
http://docs.minio.org.cn/docs/master/minio-kms-quickstart-guide 的说法,MinIO仍提供本机Hashicorp Vault支持,但是此功能已 弃用 ,将来可能会删除。强烈建议使用下面的体系结构:
在这里插入图片描述
MinIO通过 KES 访问KMS,而不是直接访问KMS,每个MinIO群集均具有“自己的” KES实例。KES是一个用于高性能应用程序的无状态分布式密钥管理系统,它处理”其” MinIO群集发出的加密/解密请求,从而使KMS不必处理大量流量,KMS仅作为KES安全密钥的后台存储。
KES支持多种KMS实现 https://docs.min.io/docs/minio-kms-quickstart-guide.html ,推荐使用Hashicorp Vault。

2.1.1 部署Vault

  1. 生成Vault服务TLS证书
# mkdir /vault && cd /vault
# kes tool identity new --server --key vault-tls.key --cert vault-tls.crt --ip "127.0.0.1" --dns localhost
  1. 生成Vault服务配置文件
# cat > /vault/vault-config.json <<EOF
  "api_addr": "https://127.0.0.1:8200",
  "backend": {
    "file": {
      "path": "/vault/file"
  "default_lease_ttl": "168h",
  "max_lease_ttl": "720h",
  "listener": {
    "tcp": {
      "address": "0.0.0.0:8200",
      "tls_cert_file": "vault-tls.crt",
      "tls_key_file": "vault-tls.key",
      "tls_min_version": "tls12"

请注意,我们使用文件后端运行Vault。为了获得高可用性,您可能需要使用其他 后端,例如etcdconsul

  1. 启动vault服务
# vault server -config /vault/vault-config.json
  1. 初始化vault服务。初始化过程中输出五个unseal key和Initial Root Token,须记录下来
# cat /vault/vault-tls.crt >> /etc/pki/tls/certs/ca-bundle.crt
# export VAULT_ADDR='https://127.0.0.1:8200'
# vault operator init
Unseal Key 1: 2UdRWTs2OW180j3VmdFT8etIduOeKx9qfG6Mru4gIASJ
Unseal Key 2: 51N6gWQpQ9xj6IbIJkGVdGjCURzpDcXYifomWUX278ZF
Unseal Key 3: w+pUdOSsR+awHF3ca9x0OtvQcdVhEkXiFBX26U0mpAsh
Unseal Key 4: bWXZPvccAVuqXDa5ufG5dx/5JDByRb+9W+TgwXtdMEP2
Unseal Key 5: hETyueJ4ovsDpwlwrhf8AqMgHvd56BMW26yomsrbDpNT
Initial Root Token: s.Oy3abPynrVZBvB9ixZGbVdf1
  1. 解封。在使用vault之前,需要对vault进行解封,用任意3 个Unseal Key可解封
# vault operator unseal 2UdRWTs2OW180j3VmdFT8etIduOeKx9qfG6Mru4gIASJ
# vault operator unseal 51N6gWQpQ9xj6IbIJkGVdGjCURzpDcXYifomWUX278ZF
# vault operator unseal w+pUdOSsR+awHF3ca9x0OtvQcdVhEkXiFBX26U0mpAsh
# vault status
  1. 启用KV密钥管理引擎
# export VAULT_TOKEN=s.Oy3abPynrVZBvB9ixZGbVdf1
# vault secrets enable kv
# vault secrets list
  1. 启用AppRole身份验证
# vault auth enable approle
# vault auth list
  1. 创建Policy
# cd /vault
# cat > minio-kes-policy.hcl <<EOF
path "kv/minio/*" {
  capabilities = [ "create", "read", "delete" ]
# vault policy write minio-key-policy ./minio-kes-policy.hcl
# vault policy list
# vault policy read minio-key-policy
  1. 创建一个新的AppRole并将其绑定到策略
# vault write auth/approle/role/kes-role token_num_uses=0  secret_id_num_uses=0  period=5m
# vault write auth/approle/role/kes-role policies=minio-key-policy
  1. 获取AppRole Role ID和 Secret ID
# vault read auth/approle/role/kes-role/role-id
Key        Value
---        -----
role_id    d461eddf-db49-b261-b08a-6f7201992e33
# vault write -f auth/approle/role/kes-role/secret-id
Key                   Value
---                   -----
secret_id             2646ee0c-8a7a-7e79-bf5a-52f1e3f203bd
secret_id_accessor   ……

2.1.2 部署Kes

  1. 生成KES 服务TLS证书
# mkdir /kes && cd /kes
# kes tool identity new --server --key kes-tls.key --cert kes-tls.crt --ip "127.0.0.1" --dns localhost
  1. 创建MinIO标识

连接KES服务器时,用户或应用程序必须出示有效的X.509证书。因此,每个MinIO群集都需要一个X.509 TLS证书来进行客户端身份验证。

**创建(自签名)证书**
# kes tool identity new --key=minio.key --cert=minio.crt --time=8760h MinIO
此处MinIO是[subject name]。 您可以为您的部署方案选择一个更合适的名称。
**获取证书ID**
# kes tool identity of minio.crt
Identity:  672e00c31f9276ac0e98e5e9ddfe99e36d0e05d4e8a405185e5c30d9b948134b
  1. 创建KES配置文件
# cat > kes-config.yaml << EOF
# Refer: https://github.com/minio/kes/blob/master/server-config.yaml
# The TCP address (ip:port) for the KES server to listen on.
address: 0.0.0.0:7373
  key:  kes-tls.key
  cert: kes-tls.crt
policy:
  minio:
    paths:
    - /v1/key/create/minio-*
    - /v1/key/generate/minio-*
    - /v1/key/decrypt/minio-*
    identities:
    - 672e00c31f9276ac0e98e5e9ddfe99e36d0e05d4e8a405185e5c30d9b948134b # identity of minio.crt
cache:
  expiry:
    any:    5m0s 
    unused: 20s 
keystore:
  vault:
    endpoint: https://127.0.0.1:8200  # The Vault endpoint
    prefix:   minio                   # The domain resp. prefix at Vault's K/V backend 
    approle:
      id:     "d461eddf-db49-b261-b08a-6f7201992e33"    # Your AppRole Role ID 
      secret: "2646ee0c-8a7a-7e79-bf5a-52f1e3f203bd"    # Your AppRole Secret ID
      retry:  15s   # Duration until the server tries to re-authenticate after connection loss.
      ca: /vault/vault-tls.crt  # Since we use self-signed certificates
    status:
      ping: 10s
  1. 启动Kes
# kes server --config=kes-config.yaml --mlock --root=disabled --auth=off
因为minio.crt是自签名证书,--auth=off不校验证书。
# cat /kes/kes-tls.crt >> /etc/pki/tls/certs/ca-bundle.crt
# export KES_CLIENT_KEY=/kes/minio.key
# export KES_CLIENT_CERT=/kes/minio.crt
# kes key create minio-key-1
# export VAULT_TOKEN=s.Oy3abPynrVZBvB9ixZGbVdf1
# vault kv list kv/minio
# vault kv get kv/minio/minio-key-1

2.1.3 部署MinIO

  1. 生成MinIO服务TLS证书
# cd /root/.minio/certs
# openssl req -new -x509 -days 3650 -key private.key -out public.crt -subj "/C=CN/ST=GD/L=SZ/O=example/CN=minio.example.com"
  1. 启动MinIO
# export MINIO_KMS_KES_ENDPOINT=https://127.0.0.1:7373
# export MINIO_KMS_KES_KEY_FILE=/kes/minio.key
# export MINIO_KMS_KES_CERT_FILE=/kes/minio.crt
# export MINIO_KMS_KES_KEY_NAME=minio-key-1
# export MINIO_ACCESS_KEY=QS8W8H15JS0F6ZRN0F9S
# export MINIO_SECRET_KEY=IRDCiiHxhVd5eDbkcVRh77R00VdS3NTgx5J7JXg4
# minio server /data --address :443 --certs-dir /root/.minio/certs

2.1.4 加密验证

  1. 设置存储桶自动加密属性,上传到该存储桶的所有对象都将自动加密。
# mc mb myminio/bucket1
# mc encrypt set sse-s3 myminio/bucket1
Auto encryption configuration has been set successfully for myminio/bucket1
# mc encrypt info myminio/bucket1
Auto encryption 'sse-s3' is enabled
  1. 上传测试文件到存储桶。
# cat > test.txt << EOF
This is a test!
# mc cp test.txt myminio/bucket1
  1. 检查存储桶中对象状态,已加密
# mc stat myminio/bucket1/test.txt
Name      : test.txt
Encrypted :
X-Amz-Server-Side-Encryption: AES256
  1. 下载测试文件,文件已自动解密
# mc cp myminio/bucket1/test.txt /tmp
# cat /tmp/test.txt
This is a test!

2.2 SSE-C加密实践

Minio支持采用客户端提供的密钥(SSE-C)进行服务端加密。

  1. 创建存储桶
# mc mb myminio/bucket2
# mc encrypt info myminio/bucket2
mc: <ERROR> Unable to get encryption info. The server side encryption configuration was not found.
  1. 上传测试文件,提供SSE-C密钥
# mc cp --encrypt-key "myminio/bucket2=MzJieXRlc2xvbmdzZWNyZWFiY2RlZmcJZ2l2ZW5uMjE=" /root/test.txt  myminio/bucket2
/root/test.txt:    16 B / 16 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 2.32 KiB/s 0s
  1. 下载测试文件,提供正确的SSE-C密钥
# mc cp --encrypt-key "myminio/bucket2=MzJieXRlc2xvbmdzZWNyZWFiY2RlZmcJZ2l2ZW5uMjF=" myminio/bucket2/test.txt /tmp
...16.2.106/bucket2/test.txt:  16 B / 16 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 2.27 KiB/s 0s
  1. 下载测试文件,提供错误的SSE-C密钥
# mc cp --encrypt-key "myminio/bucket2=wrongpassword" myminio/bucket2/test.txt /tmp
mc: <ERROR> Unable to validate source \`myminio/bucket2/test.txt\`.

2.3 客户端加密实践

s3cmd支持客户端加密,mc貌似不具备这个功能。

# s3cmd put –h
-e, --encrypt         Encrypt files before uploading to S3.
  1. 设置s3cmd加密密码
# vi /root/.s3cfg
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
**gpg_passphrase = `123456`**

从配置文件中可以看到,s3cmd其实是调用了/usr/bin/gpg加密与解密对象

  1. 上传测试文件
# s3cmd -e put test.txt s3://bucket3
upload: '/tmp/tmpfile-NInvNVIC2zPu8wfqFaPv' -> 's3://bucket3/test.txt'  [1 of 1]
59 of 59   100% in    0s  1338.84 B/s  done
  1. 下载测试文件
# s3cmd -e get s3://bucket3/test.txt /tmp -f
download: 's3://bucket3/test.txt' -> '/tmp/test.txt'  [1 of 1]
59 of 59   100% in    0s    14.07 kB/s  done
# cat /tmp/test.txt
This is a test!
                    1、关于MinIO对象存储加密MinIO对象存储支持服务端加密和客户端加密。1.1 服务端加密服务端在对象落盘之前加密对象,下载对象时由服务端自动解密。MinIO支持的服务端加密又有两种具体的方式:SSE-S3(使用S3托管密钥的服务器端加密)SSE-C(使用客户托管密钥的服务器端加密)1.2 客户端加密客户端加密对象,然后上传服务端。下载对象时也由客户端解密。2、MinIO加密实践2.1 SSE-S3加密实践MinIO使用密钥管理系统(KMS)支持SSE-S3(使用S3托管密钥的
java_app_dev/minio_test
mkdir data    #在minio当前路径下面创建data文件夹
chmod +x ./minio    #将minio设置为可执行文件
./minio server ./data    #启动minio
minio 兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支持Java,Python,Javacript, Golang语言。
Minio可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作
在Windows,Linux, OS X和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来
				
二. 启动一个miniio容器 账号是minio; 密码是minio123端口9090或9999(确保在服务器放行相关端口即可访问)点击 create a Bucket 创建一个bucket(桶), 这里的Bucket 我们可以理解为文件存储的目录输入 bucket name ,点击create bucket 。可以通过 upload 上传文件到bucket中。 测试类(需要输入自己的账号密码和IP) 五. 配置权限 如果我们需要我们上传的文件可以被匿名用户访问,那么需要添加访问权限:找到文件存储
文件服务算是一个基础服务了,比较专业的组件有FastDFS,也可以采用基本的保存在本地的文件上传方式,但是其安全性不高。下面聊聊springboot集成文件服务组件MinIOMinIO是一个基于Apache License v2.0开源协议的对象存储服务,非常合适存储大容量非结构化的数据,如图片、视频、日志文件等,一个对象文件的大小可以是几KB到5T不等。MinIO是一个轻量级的服务,类似redis、mysql,可以很方便的和其他应用结合。 MinIO的特点请查看官网,https://min.io/。 <Error> <Code>InvalidArgument</Code> <Message>Requests specifying Server Side Encryption with KMS managed keys require Signature Version 4.</Message> <RequestId>00000179A7E71D6999121E9BF0D8A85B
Minio是建立在云原生的基础上;有分布式和共享存储等功能;旨在多租户环境中以可持续的方式进行扩展的对象存储服务。它最适合存储非结构化数据,如:照片、视频、日志文件、容器/虚拟机/映像等,单次存储对象的大小最大可达5TB。 根据存储是否为远端,可直接使用FS或NFS直接操作存储中的Object 调用S3接口,通过Minio使用FS或NFS来操作Object
Mino购物优惠券 https://m.cqfenfa.com/ 目录Mino对象存储服务Minio参考Minio 架构为什么要用 Minio存储机制纠删码MinIO概念部署单机部署:Docker 部署Minio分布式MinioMinio配置如何存储和访问对象MinIO Client (mc)命令使用通过代码存储对象 对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化.
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。 MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。目前支持JavaScript 、Java、Python、Golang、.NET。 MinIO现在也是CNCF成员,在云原生存储部
Minio是一个开源的对象存储服务器,支持多种语言的客户端。以下是使用Minio上传文件的一般步骤: 1. 安装Minio客户端:在不同的开发语言中,Minio都提供了相应的客户端库,例如Java,Python,Go等。在使用Minio之前,需要先安装对应的Minio客户端库。 2. 设置Minio服务端的连接:使用Minio客户端需要先连接Minio服务端,需要提供服务器地址、端口号、access key和secret key。 3. 创建存储桶:Minio使用存储桶来组织对象,在上传文件之前,需要先创建一个存储桶,可以在Minio控制台中进行创建。 4. 上传文件:使用Minio客户端的putObject方法可以上传文件,需要提供存储桶名称、对象名称和文件路径。 以上是使用Minio上传文件的一般流程,具体的实现方式可以参考Minio官方文档。
你的问题解决了吗?我这里直接报错了 [code=plain] [root@VM-0-17-centos kes]# kes tool identity new --server --key vault-tls.key --cert vault-tls.crt --ip "127.0.0.1" --dns localhost -bash: kes: command not found [/code]
MinIO对象存储加密实践 [code=html] cd ./kes identity new --key=./certs/kes-tls.key --cert=./certskes-tls.crt --ip "127.0.0.1" --expiry=87600h localhost --force [/code] 您好,执行命令没报错,但是在certs文件中没有生成对应的key和crt文件是怎么回事呢? MinIO对象存储加密实践 南国异梦: 目前文档自动加密是自己通过mc命令实现,怎么可以让新创建桶的都启动自动加密,有没有全局配置啥的 用MinIO对象存储构建企业数据集中备份系统 lichanggu: 同一存储桶的双向复制确实我也没试过,看mc的帮助好象是可以的。实验一下可以,生产环境的话还是单向复制好。 用MinIO对象存储构建企业数据集中备份系统 码农--皮卡丘: 问一下,关于第4点,数据同步复制中的同步对象存储site-A到存储site-B报错Failed to perform mirroring A specified event is not supported for notifications. 这个怎么解决啊