• 如何使用aws-cli调用Minio服务端加密
    • 1. 前提条件
    • 2. 使用SSE-C和aws-cli
      • 2.1 上传一个对象
      • 2.2 显示对象信息
      • 2.3 下载一个对象

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

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

    • 算法标识符: X-Amz-Server-Side-Encryption-Customer-Algorithm唯一的合法值是: AES256。
    • 加密秘钥: X-Amz-Server-Side-Encryption-Customer-Key加密秘钥必须是一个256位的base64编码的字符串。
    • 加密密钥MD5校验和: X-Amz-Server-Side-Encryption-Customer-Key-MD5加密密钥MD5校验和必须是秘钥的MD5和,注意是原始秘钥的MD5和,而不是base64编码之后的。
      安全须知:

    • 根据S3规范,minio服务器将拒绝任何通过不安全(非TLS)连接进行的SSE-C请求。 这意味着SSE-C必须是TLS / HTTPS。

    • SSE-C请求包含加密密钥。 如果通过非TLS连接进行SSE-C请求,则必须将SSE-C加密密钥视为受损。
    • 根据S3规范,SSE-C PUT操作返回的content-md5与上传对象的MD5-sum不匹配。
    • Minio Server使用防篡改加密方案来加密对象,并且不会保存加密密钥。 这意味着您有责任保管好加密密钥。 如果你丢失了某个对象的加密密钥,你将会丢失该对象。
    • Minio Server期望SSE-C加密密钥是高熵的。加密密钥是不是密码。如果你想使用密码,请确保使用诸如Argon2,scrypt或PBKDF2的基于密码的密钥派生函数(PBKDF)来派生高熵密钥。

      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 上传一个对象

    • 创建一个名为my-bucket的存储桶:aws —no-verify-ssl —endpoint-url https://localhost:9000 s3api create-bucket —bucket my-bucket
    • 使用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秘钥才能得到加密对象的元数据:

    1. aws s3api head-object \
    2. --no-verify-ssl \
    3. --endpoint-url https://localhost:9000 \
    4. --bucket my-bucket \
    5. --key my-secret-diary \
    6. --sse-customer-algorithm AES256 \
    7. --sse-customer-key MzJieXRlc2xvbmdzZWNyZXRrZXltdXN0cHJvdmlkZWQ= \
    8. --sse-customer-key-md5 7PpPLAK26ONlVUGOWlusfg==

    2.3 下载一个对象

    • 删除文件my-diary.txt的本地副本:rm ~/my-diary.txt

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

    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

    原文: https://docs.minio.io/cn/how-to-use-minio-s-server-side-encryption-with-aws-cli.html