Contrôles Amazon Elastic Map Reduce (Amazon EMR) - AWS Control Tower

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Contrôles Amazon Elastic Map Reduce (Amazon EMR)

[CT.EMR.PR.1] Exiger qu'une configuration de sécurité Amazon Elastic ( MapReduce EMR) soit configurée pour chiffrer les données au repos dans Amazon S3

Ce contrôle vérifie si une configuration de sécurité Amazon EMR est configurée pour chiffrer les objets du système de fichiers EMR (EMRFS) au repos dans Amazon S3.

  • Objectif de contrôle : crypter les données au repos

  • Mise en œuvre : règle de AWS CloudFormation garde

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::EMR::SecurityConfiguration

  • AWS CloudFormationrègle de garde : Spécification de la règle CT.EMR.PR.1

Détails et exemples

Explication

Le chiffrement Amazon S3 fonctionne avec les objets du système de fichiers EMR (EMRFS) qui sont lus et écrits sur Amazon S3. Lorsque vous activez le chiffrement au repos, vous spécifiez le chiffrement côté serveur (SSE) ou le chiffrement côté client (CSE) Amazon S3 comme mode de chiffrement par défaut. Vous pouvez éventuellement spécifier différentes méthodes de chiffrement pour des compartiments individuels en utilisant des remplacements de chiffrement par compartiment.

Remédiation en cas de défaillance des règles

Dans le EncryptionConfiguration paramètre, définissez la valeur EnableAtRestEncryption de true et fournissez une AtRestEncryptionConfiguration configuration.

Les exemples suivants montrent comment implémenter cette correction.

Configuration de sécurité Amazon EMR - Exemple

Configuration de sécurité Amazon EMR configurée pour chiffrer les objets du système de fichiers EMR (EMRFS) au repos dans Amazon S3. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "SecurityConfiguration": { "Type": "AWS::EMR::SecurityConfiguration", "Properties": { "SecurityConfiguration": { "EncryptionConfiguration": { "EnableInTransitEncryption": false, "EnableAtRestEncryption": true, "AtRestEncryptionConfiguration": { "S3EncryptionConfiguration": { "EncryptionMode": "SSE-S3" } } } } } } }

Exemple YAML

SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableInTransitEncryption: false EnableAtRestEncryption: true AtRestEncryptionConfiguration: S3EncryptionConfiguration: EncryptionMode: SSE-S3

Spécification de la règle CT.EMR.PR.1

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # emr_sec_config_encryption_at_rest_s3_check # # Description: # This control checks whether an Amazon EMR security configuration is configured to encrypt EMR File System (EMRFS) objects at rest in Amazon S3. # # Reports on: # AWS::EMR::SecurityConfiguration # # Evaluates: # AWS CloudFormation, AWS CloudFormation hook # # Rule Parameters: # None # # Scenarios: # Scenario: 1` # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contain any EMR security configuration resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has not been provided # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has not been provided # or has been provided and set to a value other than bool(true) # Then: FAIL # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'AtRestEncryptionConfiguration' has not been provided # Then: FAIL # Scenario: 5 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'AtRestEncryptionConfiguration' has been provided as a struct # And: 'EncryptionMode' in 'AtRestEncryptionConfiguration.S3EncryptionConfiguration' # has not been provided or has been provided as an empty string # Then: FAIL # Scenario: 6 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'AtRestEncryptionConfiguration' has been provided as a struct # And: 'EncryptionMode' in 'AtRestEncryptionConfiguration.S3EncryptionConfiguration' # has been provided as a non-empty string # Then: PASS # # Constants # let EMR_SECURITY_CONFIGURATION_TYPE = "AWS::EMR::SecurityConfiguration" let INPUT_DOCUMENT = this # # Assignments # let emr_security_configurations = Resources.*[ Type == %EMR_SECURITY_CONFIGURATION_TYPE ] # # Primary Rules # rule emr_sec_config_encryption_at_rest_s3_check when is_cfn_template(%INPUT_DOCUMENT) %emr_security_configurations not empty { check(%emr_security_configurations.Properties) << [CT.EMR.PR.1]: Require that an Amazon Elastic MapReduce (EMR) security configuration is configured to encrypt data at rest in Amazon S3 [FIX]: In the 'EncryptionConfiguration' parameter, set the value of 'EnableAtRestEncryption' to true, and provide an 'AtRestEncryptionConfiguration' configuration. >> } rule emr_sec_config_encryption_at_rest_s3_check when is_cfn_hook(%INPUT_DOCUMENT, %EMR_SECURITY_CONFIGURATION_TYPE) { check(%INPUT_DOCUMENT.%EMR_SECURITY_CONFIGURATION_TYPE.resourceProperties) << [CT.EMR.PR.1]: Require that an Amazon Elastic MapReduce (EMR) security configuration is configured to encrypt data at rest in Amazon S3 [FIX]: In the 'EncryptionConfiguration' parameter, set the value of 'EnableAtRestEncryption' to true, and provide an 'AtRestEncryptionConfiguration' configuration. >> } # # Parameterized Rules # rule check(emr_security_configuration) { %emr_security_configuration { SecurityConfiguration exists SecurityConfiguration is_struct SecurityConfiguration { # Scenario 2 EncryptionConfiguration exists EncryptionConfiguration is_struct EncryptionConfiguration { # Scenario 3 EnableAtRestEncryption exists EnableAtRestEncryption == true # Scenario 4 AtRestEncryptionConfiguration exists AtRestEncryptionConfiguration is_struct # Scenarios 5 and 6 AtRestEncryptionConfiguration { S3EncryptionConfiguration exists S3EncryptionConfiguration is_struct S3EncryptionConfiguration { EncryptionMode exists check_is_string_and_not_empty(EncryptionMode) } } } } } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, RESOURCE_TYPE) { %doc.%RESOURCE_TYPE.resourceProperties exists } rule check_is_string_and_not_empty(value) { %value { this is_string this != /\A\s*\z/ } }

Exemples de modèles CT.EMR.PR.1

Vous pouvez consulter des exemples d'artefacts de test PASS et FAIL pour les contrôles proactifs de l'AWS Control Tower.

Exemple PASS - Utilisez ce modèle pour vérifier la conformité de la création d'une ressource.

Resources: SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableInTransitEncryption: false EnableAtRestEncryption: true AtRestEncryptionConfiguration: S3EncryptionConfiguration: EncryptionMode: SSE-S3

Exemple d'échec : utilisez ce modèle pour vérifier que le contrôle empêche la création de ressources non conformes.

Resources: SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableAtRestEncryption: false EnableInTransitEncryption: false

[CT.EMR.PR.2] Exiger qu'une configuration de sécurité Amazon Elastic ( MapReduce EMR) soit configurée pour chiffrer les données au repos dans Amazon S3 à l'aide d'une clé AWS KMS

Ce contrôle vérifie si une configuration de sécurité Amazon EMR est configurée pour chiffrer les objets du système de fichiers EMR (EMRFS) au repos dans Amazon S3 à l'aide d'une clé AWS KMS.

  • Objectif de contrôle : crypter les données au repos

  • Mise en œuvre : règle de AWS CloudFormation garde

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::EMR::SecurityConfiguration

  • AWS CloudFormationrègle de garde : Spécification de la règle CT.EMR.PR.2

Détails et exemples

Explication

Le chiffrement Amazon S3 fonctionne avec les objets du système de fichiers EMR (EMRFS) qui sont lus et écrits sur Amazon S3. Lorsque vous activez le chiffrement au repos, vous spécifiez le chiffrement côté serveur (SSE) ou le chiffrement côté client (CSE) Amazon S3 comme mode de chiffrement par défaut. Vous pouvez éventuellement spécifier différentes méthodes de chiffrement pour des compartiments individuels en utilisant des remplacements de chiffrement par compartiment.

Remédiation en cas de défaillance des règles

Dans le EncryptionConfiguration paramètre, définissez EnableAtRestEncryption sur true et fournissez une AtRestEncryptionConfiguration configuration, avec EncryptionMode set to SSE-KMS orCSE-KMS.

Les exemples suivants montrent comment implémenter cette correction.

Configuration de sécurité Amazon EMR - Exemple

Configuration de sécurité Amazon EMR configurée pour chiffrer les objets du système de fichiers EMR (EMRFS) au repos dans Amazon S3 avec AWS KMS. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "SecurityConfiguration": { "Type": "AWS::EMR::SecurityConfiguration", "Properties": { "SecurityConfiguration": { "EncryptionConfiguration": { "EnableInTransitEncryption": false, "EnableAtRestEncryption": true, "AtRestEncryptionConfiguration": { "S3EncryptionConfiguration": { "EncryptionMode": "SSE-KMS", "AwsKmsKey": { "Fn::GetAtt": [ "KmsKey", "Arn" ] } } } } } } } }

Exemple YAML

SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableInTransitEncryption: false EnableAtRestEncryption: true AtRestEncryptionConfiguration: S3EncryptionConfiguration: EncryptionMode: SSE-KMS AwsKmsKey: !GetAtt 'KmsKey.Arn'

Spécification de la règle CT.EMR.PR.2

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # emr_sec_config_encryption_at_rest_s3_kms_check # # Description: # This control checks whether an Amazon EMR security configuration is configured to encrypt EMR File System (EMRFS) objects at rest in Amazon S3 with an AWS KMS key. # # Reports on: # AWS::EMR::SecurityConfiguration # # Evaluates: # AWS CloudFormation, AWS CloudFormation hook # # Rule Parameters: # None # # Scenarios: # Scenario: 1 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contain any EMR security configuration resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' has not been provided # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has not been provided # or has been provided and set to a value other than bool(true) # Then: FAIL # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'AtRestEncryptionConfiguration' has not been provided # Then: FAIL # Scenario: 5 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'AtRestEncryptionConfiguration' has been provided as a struct # And: 'EncryptionMode' in 'AtRestEncryptionConfiguration.S3EncryptionConfiguration' # has not been provided or has been provided and set to a value other than # a KMS-based encryption mode ('SSE-KMS', 'CSE-KMS') # Then: FAIL # Scenario: 6 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'AtRestEncryptionConfiguration' has been provided as a struct # And: 'EncryptionMode' in 'AtRestEncryptionConfiguration.S3EncryptionConfiguration' # has been provided and set to a KMS-based encryption mode ('SSE-KMS', 'CSE-KMS') # And: 'Overrides' in 'AtRestEncryptionConfiguration.S3EncryptionConfiguration' has been # provided as a non-empty list where one or more entries does not contain 'EncryptionMode', # or contains 'EncryptionMode' set to a value other than a KMS-based encryption mode # ('SSE-KMS', 'CSE-KMS') # Then: FAIL # Scenario: 7 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'AtRestEncryptionConfiguration' has been provided as a struct # And: 'EncryptionMode' in 'AtRestEncryptionConfiguration.S3EncryptionConfiguration' # has been provided and set to a KMS-based encryption mode ('SSE-KMS', 'CSE-KMS') # And: 'Overrides' in 'AtRestEncryptionConfiguration.S3EncryptionConfiguration' has not # been provided, or has been provided as an empty list, or list where every entry # contains 'EncryptionMode' set to a KMS-based encryption mode ('SSE-KMS', 'CSE-KMS') # Then: PASS # # Constants # let EMR_SECURITY_CONFIGURATION_TYPE = "AWS::EMR::SecurityConfiguration" let S3_KMS_ENCRYPTION_MODES = [ "SSE-KMS", "CSE-KMS" ] let INPUT_DOCUMENT = this # # Assignments # let emr_security_configurations = Resources.*[ Type == %EMR_SECURITY_CONFIGURATION_TYPE ] # # Primary Rules # rule emr_sec_config_encryption_at_rest_s3_kms_check when is_cfn_template(%INPUT_DOCUMENT) %emr_security_configurations not empty { check(%emr_security_configurations.Properties) << [CT.EMR.PR.2]: Require that an Amazon Elastic MapReduce (EMR) security configuration is configured to encrypt data at rest in Amazon S3 with an AWS KMS key [FIX]: In the 'EncryptionConfiguration' parameter, set 'EnableAtRestEncryption' to true, and provide an 'AtRestEncryptionConfiguration' configuration, with 'EncryptionMode' set to 'SSE-KMS' or 'CSE-KMS'. >> } rule emr_sec_config_encryption_at_rest_s3_kms_check when is_cfn_hook(%INPUT_DOCUMENT, %EMR_SECURITY_CONFIGURATION_TYPE) { check(%INPUT_DOCUMENT.%EMR_SECURITY_CONFIGURATION_TYPE.resourceProperties) << [CT.EMR.PR.2]: Require that an Amazon Elastic MapReduce (EMR) security configuration is configured to encrypt data at rest in Amazon S3 with an AWS KMS key [FIX]: In the 'EncryptionConfiguration' parameter, set 'EnableAtRestEncryption' to true, and provide an 'AtRestEncryptionConfiguration' configuration, with 'EncryptionMode' set to 'SSE-KMS' or 'CSE-KMS'. >> } # # Parameterized Rules # rule check(emr_security_configuration) { %emr_security_configuration { SecurityConfiguration exists SecurityConfiguration is_struct SecurityConfiguration { # Scenario 2 EncryptionConfiguration exists EncryptionConfiguration is_struct EncryptionConfiguration { # Scenario 3 EnableAtRestEncryption exists EnableAtRestEncryption == true # Scenario 4 AtRestEncryptionConfiguration exists AtRestEncryptionConfiguration is_struct # Scenarios 5, 6 and 7 AtRestEncryptionConfiguration { S3EncryptionConfiguration exists S3EncryptionConfiguration is_struct let s3_encryption_configuration = S3EncryptionConfiguration %s3_encryption_configuration { check_kms_key_configuration(this) } %s3_encryption_configuration [ Overrides exists Overrides is_list Overrides not empty ] { Overrides[*] { check_kms_key_configuration(this) } } } } } } } rule check_kms_key_configuration(s3_encryption_config) { %s3_encryption_config { EncryptionMode exists EncryptionMode in %S3_KMS_ENCRYPTION_MODES } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, RESOURCE_TYPE) { %doc.%RESOURCE_TYPE.resourceProperties exists }

Exemples de modèles CT.EMR.PR.2

Vous pouvez consulter des exemples d'artefacts de test PASS et FAIL pour les contrôles proactifs de l'AWS Control Tower.

Exemple PASS - Utilisez ce modèle pour vérifier la conformité de la création d'une ressource.

Resources: KmsKey: Type: AWS::KMS::Key Properties: KeyPolicy: Version: 2012-10-17 Id: example-key-policy Statement: - Sid: Enable IAM User Permissions Effect: Allow Principal: AWS: Fn::Sub: arn:${AWS::Partition}:iam::${AWS::AccountId}:root Action: kms:* Resource: "*" SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableInTransitEncryption: false EnableAtRestEncryption: true AtRestEncryptionConfiguration: S3EncryptionConfiguration: EncryptionMode: SSE-KMS AwsKmsKey: Fn::GetAtt: - KmsKey - Arn

Exemple d'échec : utilisez ce modèle pour vérifier que le contrôle empêche la création de ressources non conformes.

Resources: SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableInTransitEncryption: false EnableAtRestEncryption: false

[CT.EMR.PR.3] Exiger qu'une configuration de sécurité Amazon Elastic ( MapReduce EMR) soit configurée avec le chiffrement du disque local du volume EBS à l'aide d'une clé AWS KMS

Ce contrôle vérifie si les configurations de sécurité Amazon EMR sont configurées avec le chiffrement de disque local activé, à l'aide du chiffrement de volume EBS et. AWS KMS

  • Objectif de contrôle : crypter les données au repos

  • Mise en œuvre : règle de AWS CloudFormation garde

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::EMR::SecurityConfiguration

  • AWS CloudFormationrègle de garde : Spécification de la règle CT.EMR.PR.3

Détails et exemples

Explication

Pour les données au repos, EMR offre la possibilité de chiffrer le stockage sur disque local. Le stockage local comprend les volumes de stockage d'instance EC2 et le stockage Amazon Elastic Block Store (EBS) associé, qui sont fournis avec votre cluster. L'option de chiffrement EBS chiffre le volume du périphérique racine EBS et les volumes de stockage associés. L'option de chiffrement EBS est disponible uniquement lorsque vous spécifiez AWS Key Management Service comme fournisseur de clés. AWS Control Tower recommande d'utiliser le chiffrement EBS.

Considérations d'utilisation
  • Si vous créez un cluster dans une région où le chiffrement Amazon EC2 des volumes EBS est activé par défaut pour votre compte, un volume EBS est chiffré même si le chiffrement du disque local n'est pas activé.

  • Lorsque le chiffrement du disque local est activé dans une configuration de sécurité, les paramètres Amazon EMR ont priorité sur les paramètres Amazon EC2 pour les instances du cluster EC2 encryption-by-default .

Remédiation en cas de défaillance des règles

Dans le EncryptionConfiguration paramètre, définissez la valeur EnableAtRestEncryption de true et fournissez une AtRestEncryptionConfiguration configuration contenant une LocalDiskEncryptionConfiguration configuration définie EnableEbsEncryption sur true.

Les exemples suivants montrent comment implémenter cette correction.

Configuration de sécurité Amazon EMR - Exemple

Une configuration de sécurité Amazon EMR configurée avec le chiffrement EBS à l'aide de. AWS KMS L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "SecurityConfiguration": { "Type": "AWS::EMR::SecurityConfiguration", "Properties": { "SecurityConfiguration": { "EncryptionConfiguration": { "EnableInTransitEncryption": false, "EnableAtRestEncryption": true, "AtRestEncryptionConfiguration": { "LocalDiskEncryptionConfiguration": { "EnableEbsEncryption": true, "EncryptionKeyProviderType": "AwsKms", "AwsKmsKey": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" } } } } } } }

Exemple YAML

SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableInTransitEncryption: false EnableAtRestEncryption: true AtRestEncryptionConfiguration: LocalDiskEncryptionConfiguration: EnableEbsEncryption: true EncryptionKeyProviderType: AwsKms AwsKmsKey: arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab

Spécification de la règle CT.EMR.PR.3

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # emr_sec_config_ebs_encryption_check # # Description: # This control checks whether Amazon EMR security configurations are configured with local disk encryption enabled, using EBS volume encryption and AWS KMS. # # Reports on: # AWS::EMR::SecurityConfiguration # # Evaluates: # AWS CloudFormation, AWS CloudFormation hook # # Rule Parameters: # None # # Scenarios: # Scenario: 1 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contain any EMR security configuration resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has not been provided # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has not been provided # or has been provided and set to a value other than bool(true) # Then: FAIL # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'AtRestEncryptionConfiguration' has not been provided # Then: FAIL # Scenario: 5 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'AtRestEncryptionConfiguration' has been provided as a struct # And: 'EnableEbsEncryption' in 'AtRestEncryptionConfiguration.LocalDiskEncryptionConfiguration' # has not been provided or has been provided and set to a value other than bool(true) # Then: FAIL # Scenario: 6 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableAtRestEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'AtRestEncryptionConfiguration' has been provided as a struct # And: 'EnableEbsEncryption' in 'AtRestEncryptionConfiguration.LocalDiskEncryptionConfiguration' # has been provided and set to bool(true) # Then: PASS # # Constants # let EMR_SECURITY_CONFIGURATION_TYPE = "AWS::EMR::SecurityConfiguration" let INPUT_DOCUMENT = this # # Assignments # let emr_security_configurations = Resources.*[ Type == %EMR_SECURITY_CONFIGURATION_TYPE ] # # Primary Rules # rule emr_sec_config_ebs_encryption_check when is_cfn_template(%INPUT_DOCUMENT) %emr_security_configurations not empty { check(%emr_security_configurations.Properties) << [CT.EMR.PR.3]: Require that an Amazon Elastic MapReduce (EMR) security configuration is configured with EBS volume local disk encryption using an AWS KMS key [FIX]: In the 'EncryptionConfiguration' parameter, set the value of 'EnableAtRestEncryption' to true, and provide an 'AtRestEncryptionConfiguration' configuration, containing an 'LocalDiskEncryptionConfiguration' configuration that sets 'EnableEbsEncryption' to true. >> } rule emr_sec_config_ebs_encryption_check when is_cfn_hook(%INPUT_DOCUMENT, %EMR_SECURITY_CONFIGURATION_TYPE) { check(%INPUT_DOCUMENT.%EMR_SECURITY_CONFIGURATION_TYPE.resourceProperties) << [CT.EMR.PR.3]: Require that an Amazon Elastic MapReduce (EMR) security configuration is configured with EBS volume local disk encryption using an AWS KMS key [FIX]: In the 'EncryptionConfiguration' parameter, set the value of 'EnableAtRestEncryption' to true, and provide an 'AtRestEncryptionConfiguration' configuration, containing an 'LocalDiskEncryptionConfiguration' configuration that sets 'EnableEbsEncryption' to true. >> } # # Parameterized Rules # rule check(emr_security_configuration) { %emr_security_configuration { SecurityConfiguration exists SecurityConfiguration is_struct SecurityConfiguration { # Scenario 2 EncryptionConfiguration exists EncryptionConfiguration is_struct EncryptionConfiguration { # Scenario 3 EnableAtRestEncryption exists EnableAtRestEncryption == true # Scenario 4 AtRestEncryptionConfiguration exists AtRestEncryptionConfiguration is_struct # Scenarios 5 and 6 AtRestEncryptionConfiguration { LocalDiskEncryptionConfiguration exists LocalDiskEncryptionConfiguration is_struct LocalDiskEncryptionConfiguration { EnableEbsEncryption exists EnableEbsEncryption == true } } } } } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, RESOURCE_TYPE) { %doc.%RESOURCE_TYPE.resourceProperties exists }

Exemples de modèles CT.EMR.PR.3

Vous pouvez consulter des exemples d'artefacts de test PASS et FAIL pour les contrôles proactifs de l'AWS Control Tower.

Exemple PASS - Utilisez ce modèle pour vérifier la conformité de la création d'une ressource.

Resources: KmsKey: Type: AWS::KMS::Key Properties: KeyPolicy: Version: 2012-10-17 Id: example-key-policy Statement: - Sid: Enable IAM User Permissions Effect: Allow Principal: AWS: Fn::Sub: arn:${AWS::Partition}:iam::${AWS::AccountId}:root Action: kms:* Resource: "*" SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableInTransitEncryption: false EnableAtRestEncryption: true AtRestEncryptionConfiguration: LocalDiskEncryptionConfiguration: EnableEbsEncryption: true EncryptionKeyProviderType: AwsKms AwsKmsKey: Fn::GetAtt: - KmsKey - Arn

Exemple d'échec : utilisez ce modèle pour vérifier que le contrôle empêche la création de ressources non conformes.

Resources: SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableInTransitEncryption: false EnableAtRestEncryption: false

[CT.EMR.PR.4] Exiger qu'une configuration de sécurité Amazon Elastic ( MapReduce EMR) soit configurée pour chiffrer les données en transit

Ce contrôle vérifie si une configuration de sécurité Amazon EMR est configurée pour exiger le chiffrement pendant le transit.

  • Objectif de contrôle : crypter les données en transit

  • Mise en œuvre : règle de AWS CloudFormation garde

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::EMR::SecurityConfiguration

  • AWS CloudFormationrègle de garde : Spécification de la règle CT.EMR.PR.4

Détails et exemples

Explication

Pour les données en transit, les configurations de sécurité EMR vous offrent deux options. Vous pouvez créer des certificats PEM, les compresser dans un fichier et les référencer depuis Amazon S3, ou vous pouvez implémenter un fournisseur personnalisé de certificats en Java et spécifier le chemin S3 vers le JAR. Dans les deux cas, EMR télécharge automatiquement les artefacts sur chaque nœud du cluster, puis les utilise pour implémenter des fonctionnalités de chiffrement en transit open source. Pour plus d'informations sur la manière dont ces certificats sont utilisés avec différentes technologies de Big Data, consultez la documentation Amazon EMR.

Considérations d'utilisation
  • Plusieurs mécanismes de chiffrement sont associés au chiffrement en transit. Ces mécanismes sont des fonctionnalités open source, ils sont spécifiques à l'application et peuvent varier en fonction de la version d'Amazon EMR. Pour plus d'informations, consultez la section Chiffrement en transit dans le guide de gestion Amazon EMR.

Remédiation en cas de défaillance des règles

Dans le EncryptionConfiguration paramètre, définissez le EnableInTransitEncryption paramètre sur true et fournissez une InTransitEncryptionConfiguration configuration.

Les exemples suivants montrent comment implémenter cette correction.

Configuration de sécurité Amazon EMR - Exemple

Une configuration de sécurité Amazon EMR configurée pour exiger le chiffrement des données en transit. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "SecurityConfiguration": { "Type": "AWS::EMR::SecurityConfiguration", "Properties": { "SecurityConfiguration": { "EncryptionConfiguration": { "EnableAtRestEncryption": false, "EnableInTransitEncryption": true, "InTransitEncryptionConfiguration": { "TLSCertificateConfiguration": { "CertificateProviderType": "PEM", "S3Object": "s3://MyConfigStore/artifacts/MyCerts.zip" } } } } } } }

Exemple YAML

SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableAtRestEncryption: false EnableInTransitEncryption: true InTransitEncryptionConfiguration: TLSCertificateConfiguration: CertificateProviderType: PEM S3Object: s3://MyConfigStore/artifacts/MyCerts.zip

Spécification de la règle CT.EMR.PR.4

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # emr_sec_config_encryption_in_transit_check # # Description: # This control checks whether an Amazon EMR security configuration is configured to require encryption in transit. # # Reports on: # AWS::EMR::SecurityConfiguration # # Evaluates: # AWS CloudFormation, AWS CloudFormation hook # # Rule Parameters: # None # # Scenarios: # Scenario: 1 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contain any EMR security configuration resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has not been provided # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableInTransitEncryption' in 'EncryptionConfiguration' has not been provided # or has been provided and set to a value other than bool(true) # Then: FAIL # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableInTransitEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'InTransitEncryptionConfiguration' has not been provided # Then: FAIL # Scenario: 5 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableInTransitEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'InTransitEncryptionConfiguration' has been provided as a struct # And: 'CertificateProviderType' in 'InTransitEncryptionConfiguration.TLSCertificateConfiguration' # has not been provided or has been provided and set to an empty string # Then: FAIL # Scenario: 6 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an EMR security configuration resource # And: 'EncryptionConfiguration' in 'SecurityConfiguration' has been provided as a struct # And: 'EnableInTransitEncryption' in 'EncryptionConfiguration' has been provided and # set to bool(true) # And: 'InTransitEncryptionConfiguration' has been provided as a struct # And: 'CertificateProviderType' in 'InTransitEncryptionConfiguration.TLSCertificateConfiguration' # has been provided and set to a non-empty string # Then: PASS # # Constants # let EMR_SECURITY_CONFIGURATION_TYPE = "AWS::EMR::SecurityConfiguration" let INPUT_DOCUMENT = this # # Assignments # let emr_security_configurations = Resources.*[ Type == %EMR_SECURITY_CONFIGURATION_TYPE ] # # Primary Rules # rule emr_sec_config_encryption_in_transit_check when is_cfn_template(%INPUT_DOCUMENT) %emr_security_configurations not empty { check(%emr_security_configurations.Properties) << [CT.EMR.PR.4]: Require that an Amazon Elastic MapReduce (EMR) security configuration is configured to encrypt data in transit [FIX]: In the 'EncryptionConfiguration' parameter, set the 'EnableInTransitEncryption' parameter to true, and provide an 'InTransitEncryptionConfiguration' configuration. >> } rule emr_sec_config_encryption_in_transit_check when is_cfn_hook(%INPUT_DOCUMENT, %EMR_SECURITY_CONFIGURATION_TYPE) { check(%INPUT_DOCUMENT.%EMR_SECURITY_CONFIGURATION_TYPE.resourceProperties) << [CT.EMR.PR.4]: Require that an Amazon Elastic MapReduce (EMR) security configuration is configured to encrypt data in transit [FIX]: In the 'EncryptionConfiguration' parameter, set the 'EnableInTransitEncryption' parameter to true, and provide an 'InTransitEncryptionConfiguration' configuration. >> } # # Parameterized Rules # rule check(emr_security_configuration) { %emr_security_configuration { SecurityConfiguration exists SecurityConfiguration is_struct SecurityConfiguration { # Scenario 2 EncryptionConfiguration exists EncryptionConfiguration is_struct EncryptionConfiguration { # Scenario 3 EnableInTransitEncryption exists EnableInTransitEncryption == true # Scenario 4 InTransitEncryptionConfiguration exists InTransitEncryptionConfiguration is_struct # Scenarios 5 and 6 InTransitEncryptionConfiguration { TLSCertificateConfiguration exists TLSCertificateConfiguration is_struct TLSCertificateConfiguration { CertificateProviderType exists check_is_string_and_not_empty(CertificateProviderType) } } } } } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, RESOURCE_TYPE) { %doc.%RESOURCE_TYPE.resourceProperties exists } rule check_is_string_and_not_empty(value) { %value { this is_string this != /\A\s*\z/ } }

Exemples de modèles CT.EMR.PR.4

Vous pouvez consulter des exemples d'artefacts de test PASS et FAIL pour les contrôles proactifs de l'AWS Control Tower.

Exemple PASS - Utilisez ce modèle pour vérifier la conformité de la création d'une ressource.

Resources: SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableAtRestEncryption: false EnableInTransitEncryption: true InTransitEncryptionConfiguration: TLSCertificateConfiguration: CertificateProviderType: PEM S3Object: s3://MyConfigStore/artifacts/MyCerts.zip

Exemple d'échec : utilisez ce modèle pour vérifier que le contrôle empêche la création de ressources non conformes.

Resources: SecurityConfiguration: Type: AWS::EMR::SecurityConfiguration Properties: SecurityConfiguration: EncryptionConfiguration: EnableInTransitEncryption: false EnableAtRestEncryption: false