使用 KMS 为 S3 配置加密

本文介绍如何使用 KMS 密钥配置服务器端加密,以便使用 Unity 目录读取路径中的 s3a:// 文件。 它提供给需要跨云访问加密 S3 存储桶中的外部数据表和存储卷的用户。

使用 Unity 目录为 S3 配置加密

您可以配置服务器端加密,以允许 Unity Catalog 中的外部表和卷访问 S3 中的数据。 使用Delta Sharing共享的外部表不支持SSE加密。

步骤 1:在 AWS 中更新 KMS 密钥策略

为了保护 S3 中的数据,AWS 支持使用 Amazon S3 托管密钥(SSE-S3)或 AWS KMS 密钥(SSE-KMS)进行服务器端加密(SSE)。 如果使用 AWS S3 托管密钥,请跳到步骤 2。

  1. 在 AWS 中,转到 KMS 服务。

  2. 单击要向其添加权限的密钥。

  3. 在“ 密钥策略 ”部分中,选择“ 切换到策略”视图

  4. 编辑允许 S3 使用密钥的密钥策略部分,例如:

    {
        "Sid": "Allow access through S3 for all principals in the account that are authorized to use S3",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "kms:CallerAccount": "<AWS ACCOUNT ID>",
                "kms:ViaService": "s3.<REGION>.amazonaws.com"
            }
        }
    },
    
  5. 单击“保存更改”。

步骤 2:使用 Unity 目录配置对 S3 的访问

  1. 使用 “创建存储凭据以连接到 Azure Data Lake Storage”中的说明创建存储凭据连接到 S3。

    请确保在与 S3 存储桶相同的帐户中创建 IAM 策略。 如果使用 SSE-KMS,请在策略中包括以下内容:

      {
        "Action": [
            "kms:Decrypt",
            "kms:Encrypt",
            "kms:GenerateDataKey*"
        ],
        "Resource": [
            "arn:aws:kms:<KMS-KEY>"
        ],
        "Effect": "Allow"
    },
    

    请参阅 步骤 1:创建 IAM 角色

  2. 创建一个外部位置以连接到 S3,使用 “创建外部位置以将云存储连接到 Azure Databricks”中的说明

  3. 在外部位置配置服务器端加密,请参阅外部位置上的加密算法配置说明(仅适用于 AWS S3)