阿里云 OSS 支持在服务器端对上传到存储空间(Bucket)的数据进行加密(Server-Side Encryption),对持久化在 OSS 上的数据进行加密保护。

上传数据时,OSS 对收到的用户数据进行加密,然后再将得到的加密数据持久化保存下来;下载数据时,OSS 自动对保存的加密数据进行解密并把原始数据返回给用户,并在返回的 HTTP 请求 Header 中,声明该数据进行了服务器端加密。
说明 服务器端加密功能详情请参见服务器端加密
您可以通过以下两种方式在 OSS 控制台上开启服务器端加密功能:

操作视频

观看以下视频,快速了解如何配置服务器端加密。

方式一:创建 Bucket 时开启服务器端加密功能

  1. 登录 OSS 管理控制台
  2. 单击新建 Bucket
  3. 新建 Bucket 对话框填写各项参数。
    其中,服务器端加密栏选择您希望使用的加密方式,其他参数,请参考创建存储空间
    • :不启用服务器端加密功能。
    • AES256:使用 AES256 加密每个对象。OSS 会为每个对象使用不同的密钥进行加密,作为额外的保护,它将使用定期轮转的主密钥对加密密钥本身进行加密。
    • KMS:可以使用指定的 CMK ID 或者 KMS 默认托管的 CMK 进行加解密操作。KMS 加密详细的介绍请参考使用 KMS 托管密钥进行加解密
      • alias/acs/oss:使用默认托管的 CMK 生成不同的密钥来加密不同的对象,并且在下载时自动解密。
      • CMK ID:使用指定的 CMK 生成不同的密钥来加密不同的对象,并将加密 Object 的 CMK ID 记录到对象的元数据中,因此具有解密权限的用户下载对象时会自动解密。选择指定的 CMK ID 前,需在 KMS 管理控制台创建一个与 Bucket 相同地域的普通密钥或外部密钥。目前此项公测中,请联系技术支持添加权限。
      注意
      • 使用 KMS 加密方式前,需开通 KMS 服务
      • 使用 KMS 密钥功能时会产生少量的 KMS 密钥 API 调用费用,费用详情请参考KMS计费标准
  4. 单击确定

方式二:在基础设置页签开启服务器端加密功能

  1. 登录 OSS 管理控制台
  2. 在存储空间列表,选择指定 Bucket。
  3. 单击基础设置,在服务器端加密区域,单击设置
    • :不启用服务器端加密功能。
    • AES256:使用 AES256 加密每个对象。OSS 会为每个对象使用不同的密钥进行加密,作为额外的保护,它将使用定期轮转的主密钥对加密密钥本身进行加密。
    • KMS:可以使用指定的 CMK ID 或者 KMS 默认托管的 CMK 进行加解密操作。KMS 加密详细的介绍请参考使用 KMS 托管密钥进行加解密
      • alias/acs/oss:使用默认托管的 CMK 生成不同的密钥来加密不同的对象,并且在下载时自动解密。
      • CMK ID:使用指定的 CMK 生成不同的密钥来加密不同的对象,并将加密 Object 的 CMK ID 记录到对象的元数据中,因此具有解密权限的用户下载对象时会自动解密。选择指定的 CMK ID 前,需在 KMS 管理控制台创建一个与 Bucket 相同地域的普通密钥或外部密钥。目前此项公测中,请联系技术支持添加权限。
      注意
      • 使用 KMS 加密方式前,需开通 KMS 服务
      • 使用 KMS 密钥功能时会产生少量的 KMS 密钥 API 调用费用,费用详情请参考KMS计费标准
  4. 单击保存
    注意 开启或修改 Bucket 默认加密方式不会对 Bucket 内已有文件添加或修改加密方式。

权限说明

子账号在使用服务端加解密时,需要具有以下权限:
  • 设置 Bucket 默认加密方式
    • 具有对应 Bucket 的管理权限。
    • 具有“put bucket encryption”和“Get Bucket Encryption”权限。
    • 若设置加密方式为 KMS 指定的 CMK ID,还需要“ListKeys”、“Listalias”、“ListAliasesByKeyId”以及“DescribeKeys”权限。指定 CMK ID 相关权限的 RAM Policy 策略如下:
      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "kms:List*",
              "kms:DescribeKey"    
            ],
            "Resource": [
              "acs:kms:*:1416614965936597:*" //当前示例表示允许调用该账号下所有的 KMS 密钥,如果仅限制使用某个 KMS,此处可输入对应的 CMK ID。
            ]
          }
        ]
      }
  • 上传文件至设置了默认加密方式的 Bucket
    • 指定 Bucket 上传文件权限。
    • 若设置加密方式为 KMS 指定的 CMK ID,还需要“ListKeys”、“Listalias”、“ListAliasesByKeyId”、“DescribeKeys”以及“GenerateDataKey”权限,若无改权限,则上传文件失败。指定 CMK ID 相关权限的 RAM Policy 策略如下:
      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "kms:List*",
              "kms:DescribeKey",
              "kms:GenerateDataKey"
            ],
            "Resource": [
              "acs:kms:*:1416614965936597:*"//当前示例表示允许调用该账号下所有的KMS密钥,如果仅限制使用某个KMS,此处可输入对应的CMK ID
            ]
          }
        ]
      }
  • 从设置了默认加密方式的 Bucket 中下载文件
    • 指定 Bucket 的文件访问权限。
    • 若设置加密方式为 KMS 指定的 CMK ID,还需要“Decrypt”权限,若无该权限,则下载文件失败。指定 CMK ID 相关权限的 RAM Policy 策略如下:
      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
          "kms:Decrypt"
            ],
            "Resource": [
              "acs:kms:*:1416614965936597:*"//该示例表示子账号具有当前所有KMS的解密权限。若要针对某个KMS密钥进行解密,此处可输入对应的CMK ID
            ]
          }
        ]
      }