AWS Gluecommandes - 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.

AWS Gluecommandes

[CT.GLUE.PR.1] Exiger qu'une AWS Glue tâche soit associée à une configuration de sécurité

Ce contrôle vérifie si une configuration de sécurité est associée à une AWS Glue tâche.

  • 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::Glue::Job

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

Détails et exemples

Explication

DansAWS Glue, une configuration de sécurité contient les propriétés nécessaires pour écrire des données chiffrées. Les configurations de sécurité d'une AWS Glue tâche doivent être configurées pour spécifier la manière dont les données sont chiffrées sur la cible Amazon S3. Le chiffrement permet de protéger les données contre tout accès et toute exposition non autorisés.

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

Définissez le SecurityConfiguration paramètre sur le nom d'une configuration AWS Glue de sécurité.

Les exemples suivants montrent comment implémenter cette correction.

AWS Gluejob - Exemple

Une AWS Glue tâche configurée avec une configuration de sécurité associée. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "GlueJob": { "Type": "AWS::Glue::Job", "Properties": { "Command": { "Name": "glueetl", "ScriptLocation": "s3://example-glue-script-bucket/scripts" }, "Name": "sample-glue-job", "Role": { "Ref": "IAMRole" }, "GlueVersion": "2.0", "SecurityConfiguration": { "Ref": "GlueSecurityConfig" } } } }

Exemple YAML

GlueJob: Type: AWS::Glue::Job Properties: Command: Name: glueetl ScriptLocation: s3://example-glue-script-bucket/scripts Name: sample-glue-job Role: !Ref 'IAMRole' GlueVersion: '2.0' SecurityConfiguration: !Ref 'GlueSecurityConfig'

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

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # glue_job_security_config_check # # Description: # This control checks whether an AWS Glue job has an associated security configuration. # # Reports on: # AWS::Glue::Job # # 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 AWS Glue job resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an AWS Glue job resource # And: '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 AWS Glue job resource # And: 'SecurityConfiguration 'has been provided as an empty string or invalid local # reference # Then: FAIL # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation Hook Document # And: The input document contains an AWS Glue job resource # And: 'SecurityConfiguration' has been provided as a non-empty string or valid # local reference to an AWS Glue security configuration resource # Then: PASS # # Constants # let INPUT_DOCUMENT = this let GLUE_JOB_TYPE = "AWS::Glue::Job" # # Assignments # let glue_jobs = Resources.*[ Type == %GLUE_JOB_TYPE ] # # Primary Rules # rule glue_job_security_config_check when is_cfn_template(%INPUT_DOCUMENT) %glue_jobs not empty { check(%glue_jobs.Properties) << [CT.GLUE.PR.1]: Require an AWS Glue job to have an associated security configuration [FIX]: Set the 'SecurityConfiguration' parameter to the name of an AWS Glue security configuration. >> } rule glue_job_security_config_check when is_cfn_hook(%INPUT_DOCUMENT, %GLUE_JOB_TYPE) { check(%INPUT_DOCUMENT.%GLUE_JOB_TYPE.resourceProperties) << [CT.GLUE.PR.1]: Require an AWS Glue job to have an associated security configuration [FIX]: Set the 'SecurityConfiguration' parameter to the name of an AWS Glue security configuration. >> } # # Parameterized Rules # rule check(glue_job) { %glue_job{ # Scenario 2 SecurityConfiguration exists # Scenario 3 and 4 check_is_string_and_not_empty(SecurityConfiguration) or check_local_references(%INPUT_DOCUMENT, SecurityConfiguration, "AWS::Glue::SecurityConfiguration") } } # # Utility Rules # rule check_is_string_and_not_empty(value) { %value { this is_string this != /\A\s*\z/ } } 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_local_references(doc, reference_properties, referenced_RESOURCE_TYPE) { %reference_properties { 'Fn::GetAtt' { query_for_resource(%doc, this[0], %referenced_RESOURCE_TYPE) <<Local Stack reference was invalid>> } or Ref { query_for_resource(%doc, this, %referenced_RESOURCE_TYPE) <<Local Stack reference was invalid>> } } } rule query_for_resource(doc, resource_key, referenced_RESOURCE_TYPE) { let referenced_resource = %doc.Resources[ keys == %resource_key ] %referenced_resource not empty %referenced_resource { Type == %referenced_RESOURCE_TYPE } }

Exemples de modèles CT.GLUE.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: IAMRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - "glue.amazonaws.com" Action: - "sts:AssumeRole" Path: "/" Key: Type: AWS::KMS::Key Properties: KeyPolicy: Version: 2012-10-17 Id: example-policy Statement: - Sid: Enable IAM User Permissions Effect: Allow Principal: AWS: Fn::Sub: arn:${AWS::Partition}:iam::${AWS::AccountId}:root Action: kms:* Resource: '*' KeySpec: SYMMETRIC_DEFAULT EnableKeyRotation: true GlueSecurityConfig: Type: AWS::Glue::SecurityConfiguration Properties: Name: Fn::Sub: ${AWS::StackName}-example EncryptionConfiguration: S3Encryptions: - KmsKeyArn: Fn::GetAtt: [Key, Arn] S3EncryptionMode: SSE-KMS GlueJob: Type: AWS::Glue::Job Properties: Command: Name: glueetl ScriptLocation: "s3://example-glue-script-bucket/scripts" Name: Fn::Sub: ${AWS::StackName}-example Role: Ref: IAMRole GlueVersion: "2.0" SecurityConfiguration: Ref: GlueSecurityConfig

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

Resources: IAMRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - "glue.amazonaws.com" Action: - "sts:AssumeRole" Path: "/" GlueJob: Type: AWS::Glue::Job Properties: Command: Name: glueetl ScriptLocation: "s3://example-glue-script-bucket/scripts" Name: Fn::Sub: ${AWS::StackName}-example Role: Ref: IAMRole GlueVersion: "2.0"