Contrôles du Amazon Elastic Container Registry - 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 du Amazon Elastic Container Registry

[CT.ECR.PR.1] Exiger qu'une politique de cycle de vie soit configurée dans les référentiels Amazon ECR

Ce contrôle vérifie si au moins une politique de cycle de vie est configurée dans un référentiel privé Amazon Elastic Container Registry (Amazon ECR).

  • Objectif de contrôle : gérer les vulnérabilités, protéger les configurations

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

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::ECR::Repository

  • AWS CloudFormationrègle de garde : CT.ECR.PR.1spécification des règles

Détails et exemples

Explication

Les politiques de cycle de vie d'Amazon ECR spécifient la gestion du cycle de vie des images dans un référentiel. En configurant des politiques de cycle de vie, vous pouvez automatiser le nettoyage des images inutilisées et leur expiration, en fonction de leur âge ou de leur nombre. L'automatisation de ces tâches peut vous aider à éviter d'utiliser involontairement des images obsolètes dans votre référentiel.

Corrections en cas de défaillance des règles

Fournissez une LifecyclePolicy configuration et définissez une politique LifecyclePolicyText de cycle de vie du référentiel Amazon ECR.

Les exemples suivants montrent comment mettre en œuvre cette correction.

Référentiel Amazon ECR - Exemple

Référentiel Amazon ECR configuré selon une politique de cycle de vie. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "ECRRepository": { "Type": "AWS::ECR::Repository", "Properties": { "LifecyclePolicy": { "LifecyclePolicyText": "{\n \"rules\": [\n {\n \"rulePriority\": 1,\n \"description\": \"Expire images older than 14 days\",\n \"selection\": {\n \"tagStatus\": \"untagged\",\n \"countType\": \"sinceImagePushed\",\n \"countUnit\": \"days\",\n \"countNumber\": 14\n },\n \"action\": {\n \"type\": \"expire\"\n }\n }\n ]\n}\n" } } } }

Exemple YAML

ECRRepository: Type: AWS::ECR::Repository Properties: LifecyclePolicy: LifecyclePolicyText: | { "rules": [ { "rulePriority": 1, "description": "Expire images older than 14 days", "selection": { "tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 14 }, "action": { "type": "expire" } } ] }

CT.ECR.PR.1spécification des règles

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # ecr_private_lifecycle_policy_configured_check # # Description: # This control checks whether a private Amazon Elastic Container Registry (ECR) repository has at least one lifecycle policy configured. # # Reports on: # AWS::ECR::Repository # # 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 ECR repository resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an ECR repository resource # And: 'LifecyclePolicy' is not present # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an ECR repository resource # And: 'LifecyclePolicy' is present # And: 'LifecyclePolicyText' has not been provided in the 'LifecyclePolicy' configuration or has been provided as # an empty string # Then: FAIL # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an ECR repository resource # And: 'LifecyclePolicy' is present # And: 'LifecyclePolicyText' has been provided in the 'LifecyclePolicy' configuration with a non-empty string # Then: PASS # # Constants # let ECR_REPOSITORY_TYPE = "AWS::ECR::Repository" let INPUT_DOCUMENT = this # # Assignments # let ecr_repositories = Resources.*[ Type == %ECR_REPOSITORY_TYPE ] # # Primary Rules # rule ecr_private_lifecycle_policy_configured_check when is_cfn_template(%INPUT_DOCUMENT) %ecr_repositories not empty { check(%ecr_repositories.Properties) << [CT.ECR.PR.1]: Require Amazon ECR repositories to have a lifecycle policy configured [FIX]: Provide a 'LifecyclePolicy' configuration and set 'LifecyclePolicyText' to an Amazon ECR repository lifecycle policy. >> } rule ecr_private_lifecycle_policy_configured_check when is_cfn_hook(%INPUT_DOCUMENT, %ECR_REPOSITORY_TYPE) { check(%INPUT_DOCUMENT.%ECR_REPOSITORY_TYPE.resourceProperties) << [CT.ECR.PR.1]: Require Amazon ECR repositories to have a lifecycle policy configured [FIX]: Provide a 'LifecyclePolicy' configuration and set 'LifecyclePolicyText' to an Amazon ECR repository lifecycle policy. >> } # # Parameterized Rules # rule check(ecr_repository) { %ecr_repository { #Scenario 3 LifecyclePolicy exists LifecyclePolicy is_struct LifecyclePolicy { #Scenario 4 LifecyclePolicyText exists check_is_string_and_not_empty(LifecyclePolicyText) } } } # # 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 }

CT.ECR.PR.1exemples de modèles

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: ECRRepository: Type: AWS::ECR::Repository Properties: LifecyclePolicy: LifecyclePolicyText: | { "rules": [ { "rulePriority": 1, "description": "Expire images older than 14 days", "selection": { "tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 14 }, "action": { "type": "expire" } } ] }

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

Resources: ECRRepository: Type: AWS::ECR::Repository Properties: {}

[CT.ECR.PR.2] Exiger que la numérisation d'images soit activée dans les référentiels privés Amazon ECR

Ce contrôle vérifie si la numérisation d'images est activée dans un référentiel privé Amazon Elastic Container Registry (Amazon ECR).

  • Objectif de contrôle : gérer les vulnérabilités

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

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::ECR::Repository

  • AWS CloudFormationrègle de garde : CT.ECR.PR.2spécification des règles

Détails et exemples

Explication

La numérisation d'images Amazon ECR permet d'identifier les vulnérabilités logicielles dans vos images de conteneur. Amazon ECR utilise la base de données Common Vulnerabilities and Exposures (CVE) du projet open source Clair, et fournit une liste des résultats d'analyse. L'activation de la numérisation d'images sur les référentiels Amazon ECR ajoute une couche de vérification concernant l'intégrité et la sécurité des images stockées.

Corrections en cas de défaillance des règles

Réglez ScanOnPush ImageScanningConfiguration surtrue.

Les exemples suivants montrent comment mettre en œuvre cette correction.

Référentiel Amazon ECR - Exemple

Référentiel Amazon ECR avec numérisation d'images activée. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "ECRRepository": { "Type": "AWS::ECR::Repository", "Properties": { "ImageScanningConfiguration": { "ScanOnPush": true } } } }

Exemple YAML

ECRRepository: Type: AWS::ECR::Repository Properties: ImageScanningConfiguration: ScanOnPush: true

CT.ECR.PR.2spécification des règles

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # ecr_private_image_scanning_enabled_check # # Description: # This control checks whether a private Amazon Elastic Container Registry (Amazon ECR) repository has image scanning enabled. # # Reports on: # AWS::ECR::Repository # # 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 Amazon ECR repository resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an Amazon ECR repository resource # And: 'ImageScanningConfiguration.ScanOnPush' 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 Amazon ECR repository resource # And: 'ImageScanningConfiguration.ScanOnPush' 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 Amazon ECR repository resource # And: 'ImageScanningConfiguration.ScanOnPush' has been provided and set to bool(true) # Then: PASS # # Constants # let ECR_REPOSITORY_TYPE = "AWS::ECR::Repository" let INPUT_DOCUMENT = this # # Assignments # let ecr_repositories = Resources.*[ Type == %ECR_REPOSITORY_TYPE ] # # Primary Rules # rule ecr_private_image_scanning_enabled_check when is_cfn_template(%INPUT_DOCUMENT) %ecr_repositories not empty { check(%ecr_repositories.Properties) << [CT.ECR.PR.2]: Require Amazon ECR private repositories to have image scanning enabled [FIX]: Set 'ScanOnPush' in 'ImageScanningConfiguration' to 'true'. >> } rule ecr_private_image_scanning_enabled_check when is_cfn_hook(%INPUT_DOCUMENT, %ECR_REPOSITORY_TYPE) { check(%INPUT_DOCUMENT.%ECR_REPOSITORY_TYPE.resourceProperties) << [CT.ECR.PR.2]: Require Amazon ECR private repositories to have image scanning enabled [FIX]: Set 'ScanOnPush' in 'ImageScanningConfiguration' to 'true'. >> } # # Parameterized Rules # rule check(ecr_repository) { %ecr_repository { # Scenario 2 ImageScanningConfiguration exists ImageScanningConfiguration is_struct ImageScanningConfiguration { # Scenario 3 and 4 ScanOnPush exists ScanOnPush == 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 }

CT.ECR.PR.2exemples de modèles

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: ECRRepository: Type: AWS::ECR::Repository Properties: ImageScanningConfiguration: ScanOnPush: true

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

Resources: ECRRepository: Type: AWS::ECR::Repository Properties: ImageScanningConfiguration: ScanOnPush: false

[CT.ECR.PR.3] Exiger que l'immuabilité des balises soit activée dans les référentiels privés Amazon ECR

Ce contrôle vérifie si l'immuabilité des balises est activée dans un référentiel privé Amazon Elastic Container Registry (Amazon ECR).

  • Objectif de contrôle : protéger les configurations

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

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::ECR::Repository

  • AWS CloudFormationrègle de garde : CT.ECR.PR.3spécification des règles

Détails et exemples

Explication

L'immuabilité des balises Amazon ECR permet aux clients de s'appuyer sur les balises descriptives d'une image en tant que mécanisme fiable permettant de suivre et d'identifier les images de manière unique. Une balise immuable est statique, ce qui signifie que chaque balise fait référence à une image unique. Ce balisage améliore la fiabilité et l'évolutivité, car l'utilisation d'une balise statique entraîne toujours le déploiement de la même image. Lorsqu'elle est configurée, l'immuabilité des balises empêche le remplacement des balises, ce qui réduit la surface d'attaque.

Corrections en cas de défaillance des règles

Définissez ImageTagMutability sur IMMUTABLE.

Les exemples suivants montrent comment mettre en œuvre cette correction.

Référentiel Amazon ECR - Exemple

Référentiel Amazon ECR configuré avec des balises immuables. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "ECRRepository": { "Type": "AWS::ECR::Repository", "Properties": { "ImageTagMutability": "IMMUTABLE" } } }

Exemple YAML

ECRRepository: Type: AWS::ECR::Repository Properties: ImageTagMutability: IMMUTABLE

CT.ECR.PR.3spécification des règles

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # ecr_private_tag_immutability_enabled_check # # Description: # This control checks whether a private Amazon Elastic Container Registry (Amazon ECR) repository has tag immutability enabled. # # Reports on: # AWS::ECR::Repository # # 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 ECR repository resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an ECR repository resource # And: 'ImageTagMutability' 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 ECR repository resource # And: 'ImageTagMutability' has been provided with a value of 'MUTABLE' # Then: FAIL # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an ECR repository resource # And: 'ImageTagMutability' has been provided with a value of 'IMMUTABLE' # Then: PASS # # Constants # let ECR_REPOSITORY_TYPE = "AWS::ECR::Repository" let INPUT_DOCUMENT = this # # Assignments # let ecr_repositories = Resources.*[ Type == %ECR_REPOSITORY_TYPE ] # # Primary Rules # rule ecr_private_tag_immutability_enabled_check when is_cfn_template(%INPUT_DOCUMENT) %ecr_repositories not empty { check(%ecr_repositories.Properties) << [CT.ECR.PR.3]: Require Amazon ECR private repositories to have tag immutability enabled [FIX]: Set 'ImageTagMutability' to 'IMMUTABLE'. >> } rule ecr_private_tag_immutability_enabled_check when is_cfn_hook(%INPUT_DOCUMENT, %ECR_REPOSITORY_TYPE) { check(%INPUT_DOCUMENT.%ECR_REPOSITORY_TYPE.resourceProperties) << [CT.ECR.PR.3]: Require Amazon ECR private repositories to have tag immutability enabled [FIX]: Set 'ImageTagMutability' to 'IMMUTABLE'. >> } # # Parameterized Rules # rule check(ecr_repository) { %ecr_repository { # Scenario 2, 3 and 4 ImageTagMutability exists ImageTagMutability == "IMMUTABLE" } } # # 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 }

CT.ECR.PR.3exemples de modèles

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: ECRRepository: Type: AWS::ECR::Repository Properties: ImageTagMutability: IMMUTABLE

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

Resources: ECRRepository: Type: AWS::ECR::Repository Properties: ImageTagMutability: MUTABLE