如何使用aws-cli调用MinIO服务端加密 Slack

MinIO支持采用客户端提供的秘钥(SSE-C)进行S3服务端加密。
客户端必须为SSE-C请求指定三个HTTP请求头:

安全须知:

1. 前提条件

这里下载MinIO Server,并安装成带有TLS的服务。

注意一下,如果你使用的是自己签名的TLS证书,那么当你往MinIO Server上传文件时,像aws-cli或者是mc这些工具就会报错。如果你想获得一个CA结构签名的TLS证书,请参考Let's Encrypt。自己签名的证书应该仅做为内部开发和测试。

2. 使用SSE-C和aws-cli

这里下载并安装aws-cli。

假设你在本地运行了一个MinIO Server,地址是https://localhost:9000,并且使用的是自己签名的证书。为了绕过TLS证书的验证,你需要指定--no-verify-ssl。如果你的MinIO Server使用的是一个CA认证的证书,那你永远永远永远不要指定`--no-verify-ssl,否则aws-cli会接受任何证书。

2.1 上传一个对象

  1. 创建一个名为my-bucket的存储桶:
    aws --no-verify-ssl --endpoint-url https://localhost:9000 s3api create-bucket --bucket my-bucket
  2. 使用SSE-C上传一个对象。对象名为my-secret-diary,内容来自文件~/my-diary.txt aws s3api put-object \ --no-verify-ssl \ --endpoint-url https://localhost:9000 \ --bucket my-bucket --key my-secret-diary \ --sse-customer-algorithm AES256 \ --sse-customer-key MzJieXRlc2xvbmdzZWNyZXRrZXltdXN0cHJvdmlkZWQ= \ --sse-customer-key-md5 7PpPLAK26ONlVUGOWlusfg== \ --body ~/my-diary.txt 你需要指定你自己的加密秘钥。

2.2 显示对象信息

必须指定正确的SSE-C秘钥才能得到加密对象的元数据:

  aws s3api head-object \
  --no-verify-ssl \
  --endpoint-url https://localhost:9000 \
  --bucket my-bucket \
  --key my-secret-diary \
  --sse-customer-algorithm AES256 \
  --sse-customer-key MzJieXRlc2xvbmdzZWNyZXRrZXltdXN0cHJvdmlkZWQ= \
  --sse-customer-key-md5 7PpPLAK26ONlVUGOWlusfg==

2.3 下载一个对象

  1. 删除文件my-diary.txt的本地副本:

    rm ~/my-diary.txt

  2. 你可以从服务器上把该文件重新下载下来:

    aws s3api get-object \
    --no-verify-ssl \
    --endpoint-url https://localhost:9000 \
    --bucket my-bucket \
    --key my-secret-diary \
    --sse-customer-algorithm AES256 \
    --sse-customer-key MzJieXRlc2xvbmdzZWNyZXRrZXltdXN0cHJvdmlkZWQ= \
    --sse-customer-key-md5 7PpPLAK26ONlVUGOWlusfg== \
    ~/my-diary.txt