

# AWS Glue 中的数据保护
<a name="data-protection"></a>

AWS Glue 提供多种功能，旨在帮助保护您的数据。

**Topics**
+ [

# 加密静态数据
](encryption-at-rest.md)
+ [

# 加密传输中数据
](encryption-in-transit.md)
+ [

# FIPS 合规性
](fips-compliance.md)
+ [

# 密钥管理
](key-management.md)
+ [

# AWS Glue 对其他 AWS 服务的依赖
](dependency-on-other-services.md)
+ [

# 开发终端节点
](dev-endpoints.md)

# 加密静态数据
<a name="encryption-at-rest"></a>

AWS Glue 支持 [构建可视化 ETL 作业](author-job-glue.md) 和 [使用开发终端节点来开发脚本](dev-endpoint.md) 的静态数据加密。您可以配置提取、转换和加载（ETL）任务和开发终端节点，以使用 [AWS Key Management Service（AWS KMS）](https://aws.amazon.com/kms/)密钥写入加密的静态数据。您也可以使用您通过 AWS KMS 管理的密钥加密存储在 [AWS Glue Data Catalog](components-overview.md#data-catalog-intro) 中的元数据。此外，您可以使用 AWS KMS 密钥来加密作业书签以及[爬网程序](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)和 ETL 作业生成的日志。

您可以加密 AWS Glue Data Catalog 中的元数据对象，以及由任务、爬网程序和开发终端节点写入 Amazon Simple Storage Service（Amazon S3）和 Amazon CloudWatch Logs 的数据。当您在 AWS Glue 中创建任务、爬网程序和开发终端节点时，您可以通过附加安全配置来提供加密设置。安全配置包含 Amazon S3 托管的服务器端加密密钥（SSE-S3）或存储在 AWS KMS 中的客户主密钥（CMK）（SSE-KMS）。您可以使用 AWS Glue 控制台创建安全配置。

您也可以在账户中启用整个数据目录的加密。您可以通过指定存储在 AWS KMS 中的 CMK 来执行此操作。

**重要**  
AWS Glue 仅支持对称客户管理型密钥。有关更多信息，请参阅《AWS Key Management Service 开发人员指南》中的 [Customer Managed Keys (CMKs)](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)**。  


启用加密后，当您添加数据目录对象时，运行爬网程序、运行任务或启动开发终端节点时，SSE-S3 或 SSE-KMS 密钥用于写入静态数据。此外，您可以将 AWS Glue 配置为仅通过受信任的传输层安全性 (TLS) 协议访问 Java 数据库连接 (JDBC) 数据存储。

在 AWS Glue 中，您可以在以下位置控制加密设置：
+ 数据目录的设置。
+ 您创建的安全配置。
+ 作为参数传递给 AWS Glue ETL（提取、转换和加载）任务的服务器端加密设置（SSE-S3 或 SSE-KMS）。

有关如何设置加密的更多信息，请参阅 [在 AWS Glue 中设置加密](set-up-encryption.md)。

**Topics**
+ [

# 加密数据目录
](encrypt-glue-data-catalog.md)
+ [

# 加密连接密码
](encrypt-connection-passwords.md)
+ [

# 加密 AWS Glue 写入的数据
](encryption-security-configuration.md)

# 加密数据目录
<a name="encrypt-glue-data-catalog"></a>

AWS Glue Data Catalog 加密可提高敏感数据的安全性。AWS Glue与 AWS Key Management Service（AWS KMS）集成，以加密存储在数据目录中的元数据。您可以使用 AWS Glue 控制台或 AWS CLI，为数据目录中的资源启用或禁用加密设置。

为数据目录启用加密时，您创建的所有新对象都将被加密。禁用加密后，您创建的新对象将不会被加密，但现有的加密对象将保持加密状态。

您可以使用 AWS 托管加密密钥或客户管理型加密密钥对整个数据目录进行加密。有关密钥类型和状态的更多信息，请参阅《AWS Key Management Service 开发人员指南》中的 [AWS Key Management Service 概念](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html#key-state-cmk-type)。

**注意**  
将加密的数据目录与爬网程序一起使用时，必须保持加密设置。如果在爬网程序处理完加密目录之后移除加密设置，则会导致错误。如果需要移除加密设置，请创建一个新的爬网程序而不是修改现有的爬网程序。

## AWS 托管密钥
<a name="AWS-managed-keys"></a>

 AWS 托管密钥是由与 AWS KMS集成的 AWS 服务代表您在账户中创建、管理和使用的 KMS 密钥。可以在 AWS CloudTrail 日志中查看账户中的 AWS 托管密钥，查看其密钥策略以及审计其使用情况。但是，您无法管理这些 KMS 钥或更改其权限。

静态加密自动集成 AWS KMS，从而管理 AWS Glue 用于加密元数据的 AWS 托管密钥。如果启用元数据加密时 AWS 托管密钥尚不存在，AWS KMS 将自动为您创建新密钥。

有关更多信息，请参阅 [AWS 托管式密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)。

## 客户自主管理型密钥
<a name="customer-managed-keys"></a>

客户托管密钥是在您的 AWS 账户 中创建、拥有和托管的 KMS 密钥。您对 KMS 密钥拥有全部控制权。您可以：
+  建立和维护密钥政策、IAM 策略和授权 
+ 启用和禁用密钥
+  轮换加密材料 
+  添加标签 
+ 创建引用密钥的别名
+  计划密钥的删除

有关管理客户管理型密钥权限的更多信息，请参阅[客户管理型密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**重要**  
AWS Glue 仅支持对称客户管理型密钥。KMS 密钥列表仅显示对称密钥。但是，如果选择了**选择 KMS 密钥 ARN**，则可通过控制台输入任何密钥类型的 ARN。确保仅为对称密钥输入 ARN。  
要创建对称客户管理型密钥，请按照《AWS Key Management Service 开发人员指南》中的 [creating symmetric customer managed keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk) 部分的步骤进行操作。

启用数据目录静态加密时，将使用 KMS 密钥对以下资源类型进行加密：
+ 数据库
+ 表
+ 分区
+ 表格版本
+ 列统计数据
+ 用户定义的函数
+ 数据目录视图

## AWS Glue 加密上下文
<a name="encryption-context"></a>

 [加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)是一组可选的键值对，包含有关数据的其他上下文信息。AWS KMS 会将加密上下文用作[其他已经过验证的数据](https://docs.aws.amazon.com/crypto/latest/userguide/cryptography-concepts.html#term-aad)以支持[经过身份验证的加密](https://docs.aws.amazon.com/crypto/latest/userguide/cryptography-concepts.html#define-authenticated-encryption)。在请求中包含加密上下文以加密数据时，AWS KMS 将加密上下文绑定到加密的数据。要解密数据，请在请求中包含相同的加密上下文。AWS Glue 在所有 AWS KMS 加密操作中使用相同的加密上下文，其中键为 `glue_catalog_id`，值为 `catalogId`。

```
"encryptionContext": {
    "glue_catalog_id": "111122223333"
}
```

 使用 AWS 托管密钥或对称的户管理型密钥来加密数据目录时，还可以使用审计记录和日志中的加密上下文来识别密钥的使用情况。加密上下文还会显示在 AWS CloudTrail 生成的日志或 Amazon CloudWatch 日志中。

## 启用加密
<a name="enable-encryption"></a>

 您可以通过 AWS Glue 控制台中的**数据目录设置**，或者使用 AWS CLI 为 AWS Glue Data Catalog 对象启用加密。

------
#### [ Console ]

**使用控制台启用加密**

1. 登录 AWS 管理控制台，然后打开 AWS Glue 控制台，网址为：[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)。

1. 在导航窗格中，选择**数据目录**。

1. 在**数据目录设置**页面上，选中**元数据加密**复选框，然后选择一个 AWS KMS 密钥。

   启用加密时，如果您未指定客户管理型密钥，则加密设置将使用 AWS 托管 KMS 密钥。

1. （可选）如果您使用客户管理型密钥加密数据目录，Data Cat alog提供了一个用于注册 IAM 角色来加密和解密资源的选项。您需要向您的 IAM 角色授予 AWS Glue 可以代表代入的权限。这包括加密和解密数据的 AWS KMS 权限。

   当您在数据目录中创建新资源时，AWS Glue 将代入所提供的 IAM 角色来加密数据。同样，当使用者访问资源时，AWS Glue 也会代入该 IAM 角色来解密数据。如果您注册了具有所需权限的 IAM 角色，则调用主体不再需要访问密钥和解密数据的权限。
**重要**  
只有当您使用客户管理型密钥加密数据目录资源时，您才能将 KMS 操作委派给 IAM 角色。KMS 角色委派功能目前不支持使用 AWS 托管密钥加密数据目录资源的情形。
**警告**  
当您启用 IAM 角色委派 KMS 操作的权限时，您将无法再访问以前使用 AWS 托管密钥加密的数据目录资源。

   1. 要启用 AWS Glue 可以代入以代表您加密和解密数据的 IAM 角色，请选择**将 KMS 操作委派给 IAM 角色**选项。

   1. 然后选择一个 IAM 角色。

      要创建 IAM 角色，请参阅 [为 AWS Glue 创建 IAM 角色](https://docs.aws.amazon.com/glue/latest/dg/create-an-iam-role.html)。

      AWS Glue 访问数据目录时将代入的 IAM 角色必须具有加密和解密数据目录中元数据的权限。您可以创建一个 IAM 角色并附加以下内联策略：
      + 添加以下策略以包括加密和解密数据目录的 AWS KMS 权限。

------
#### [ JSON ]

****  

        ```
        {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:GenerateDataKey"
              ],
              "Resource": "arn:aws:kms:us-east-1:111122223333:key/<key-id>"
            }
          ]
        }
        ```

------
      + 然后将以下信任策略添加到该角色，以便 AWS Glue 服务代入该 IAM 角色。

------
#### [ JSON ]

****  

        ```
        {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
            {
              "Sid": "",
              "Effect": "Allow",
              "Principal": {
                "Service": "glue.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        }
        ```

------
      + 然后向该 IAM 角色添加 `iam:PassRole` 权限。

------
#### [ JSON ]

****  

        ```
        {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "iam:PassRole"
              ],
              "Resource": [
                "arn:aws:iam::111122223333:role/<encryption-role-name>"
              ]
            }
          ]
        }
        ```

------

   启用加密后，如果您尚未指定 AWS Glue 要代入的 IAM 角色，则访问数据目录的主体必须具有执行以下 API 操作的权限：
   + `kms:Decrypt`
   + `kms:Encrypt`
   + `kms:GenerateDataKey`

------
#### [ AWS CLI ]

**使用开发工具包或 AWS CLI 启用加密**
+ 使用 `PutDataCatalogEncryptionSettings` API 操作。如果未指定密钥，AWS Glue 将使用客户账户的 AWS 托管加密密钥对数据目录进行加密。

  ```
  aws glue put-data-catalog-encryption-settings \
    --data-catalog-encryption-settings '{
        "EncryptionAtRest": {
        "CatalogEncryptionMode": "SSE-KMS-WITH-SERVICE-ROLE",
        "SseAwsKmsKeyId": "arn:aws:kms:<region>:<account-id>:key/<key-id>",
        "CatalogEncryptionServiceRole":"arn:aws:iam::<account-id>:role/<encryption-role-name>"
      }
  
    }'
  ```

------

 启用加密后，您在数据目录对象中创建的所有对象都将被加密。如果您清除此设置，您在数据目录中创建的对象将不再加密。您可以继续使用所需的 KMS 权限访问数据目录中现有的加密对象。


|  | 
| --- |
|   对于在数据目录中使用 AWS KMS 密钥加密的任何对象，此密钥必须在 AWS KMS 密钥存储中保持可用。如果删除密钥，则无法再对对象进行解密。在某些情况下，您可能希望阻止访问数据目录元数据。   | 

## 监控用于 AWS Glue 的 KMS 密钥
<a name="monitoring-keys"></a>

 当您将 KMS 密钥用于数据目录资源时，您可以使用 AWS CloudTrail 或 Amazon CloudWatch 日志来跟踪 AWS Glue 发送到 AWS KMS的请求。AWS CloudTrail 会监控并记录 AWS Glue 为了访问使用您的 KMS 密钥加密的数据而调用的 KMS 操作。

 以下是 `Decrypt` 和 `GenerateDataKey` 操作的 AWS CloudTrail 事件示例。

------
#### [ Decrypt ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAXPHTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAXPHTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/Admin",
                "accountId": "111122223333",
                "userName": "Admin"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2024-01-10T14:33:56Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "glue.amazonaws.com"
    },
    "eventTime": "2024-01-10T15:18:11Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "eu-west-2",
    "sourceIPAddress": "glue.amazonaws.com",
    "userAgent": "glue.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "glue_catalog_id": "111122223333"
        },
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "requestID": "43b019aa-34b8-4798-9b98-ee968b2d63df",
    "eventID": "d7614763-d3fe-4f84-a1e1-3ca4d2a5bbd5",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:<region>:111122223333:key/<key-id>"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management",
    "sessionCredentialFromConsole": "true"
}
```

------
#### [ GenerateDataKey ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAXPHTESTANDEXAMPLE:V_00_GLUE_KMS_GENERATE_DATA_KEY_111122223333",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/V_00_GLUE_KMS_GENERATE_DATA_KEY_111122223333",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAXPHTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/Admin",
                "accountId": "AKIAIOSFODNN7EXAMPLE",
                "userName": "Admin"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2024-01-05T21:15:47Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "glue.amazonaws.com"
    },
    "eventTime": "2024-01-05T21:15:47Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "eu-west-2",
    "sourceIPAddress": "glue.amazonaws.com",
    "userAgent": "glue.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:eu-west-2:AKIAIOSFODNN7EXAMPLE:key/AKIAIOSFODNN7EXAMPLE",
        "encryptionContext": {
            "glue_catalog_id": "111122223333"
        },
        "keySpec": "AES_256"
    },
    "responseElements": null,
    "requestID": "64d1783a-4b62-44ba-b0ab-388b50188070",
    "eventID": "1c73689b-2ef2-443b-aed7-8c126585ca5e",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:eu-west-2:111122223333:key/AKIAIOSFODNN7EXAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------

```
      
```

# 加密连接密码
<a name="encrypt-connection-passwords"></a>

您可以使用 `GetConnection` 和 `GetConnections` API 操作在 AWS Glue Data Catalog 中检索连接密码。这些密码存储在数据目录连接中，并在 AWS Glue 连接到 Java 数据库连接（JDBC）数据存储时使用。创建或更新连接时，数据目录设置中有一个选项确定密码是否已加密，如果已加密，则确定指定了哪个 AWS Key Management Service（AWS KMS）密钥。

在 AWS Glue 控制台中，您可以在 **Data catalog settings (数据目录设置)** 页面上启用该选项：

**加密连接密码**

1. 登录 AWS 管理控制台，然后打开 AWS Glue 控制台，网址为：[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)。

1. 在导航窗格中，选择 **Settings (设置)**。

1. 在 **Data catalog settings (数据目录设置)** 页面上，选择 **Encrypt connection passwords (加密连接密码)**，然后选择一个 AWS KMS 密钥。
**重要**  
AWS Glue 只支持对称客户主密钥（CMK）。**AWS KMS key (Amazon KMS 密钥)** 列表仅显示对称密钥。但是，如果选择 **Choose a AWS KMS key ARN (选择 Amazon KMS 密钥 ARN)**，控制台允许您为任何密钥类型输入 ARN。确保仅为对称密钥输入 ARN。

   有关更多信息，请参阅 [Data Catalog 设置](console-data-catalog-settings.md)。

# 加密 AWS Glue 写入的数据
<a name="encryption-security-configuration"></a>

*安全配置*是 AWS Glue 可以使用的一组安全属性。您可以使用安全配置加密静态数据。以下场景显示了使用安全配置的一些方法。
+ 将安全配置附加到 AWS Glue 爬网程序以写入加密的 Amazon CloudWatch Logs。有关将安全配置附加到爬网程序的更多信息，请参阅 [步骤 3：配置安全设置](define-crawler-configure-security-settings.md)。
+ 将安全配置附加到提取、转换和加载（ETL）任务以写入加密的 Amazon Simple Storage Service（Amazon S3）目标和加密的 CloudWatch Logs。
+ 将安全配置附加到 ETL 任务以将其任务书签作为加密 Amazon S3 数据写入。
+ 将安全配置附加到开发终端节点以写入加密的 Amazon S3 目标。

**重要**  
目前，安全配置会覆盖作为 ETL 任务参数传递的任何服务器端加密（SSE-S3）设置。因此，如果安全配置和 SSE-S3 参数都与作业关联，则忽略 SSE-S3 参数。

有关安全配置的更多信息，请参阅 [在 AWS Glue 控制台上管理安全配置](console-security-configurations.md)。

**Topics**
+ [

## 将 AWS Glue 设置为使用安全配置
](#encryption-setup-Glue)
+ [

## 为 VPC 作业和爬网程序创建到 AWS KMS 的路由
](#encryption-kms-vpc-endpoint)
+ [

# 在 AWS Glue 控制台上管理安全配置
](console-security-configurations.md)

## 将 AWS Glue 设置为使用安全配置
<a name="encryption-setup-Glue"></a>

请按照以下步骤设置您的 AWS Glue 环境以使用安全配置。

1. 创建或更新您的 AWS Key Management Service（AWS KMS）密钥，向传递到 AWS Glue 爬网程序和任务的 IAM 角色授予 AWS KMS 权限以加密 CloudWatch Logs。有关更多信息，请参阅 *Amazon CloudWatch Logs 用户指南*中的[使用 AWS KMS 更改 CloudWatch Logs 中的日志数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html)。

   在下面的示例中，*"role1"*、*"role2"* 和 *"role3"* 是传递到爬网程序和任务的 IAM 角色。

   ```
   {
          "Effect": "Allow",
          "Principal": { "Service": "logs.region.amazonaws.com",
          "AWS": [
                   "role1",
                   "role2",
                   "role3"
                ] },
                       "Action": [
                              "kms:Encrypt*",
                              "kms:Decrypt*",
                              "kms:ReEncrypt*",
                              "kms:GenerateDataKey*",
                              "kms:Describe*"
                       ],
                       "Resource": "*"
   }
   ```

   如果您使用此密钥加密 CloudWatch Logs，则需要 `Service` 语句（显示为 `"Service": "logs.region.amazonaws.com"`）。

1. 确保 AWS KMS 密钥为 `ENABLED`，然后才可使用。

**注意**  
如果您使用 Iceberg 作为数据湖框架，则 Iceberg 表有自己的机制来启用服务器端加密。除了 AWS Glue 的安全配置外，您还应该启用这些配置。要在 Iceberg 表上启用服务器端加密，请查看 [Iceberg 文档](https://iceberg.apache.org/docs/latest/aws/#s3-server-side-encryption)中的指南。

## 为 VPC 作业和爬网程序创建到 AWS KMS 的路由
<a name="encryption-kms-vpc-endpoint"></a>

您可以通过 Virtual Private Cloud (VPC) 中的私有端点直接连接到 AWS KMS，而不是通过互联网连接。当您使用 VPC 端点时，您的 VPC 和 AWS KMS 之间的通信完全在 AWS 网络内进行。

您可以在 VPC 中创建 AWS KMS VPC 端点。如果没有此步骤，您的任务或爬网程序可能会失败，任务上具有 `kms timeout` 或爬网程序上具有 `internal service exception`。有关详细说明，请参阅 *AWS Key Management Service 开发人员指南*中的[通过 VPC 终端节点连接到 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/kms-vpc-endpoint.html)。

当您按照以下说明操作时，在 [VPC 控制台](https://console.aws.amazon.com//vpc)上，您必须执行以下操作：
+ 选择 **Enable Private DNS name (启用私有 DNS 名称)**。
+ 选择 **Security group (安全组)**（带自引用规则），此安全组将用于访问 Java 数据库连接 (JDBC) 的任务或爬网程序。有关 AWS Glue 连接的更多信息，请参阅 [连接到数据](glue-connections.md)。

当您将安全配置添加到访问 JDBC 数据存储的爬网程序或任务时，AWS Glue 必须具有到 AWS KMS 终端节点的路由。您可以使用网络地址转换 (NAT) 网关或 AWS KMS VPC 端点提供路由。要创建 NAT 网关，请参阅 *Amazon VPC 用户指南*中的 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。

# 在 AWS Glue 控制台上管理安全配置
<a name="console-security-configurations"></a>

**警告**  
Ray 作业目前不支持 AWS Glue 安全配置。

AWS Glue 中的*安全配置*包含当您写入加密数据时所需的属性。您在 AWS Glue 控制台上创建安全配置，以提供由爬网程序、作业和开发终端节点使用的加密属性。

要查看您创建的所有安全配置的列表，请点击 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 打开 AWS Glue 控制台，然后在导航窗格中选择 **Security configurations (安全配置)**。

**Security configurations (安全配置)** 列表显示有关每个配置的以下属性：

**名称**  
在创建配置时提供的唯一名称。名称可以包含字母（A-Z）、数字（0-9）、连字符（-）、或下划线（\$1），且长度最多为 255 个字符。

**启用 Amazon S3 加密**  
如果开启，对于数据目录中的元数据存储会启用 Amazon Simple Storage Service（Amazon S3）加密模式（如 `SSE-KMS` 或 `SSE-S3`）。

**启用 Amazon CloudWatch Logs 加密**  
如果启用，在向 Amazon CloudWatch 写入日志时会使用 Amazon S3 加密模式（如 `SSE-KMS`）。

**高级设置：启用作业书签加密**  
如果启用，在将作业添加到书签时会使用 Amazon S3 加密模式（如 `CSE-KMS`）。

您可以在控制台上的 **Security configurations (安全配置)** 部分中添加或删除配置。要查看配置的详细信息，请在列表中选择配置名称。详细信息包括您在创建配置时定义的信息。

## 添加安全配置
<a name="console-security-configurations-wizard"></a>

 要使用 AWS Glue 控制台添加安全配置，请在 **Security configurations (安全配置)** 页面上选择 **Add security configuration (添加安全配置)**。

![\[屏幕截图显示添加安全配置页面。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/add_security_configuration.png)


 **安全配置属性** 

 输入唯一的安全配置名称。名称可以包含字母（A-Z）、数字（0-9）、连字符（-）、或下划线（\$1），且长度最多为 255 个字符。

 **加密设置** 

您可以对存储在 Amazon S3 的 Data Catalog 和 Amazon CloudWatch 的日志中的元数据启用静态加密。要在 AWS Glue 控制台上使用 AWS Key Management Service (AWS KMS) 密钥对数据和元数据加密，请向控制台用户添加一个策略。此策略必须将允许的资源指定为用于对 Amazon S3 数据存储进行加密的密钥 Amazon Resource Names（ARN），如以下示例所示。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:GenerateDataKey",
      "kms:Decrypt",
      "kms:Encrypt"
    ],
    "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id"
  }
}
```

------

**重要**  
当安全配置附加到爬网程序或任务时，传递的 IAM 角色必须具有 AWS KMS 权限。有关更多信息，请参阅 [加密 AWS Glue 写入的数据](encryption-security-configuration.md)。

在定义配置时，您可以为以下属性提供值：

**启用 S3 加密**  
当您写入 Amazon S3 数据时，您可以将服务器端加密与 Amazon S3 托管密钥（SSE-S3）结合使用，也可以将服务器端加密（SSE-KMS）与 AWS KMS 托管密钥结合使用。该字段是可选的。要允许访问 Amazon S3，请选择 AWS KMS 密钥，或选择 **Enter a key ARN (输入密钥 ARN)** 并提供密钥的 ARN。输入 `arn:aws:kms:region:account-id:key/key-id` 格式的 ARN。您也可以提供密钥别名形式的 ARN，例如 `arn:aws:kms:region:account-id:alias/alias-name`。  
如果您为作业启用 Spark 用户界面，则上传到 Amazon S3 的 Spark 用户界面日志文件将采用相同的加密方式。  
AWS Glue 只支持对称客户主密钥（CMK）。**AWS KMS key (Amazon KMS 密钥)** 列表仅显示对称密钥。但是，如果选择 **Choose a AWS KMS key ARN (选择 Amazon KMS 密钥 ARN)**，控制台允许您为任何密钥类型输入 ARN。确保仅为对称密钥输入 ARN。

**启用 CloudWatch 日志加密**  
服务器端加密（SSE-KMS）用于加密 CloudWatch Logs。该字段是可选的。要启用它，请选择 AWS KMS 密钥，或选择 **Enter a key ARN (输入密钥 ARN)** 并提供密钥的 ARN。输入 `arn:aws:kms:region:account-id:key/key-id` 格式的 ARN。您也可以提供密钥别名形式的 ARN，例如 `arn:aws:kms:region:account-id:alias/alias-name`。

**高级设置：作业书签加密**  
客户端 (CSE-KMS) 加密用于加密作业书签。该字段是可选的。书签数据先进行加密，然后再发送到 Amazon S3 进行存储。要启用它，请选择 AWS KMS 密钥，或选择 **Enter a key ARN (输入密钥 ARN)** 并提供密钥的 ARN。输入 `arn:aws:kms:region:account-id:key/key-id` 格式的 ARN。您也可以提供密钥别名形式的 ARN，例如 `arn:aws:kms:region:account-id:alias/alias-name`。

有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的以下主题：
+ 有关 `SSE-S3` 的更多信息，请参阅[使用具有 Amazon S3 托管加密密钥 (SSE-S3) 的服务器端加密 (SSE-S3) 保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。
+ 有关 `SSE-KMS` 的更多信息，请参阅 [Protecting Data Using Server-Side Encryption with AWS KMS keys](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。
+ 有关 `CSE-KMS` 的信息，请参阅 [Using a KMS key stored in AWS KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html#client-side-encryption-kms-managed-master-key-intro)。

# 加密传输中数据
<a name="encryption-in-transit"></a>



AWS 为传输中数据提供传输层安全性 (TLS) 加密。您可以使用 AWS Glue 中的[安全配置](https://docs.aws.amazon.com/glue/latest/dg/console-security-configurations.html)为爬网程序、ETL 任务和开发端点配置加密设置。您可以通过数据目录的设置启用 AWS Glue Data Catalog 加密。

截至 2018 年 9 月 4 日，支持用于 AWS Glue ETL 和 AWS Glue Data Catalog 的 AWS KMS（*自带密钥*和*服务器端加密*）。

# FIPS 合规性
<a name="fips-compliance"></a>

如果在通过命令行界面或 API 访问 AWS 时需要经过 FIPS 140-2 验证的加密模块，请使用 FIPS 端点。有关可用的 FIPS 端点的更多信息，请参阅[《美国联邦信息处理标准（FIPS）第 140-2 版》](https://aws.amazon.com/compliance/fips/)。

# 密钥管理
<a name="key-management"></a>

您可以使用具有 AWS Glue 的 AWS Identity and Access Management（IAM）来定义用户、AWS 资源、组、角色和有关访问、拒绝等的精细策略。

您可以根据组织的需要，同时使用基于资源和基于身份的策略来定义对元数据的访问。基于资源的策略列出了允许或拒绝访问您的资源的委托人，允许您设置跨账户访问等策略。身份策略专门附加到 IAM 中的用户、组和角色。

有关分步示例，请参阅 AWS 大数据博客中的 [Restrict access to your AWS Glue Data Catalog with resource-level IAM permissions and resource-based policies](https://aws.amazon.com/blogs/big-data/restrict-access-to-your-aws-glue-data-catalog-with-resource-level-iam-permissions-and-resource-based-policies/)。

策略的精细访问部分在 `Resource` 条款中进行了定义。此部分定义了可执行此操作的 AWS Glue Data Catalog 对象，以及该操作将返回哪些对象。

*开发终端节点* 是可用于开发和测试您的 AWS Glue 脚本的环境。您可以添加、删除或轮换开发终端节点的 SSH 密钥。

截至 2018 年 9 月 4 日，支持用于 AWS Glue ETL 和 AWS Glue Data Catalog 的 AWS KMS（*自带密钥*和*服务器端加密*）。

# AWS Glue 对其他 AWS 服务的依赖
<a name="dependency-on-other-services"></a>

某个用户要能够使用 AWS Glue 控制台，必须拥有一组允许其使用其 AWS 账户的 AWS Glue 资源的最低权限。除这些 AWS Glue 权限以外，控制台还需要来自以下服务的权限：
+ 用于显示日志的 Amazon CloudWatch Logs 权限。
+ 用于列出并传递角色的 AWS Identity and Access Management（IAM）权限。
+ 用于处理堆栈的 CloudFormation 权限。
+ 用于列出Virtual Private Cloud（VPC）、子网、安全组、实例和其他对象（用于在运行任务、爬虫程序和创建开发终端节点时设置 Amazon EC2 项目，如 VPC）的 Amazon Elastic Compute Cloud（Amazon EC2）权限。
+ 用于列出存储桶和对象以及检索和保存脚本的 Amazon Simple Storage Service（Amazon S3）权限。
+ 用于使用集群的 Amazon Redshift 权限。
+ 用于列出实例的 Amazon Relational Database Service（Amazon RDS）权限。

# 开发终端节点
<a name="dev-endpoints"></a>

开发终端节点是可用于开发和测试您的 AWS Glue 脚本的环境。您可以使用 AWS Glue 创建、编辑和删除开发终端节点。您可以列出所有已创建的开发端点。您可以添加、删除或轮换开发终端节点的 SSH 密钥。您还可以创建使用开发终端节点的笔记本。

您提供配置值以预置开发环境。这些值告知 AWS Glue 如何设置网络，以便您可以安全地访问开发终端节点，并且您的端点可以访问您的数据存储。然后，您可以创建连接到开发终端节点的笔记本。您可以使用笔记本编写和测试 ETL 脚本。

选择一个 AWS Identity and Access Management（IAM）角色，该角色与您用于运行 AWS Glue ETL 任务的 IAM 角色具有相似的权限。使用 Virtual Private Cloud（VPC）、子网和安全组创建可以安全地连接到您的数据资源的开发终端节点。您可以生成一个 SSH 密钥对，以使用 SSH 连接到开发环境。

您可以使用 JDBC 在用于访问数据集的 VPC 中为 Amazon S3 数据创建开发终端节点。

您可以在本地计算机上安装 Jupyter notebook，并使用它在开发端点上调试和测试 ETL 脚本。或者，您可以使用 Sagemaker 笔记本在 AWS 上的 JupyterLab 中编写 ETL 脚本。请参阅[将 SageMaker 笔记本与您的开发端点结合使用](https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint-tutorial-sage.html)。

AWS Glue 使用前缀为 `aws-glue-dev-endpoint` 的名称标记 Amazon EC2 实例。

您可以在开发端点上设置笔记本服务器，以运行具有 AWS Glue 扩展的 PySpark。