Amazon EMR
管理指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

创建安全配置

使用控制台创建安全配置

  1. Sign in to the AWS Management Console and open the Amazon EMR console at https://console.amazonaws.cn/elasticmapreduce/.

  2. 在导航窗格中,选择 Security ConfigurationsCreate security configuration

  3. 键入安全配置的 Name

  4. 按照以下部分中所述选择 EncryptionAuthentication 的选项,然后选择 Create

使用 AWS CLI 创建安全配置

  1. 按照以下语法使用 create-security-configuration 命令:

    aws emr create-security-configuration --name "SecConfigName" --security-configuration SecConfigDef

    对于 SecConfigName,指定安全配置的名称。这是您在创建使用此安全配置的群集时指定的名称。

  2. 对于 SecConfigDef,指定内联 JSON 结构或 Amazon S3 中的 JSON 文件的路径 (如 s3://mybucket/MySecConfig.json) 或本地文件 (如 file://MySecConfig.json)。JSON 参数定义 EncryptionAuthentication 的选项,如以下部分中所述。

配置数据加密

在配置安全配置中的加密之前,创建用于加密的密钥和证书。有关更多信息,请参阅 通过 Amazon EMR 提供静态数据加密密钥

在创建安全配置时,需要指定两组加密选项:静态数据加密和传输中数据加密。静态数据加密选项包括带有 EMRFS 的 Amazon S3 和本地磁盘加密。传输中加密选项为支持传输层安全性 (TLS) 的某些应用程序启用开源加密功能。静态选项和传输中选项可以同时启用或分别启用。有关更多信息,请参阅 加密传输中的数据和静态数据

使用控制台指定加密选项

根据以下准则选择 Encryption 下的选项。

  • 选择 At rest encryption 以加密存储在文件系统中的数据。这样做还将支持 Hadoop 分布式文件系统 (HDFS) 块传输加密和 RPC 加密,无需其他配置。

  • S3 data encryption 下,为 Encryption mode 选择一个值以确定 Amazon EMR 如何使用 EMRFS 加密 Amazon S3 数据。

    下一步取决于所选的加密模式:

  • Local disk encryption 下,为 Key provider type 选择一个值。Amazon EMR 会将此密钥用于挂载到您的集群节点的本地卷 (启动卷除外) 的 Linux Unified Key System (LUKS) 加密。

    • AWS KMS

      选择此选项可指定 AWS KMS 客户主密钥 (CMK)。对于 AWS KMS Key,选择一个密钥。该密钥必须与您的 Amazon EMR 集群同在一个区域中。有关密钥要求的更多信息,请参阅使用 AWS KMS 客户主密钥 (CMK) 进行加密

    • 自定义

      选择此选项可指定自定义密钥提供商。对于 S3 object,输入您的自定义密钥提供商 JAR 文件在 Amazon S3 中的位置或 Amazon S3 ARN。对于 Key provider class,输入在实现 EncryptionMaterialsProvider 接口的应用程序中声明的类的完整类名。这里提供的类名必需与为 CSE-Custom 提供的类名不同。

  • 选择 In-transit encryption 为传输中的数据启用开源 TLS 加密功能。根据以下指南选择 Certificate provider type

    • PEM

      选择此选项将使用您在 zip 文件中提供的 PEM 文件。zip 文件中需要有两个项目:privateKey.pem 和 certificateChain.pem。第三个文件 trustedCertificates.pem 是可选文件。有关更多信息,请参阅 。对于 S3 object,指定 zip 文件字段在 Amazon S3 中的位置或 Amazon S3 ARN。

    • 自定义

      选择此选项可指定一个自定义证书提供商,然后在 S3 object 中输入您的自定义证书提供商 JAR 文件在 Amazon S3 中的位置或 Amazon S3 ARN。对于 Key provider class,输入在实现 TLSArtifactsProvider 接口的应用程序中声明的类的完整类名。

使用 AWS CLI 指定加密选项

以下部分使用示例方案针对不同配置和密钥提供商以及 JSON 参数和相应值的引用演示格式正确的 --security-configuration JSON。

传输中数据加密选项示例

下面的示例将说明以下情景:

  • 传输中的数据加密已启用,静态数据加密已禁用。

  • Amazon S3 中一个包含证书的 zip 文件用作密钥提供商 (请参阅了解证书要求)。

aws emr create-security-configuration --name "MySecConfig" --security-configuration '{ "EncryptionConfiguration": { "EnableInTransitEncryption" : true, "EnableAtRestEncryption" : false, "InTransitEncryptionConfiguration" : { "TLSCertificateConfiguration" : { "CertificateProviderType" : "PEM", "S3Object" : "s3://MyConfigStore/artifacts/MyCerts.zip" } } } }'

下面的示例将说明以下情景:

  • 传输中的数据加密已启用,静态数据加密已禁用。

  • 使用了自定义密钥提供商 (请参阅了解证书要求)。

aws emr create-security-configuration --name "MySecConfig" --security-configuration '{ "EncryptionConfiguration": { "EnableInTransitEncryption" : true, "EnableAtRestEncryption" : false, "InTransitEncryptionConfiguration" : { "TLSCertificateConfiguration" : { "CertificateProviderType" : "Custom", "S3Object" : "s3://MyConfig/artifacts/MyCerts.jar", "CertificateProviderClass" : "com.mycompany.MyCertProvider" } } } }'

静态数据加密选项示例

下面的示例将说明以下情景:

  • 传输中的数据加密已禁用,静态数据加密已启用

  • SSE-S3 已用于 Amazon S3 加密

  • 本地磁盘加密使用 AWS KMS 作为密钥提供商

aws emr create-security-configuration --name "MySecConfig" --security-configuration '{ "EncryptionConfiguration": { "EnableInTransitEncryption" : false, "EnableAtRestEncryption" : true, "AtRestEncryptionConfiguration" : { "S3EncryptionConfiguration" : { "EncryptionMode" : "SSE-S3" }, "LocalDiskEncryptionConfiguration" : { "EncryptionKeyProviderType" : "AwsKms", "AwsKmsKey" : "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012" } } } }'

下面的示例将说明以下情景:

  • 传输中的数据加密已启用且使用 ARN 引用了 Amazon S3 中包含 PEM 证书的 ZIP 文件

  • SSE-KMS 已用于 Amazon S3 加密

  • 本地磁盘加密使用 AWS KMS 作为密钥提供商

aws emr create-security-configuration --name "MySecConfig" --security-configuration '{ "EncryptionConfiguration": { "EnableInTransitEncryption" : true, "EnableAtRestEncryption" : true, "InTransitEncryptionConfiguration" : { "TLSCertificateConfiguration" : { "CertificateProviderType" : "PEM", "S3Object" : "arn:aws:s3:::MyConfigStore/artifacts/MyCerts.zip" } }, "AtRestEncryptionConfiguration" : { "S3EncryptionConfiguration" : { "EncryptionMode" : "SSE-KMS", "AwsKmsKey" : "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012" }, "LocalDiskEncryptionConfiguration" : { "EncryptionKeyProviderType" : "AwsKms", "AwsKmsKey" : "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012" } } } }'

下面的示例将说明以下情景:

  • 传输中的数据加密已禁用且引用了 Amazon S3 中包含 PEM 证书的 ZIP 文件

  • CSE-KMS 已用于 Amazon S3 加密

  • 本地磁盘加密使用了某个 ARN 引用的自定义密钥提供商

aws emr create-security-configuration --name "MySecConfig" --security-configuration '{ "EncryptionConfiguration": { "EnableInTransitEncryption" : true, "EnableAtRestEncryption" : true, "InTransitEncryptionConfiguration" : { "TLSCertificateConfiguration" : { "CertificateProviderType" : "PEM", "S3Object" : "s3://MyConfigStore/artifacts/MyCerts.zip" } }, "AtRestEncryptionConfiguration" : { "S3EncryptionConfiguration" : { "EncryptionMode" : "CSE-KMS", "AwsKmsKey" : "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012" }, "LocalDiskEncryptionConfiguration" : { "EncryptionKeyProviderType" : "Custom", "S3Object" : "arn:aws:s3:::artifacts/MyKeyProvider.jar", "EncryptionKeyProviderClass" : "com.mycompany.MyKeyProvider.jar" } } } }'

下面的示例将说明以下情景:

  • 利用自定义密钥提供商启用了传输中的数据加密

  • CSE-Custom 已用于 Amazon S3 数据

  • 本地磁盘加密使用了自定义密钥提供商

aws emr create-security-configuration --name "MySecConfig" --security-configuration '{ "EncryptionConfiguration": { "EnableInTransitEncryption" : "true", "EnableAtRestEncryption" : "true", "InTransitEncryptionConfiguration" : { "TLSCertificateConfiguration" : { "CertificateProviderType" : "Custom", "S3Object" : "s3://MyConfig/artifacts/MyCerts.jar", "CertificateProviderClass" : "com.mycompany.MyCertProvider" } }, "AtRestEncryptionConfiguration" : { "S3EncryptionConfiguration" : { "EncryptionMode" : "CSE-Custom", "S3Object" : "s3://MyConfig/artifacts/MyCerts.jar", "EncryptionKeyProviderClass" : "com.mycompany.MyKeyProvider" }, "LocalDiskEncryptionConfiguration" : { "EncryptionKeyProviderType" : "Custom", "S3Object" : "s3://MyConfig/artifacts/MyCerts.jar", "EncryptionKeyProviderClass" : "com.mycompany.MyKeyProvider" } } } }'

加密设置的 JSON 引用

下表列出了用于加密设置的 JSON 参数并提供了每个参数的可接受值描述。

参数 说明
"EnableInTransitEncryption" : true | false 指定 true 可启用传输中加密,指定 false 则禁用。如果省略,则假定是 false,传输中加密禁用。
"EnableAtRestEncryption" : true | false 指定 true 可启用静态加密,指定 false 则禁用。如果省略,则假定是 false,静态加密禁用。
传输中加密参数
"InTransitEncryptionConfiguration" : 指定当 EnableInTransitEncryptiontrue 时用于配置传输中加密的值的集合。
"CertificateProviderType" : "PEM" | "Custom" 指定是使用通过压缩文件引用的 PEM 证书还是使用 Custom 证书提供商。如果指定 PEM,则 S3Object 必须是对包含证书的 zip 文件在 Amazon S3 中的位置的引用。如果指定“Custom”,则 S3Object 必须是对 JAR 文件在 Amazon S3 中的位置的引用,后跟一个 CertificateProviderClass 条目。
"S3Object" : "ZipLocation" | "JarLocation" 如果指定 PEM,则提供 zip 文件在 Amazon S3 中的位置,如果指定 Custom,则提供 JAR 文件的位置。格式可以是路径 (例如,s3://MyConfig/articfacts/CertFiles.zip) 或 ARN (例如,arn:aws:s3:::Code/MyCertProvider.jar)。如果指定 zip 文件,则其中必须包含名为 privateKey.pemcertificateChain.pem 的文件。名为 trustedCertificates.pem 的文件是可选的。
"CertificateProviderClass" : "MyClassID" 仅当为 CertificateProviderType 指定了 Custom 时才是必需的。MyClassID 指定在实现 TLSArtifactsProvider 接口的 JAR 文件中声明的完整类名。例如:com.mycompany.MyCertProvider
静态加密参数
"AtRestEncryptionConfiguration" : 指定当 EnableAtRestEncryptiontrue 时用于配置静态加密 (包括 Amazon S3 加密和本地磁盘加密) 的值的集合。
Amazon S3 加密参数
"S3EncryptionConfiguration" : 指定用于 EMR 文件系统 (EMRFS) Amazon S3 加密的值的集合。
"EncryptionMode" : "SSE-S3" | "SSE-KMS" | "CSE-KMS" | "CSE-Custom" 指定要使用的 Amazon S3 加密类型。如果指定 SSE-S3,则无需再提供 Amazon S3 加密值。如果指定 SSE-KMSCSE-KMS ,则必需指定 AWS KMS 客户主密钥 (CMK) ARN 作为 AwsKmsKey 值。如果指定 CSE-Custom,则必需指定 S3ObjectEncryptionKeyProviderClass 值。
"AwsKmsKey" : "MyKeyARN" 仅当为 EncryptionMode 指定 SSE-KMSCSE-KMS 时才是必需的。MyKeyARN 必须是密钥的完全指定 ARN (例如,arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012)。
"S3Object" : "JarLocation" 仅当为 CertificateProviderType 指定 CSE-Custom 时才是必需的。JarLocation 提供 JAR 文件在 Amazon S3 中的位置。格式可以是路径 (例如,s3://MyConfig/articfacts/MyKeyProvider.jar) 或 ARN (例如,arn:aws:s3:::Code/MyKeyProvider.jar)
"EncryptionKeyProviderClass" : "MyS3KeyClassID" 仅当为 EncryptionMode 指定 CSE-Custom 时才是必需的。MyS3KeyClassID 指定在实现 EncryptionMaterialsProvider 接口的应用程序中声明的类的完整类名,例如,com.mycompany.MyS3KeyProvider
本地磁盘加密参数
"LocalDiskEncryptionKeyProvider" 指定要用于本地磁盘加密的密钥提供商和相应的值。
"Type" : "AwsKms" | "Custom" 指定密钥提供商。如果指定 AwsKms,则必须指定 AWS KMS CMK ARN 作为 AwsKmsKey 值。如果指定 Custom,则必须指定 S3ObjectEncryptionKeyProviderClass 值。
"AwsKmsKey : "MyKeyARN" 仅当为 Type 指定 AwsKms 时才是必需的。MyKeyARN 必须是密钥的完全指定 ARN (例如, arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-456789012123)。
"S3Object" : "JarLocation" 仅当为 CertificateProviderType 指定 CSE-Custom 时才是必需的。JarLocation 提供 JAR 文件在 Amazon S3 中的位置。格式可以是路径 (例如,s3://MyConfig/articfacts/MyKeyProvider.jar) 或 ARN (例如,arn:aws:s3:::Code/MyKeyProvider.jar)

"EncryptionKeyProviderClass" : "MyLocalDiskKeyClassID"

仅当为 Type 指定 Custom 时才是必需的。MyLocalDiskKeyClassID 指定在实现 EncryptionMaterialsProvider 接口的应用程序中声明的类的完整类名,例如,com.mycompany.MyLocalDiskKeyProvider

配置 Kerberos 身份验证

包含 Kerberos 设置的安全配置只能由使用 Kerberos 属性创建的群集使用,否则会发生错误。有关更多信息,请参阅 配置 Kerberos。仅在 Amazon EMR 发行版 5.10.0 及更高版本中提供了 Kerberos。

使用控制台指定 Kerberos 设置

根据以下准则选择 Kerberos authentication 下的选项。

参数 说明

启用 Kerberos

指定对使用此安全配置的群集启用 Kerberos。如果群集使用此安全配置,则群集还必须指定 Kerberos 设置,否则会发生错误。

票证使用期限

由集群专用的 KDC 颁发的 Kerberos 票证有效的期间。出于安全考虑,限制票证生命周期。集群应用程序和服务在过期后自动续订票证。使用 Kerberos 凭证通过 SSH 连接到集群的用户在票证过期后需要从主节点命令行运行 kinit 来续订。

跨领域信任

如果您提供了跨领域信任配置,则来自另一个领域的委托人 (通常是用户) 将对使用此配置的群集进行身份验证。还需要其他 Kerberos 领域中的其他配置。有关更多信息,请参阅 配置跨领域信任

管理服务器

信任关系中的其他 Kerberos 管理服务器的完全限定域名 (FQDN)。管理服务器和 KDC 通常运行在相同的服务器上。(可选) 您可以指定用于与 Kerberos 管理服务器通信的端口。如果未指定,则使用端口 749,这是 Kerberos 默认值。

KDC 服务器

信任关系的其他领域中的 KDC 的完全限定域名 (FQDN)。(可选) 您可以指定用于与 KDC 服务器通信的端口。如果未指定,则使用端口 88,这是 Kerberos 默认值。

域名

信任关系中其他领域的域名。

Kerberos 设置的 JSON 引用

以下示例演示了 Kerberos 配置的 JSON 参数以及参数和值的引用。

{ "AuthenticationConfiguration": { "KerberosConfiguration": { "Provider": "ClusterDedicatedKdc", "TicketLifeTimeInHours": number, "ClusterDedicatedKdcConfiguration": { "CrossRealmTrustConfiguration": { "TrustingAdminServer": "domain.example.com", "TrustingDomainName": "domain.example.com", "TrustingKdcServer": "domain.example.com" } } } } }
参数 说明
"AuthenticationConfiguration" : 必需。包含 Kerberos 配置参数。
"KerberosConfiguration" : 必需。包含 Kerberos 配置参数。
"Provider": "ClusterDedicatedKdc" 必需。指定在主节点上创建群集专用的 KDC。
"TicketLifeTimeInHours": number 可选。指定由群集专用的 KDC 颁发的 Kerberos 票证有效的期间。出于安全考虑,限制票证生命周期。集群应用程序和服务在过期后自动续订票证。使用 Kerberos 凭证通过 SSH 连接到集群的用户在票证过期后需要从主节点命令行运行 kinit 来续订。如果省略,默认为 24。
"CrossRealmTrustConfiguration": 可选。包含定义跨领域信任配置的参数。
"TrustingAdminServer": "domain.example.com" 指定信任关系中的其他 Kerberos 管理服务器的完全限定域名 (FQDN)。管理服务器和 KDC 通常运行在相同的服务器上。(可选) 您可以指定用于与 Kerberos 管理服务器通信的端口 (例如,domain.example.com:749)。如果未指定,则使用端口 749,这是 Kerberos 默认值。
"TrustingDomainName": "domain.example.com"

指定信任关系中其他领域的域名。

"TrustingKdcServer": "domain.example.com" 指定信任关系的其他领域中的 KDC 的完全限定域名 (FQDN)。(可选) 您可以指定用于与 KDC 服务器通信的端口 (例如,domain.example.com:88)。如果未指定,则使用端口 88,这是 Kerberos 默认值。

配置 EMRFS 的 S3 授权

利用 EMRFS S3 授权,您可以为用户提供动态凭证以访问 Amazon S3 中的 EMRFS 数据。您可创建角色映射,指定在访问请求包含您指定的标识符时代入的 IAM 角色。标识符可以是 Hadoop 用户或角色,或 Amazon S3 前缀。有关更多信息,请参阅 Amazon S3 中的数据的 EMRFS 授权

下面是安全配置中 EMRFS 授权的 JSON 代码段示例。它演示三个不同标识符类型的角色映射,后跟参数引用。

{ "AuthorizationConfiguration": { "EmrfsConfiguration": { "RoleMappings": [{ "Role": "arn:aws:iam::123456789101:role/allow_user1_S3Access", "IdentifierType": "User", "Identifiers": [ "user1" ] },{ "Role": "arn:aws:iam::123456789101:role/allow_EMRFS_access_to_MyBuckets", "IdentifierType": "Prefix", "Identifiers": [ "s3://MyBucket/","s3://MyOtherBucket/" ] },{ "Role": "arn:aws:iam::123456789101:role/allow_AdminGroup_S3Access", "IdentifierType": "Group", "Identifiers": [ "AdminGroup" ] }] } } }
参数 说明

"AuthorizationConfiguration":

对于 EMRFS 授权为必需。包含授权配置。

"EmrfsConfiguration":

对于 EMRFS 授权为必需。包含 EMRFS 授权配置。

"RoleMappings":

对于 EMRFS 授权为必需。包含一个或多个角色映射定义。角色映射按其出现的顺序进行计算,如果角色映射计算对 Amazon S3 的 EMRFS 调用的结果为 true,则不计算其他角色映射。角色映射包括以下必需参数:

"Role":

arn:aws:iam::account-id:role/role-name 格式指定 IAM 角色的 ARN 标识符。这是在对 Amazon S3 的 EMRFS 请求与任何指定的 Identifiers 匹配时 Amazon EMR 会采用的 IAM 角色。

"IdentifierType":

可以是以下值之一:

  • "User" 指定标识符是一个或多个可以是 Linux 账户用户或 Kerberos 委托人的 Hadoop 用户。当 EMRFS 请求源自指定的一个或多个用户时,将会采用 IAM 角色。

  • "Prefix" 指定标识符是 Amazon S3 位置。对于对具有指定前缀的一个或多个位置的调用,将会采用 IAM 角色。例如,前缀 s3://mybucket/ s3://mybucket/mydir s3://mybucket/yetanotherdir 匹配。

  • "Group" 指定标识符是一个或多个 Hadoop 组。如果请求源自一个或多个指定组中的用户,将会采用 IAM 角色。

"Identifiers"

指定相应标识符类型的标识符。用逗号分隔多个标识符,不带空格。