Contrôles Amazon DynamoDB - 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 DynamoDB

[CT.DYNAMODB.PR.1] Exiger que point-in-time la restauration d'une table Amazon DynamoDB soit activée

Ce contrôle vérifie si la point-in-time restauration (PITR) est activée pour une table Amazon DynamoDB.

  • Objectif de contrôle : améliorer la résilience

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

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::DynamoDB::Table

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

Détails et exemples

Explication

Les sauvegardes vous aident à récupérer plus rapidement après un incident de sécurité. Ils renforcent également la résilience de vos systèmes. Amazon point-in-time DynamoDB Recovery (PITR) automatise les sauvegardes des tables DynamoDB, ce qui permet de réduire le temps nécessaire à la restauration suite à des opérations de suppression ou d'écriture accidentelles. Les tables DynamoDB sur lesquelles le PITR est activé peuvent être restaurées à tout moment au cours des 35 derniers jours.

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

Fournissez une PointInTimeRecoverySpecification configuration et définissez PointInTimeRecoveryEnabled surtrue.

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

Table Amazon DynamoDB : exemple

Table Amazon DynamoDB configurée point-in-time avec la restauration activée. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "DynamoDBTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "AttributeDefinitions": [ { "AttributeName": "PK", "AttributeType": "S" } ], "BillingMode": "PAY_PER_REQUEST", "KeySchema": [ { "AttributeName": "PK", "KeyType": "HASH" } ], "PointInTimeRecoverySpecification": { "PointInTimeRecoveryEnabled": true } } } }

Exemple YAML

DynamoDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: PK AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: PK KeyType: HASH PointInTimeRecoverySpecification: PointInTimeRecoveryEnabled: true

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

# ################################### ## Rule Specification ## ##################################### # Rule Identifier: # dynamodb_table_pitr_enabled_check # # Description: # This control checks whether point-in-time recovery (PITR) is enabled for an Amazon DynamoDB table. # # Reports on: # AWS::DynamoDB::Table # # Evaluates: # AWS CloudFormation, AWS CloudFormation hook # # Rule Paramaeters: # 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 DynamoDB table resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contains a DynamoDB table resource # And: 'PointInTimeRecoverySpecification' is not present on the DynamoDB table resource # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contains a DynamoDB table resource # And: 'PointInTimeRecoverySpecification' is present on the DynamoDB table resource # And: 'PointInTimeRecoveryEnabled' in 'PointInTimeRecoverySpecification' is missing or is 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 does not contains a DynamoDB table resource # And: 'PointInTimeRecoverySpecification' is present on the DynamoDB table resource # And: 'PointInTimeRecoveryEnabled' in 'PointInTimeRecoverySpecification' is present and set to bool(true) # Then: PASS # # Constants # let DYNAMODB_TABLE_TYPE = "AWS::DynamoDB::Table" let INPUT_DOCUMENT = this # # Assignments # let dynamodb_tables = Resources.*[ Type == %DYNAMODB_TABLE_TYPE ] # # Primary Rules # rule dynamodb_table_pitr_enabled_check when is_cfn_template(%INPUT_DOCUMENT) %dynamodb_tables not empty { check(%dynamodb_tables.Properties) << [CT.DYNAMODB.PR.1]: Require that point-in-time recovery for an Amazon DynamoDB table is activated [FIX]: Provide a 'PointInTimeRecoverySpecification' configuration and set 'PointInTimeRecoveryEnabled' to 'true'. >> } rule dynamodb_table_pitr_enabled_check when is_cfn_hook(%INPUT_DOCUMENT, %DYNAMODB_TABLE_TYPE) { check(%INPUT_DOCUMENT.%DYNAMODB_TABLE_TYPE.resourceProperties) << [CT.DYNAMODB.PR.1]: Require that point-in-time recovery for an Amazon DynamoDB table is activated [FIX]: Provide a 'PointInTimeRecoverySpecification' configuration and set 'PointInTimeRecoveryEnabled' to 'true'. >> } rule check(dynamodb_table) { %dynamodb_table { # Scenario 2 PointInTimeRecoverySpecification exists PointInTimeRecoverySpecification is_struct # Scenario 3 and 4 PointInTimeRecoverySpecification { PointInTimeRecoveryEnabled exists PointInTimeRecoveryEnabled == true } } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, DYNAMODB_TABLE_TYPE) { %doc.%DYNAMODB_TABLE_TYPE.resourceProperties exists }

CT.DYNAMODB.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: DynamoDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: "PK" AttributeType: "S" BillingMode: "PAY_PER_REQUEST" KeySchema: - AttributeName: "PK" KeyType: "HASH" PointInTimeRecoverySpecification: PointInTimeRecoveryEnabled: 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: DynamoDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: "PK" AttributeType: "S" BillingMode: "PAY_PER_REQUEST" KeySchema: - AttributeName: "PK" KeyType: "HASH" PointInTimeRecoverySpecification: PointInTimeRecoveryEnabled: false

[CT.DYNAMODB.PR.2] Exiger qu'une table Amazon DynamoDB soit chiffrée au repos à l'aide d'une clé AWS KMS

Ce contrôle vérifie si votre table Amazon DynamoDB est chiffrée à l'aide d'AWS Key Management Serviceune clé (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::DynamoDB::Table

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

Détails et exemples

Explication

Le chiffrement au repos d'Amazon DynamoDB fournit une couche supplémentaire de protection des données, car il sécurise toujours vos données dans une table chiffrée, y compris sa clé primaire, ses index secondaires locaux et globaux, ses flux, ses tables globales, ses sauvegardes et ses clusters DynamoDB Accelerator (DAX), chaque fois que les données sont stockées sur un support durable.

Le chiffrement au repos s'intègre à AWS KMS pour gérer les clés de chiffrement utilisées pour chiffrer vos tables.

Considérations d'utilisation
  • Ce contrôle nécessite uniquement que les clés KMS soient utilisées pour le chiffrement côté serveur. Il ne vérifie pas les propriétés de la clé KMS utilisée, par exemple si la clé KMS est gérée par le client ou par le service.

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

Fournissez une SSESpecification configuration et définissez SSEEnabled surtrue.

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

Table Amazon DynamoDB : exemple

Table Amazon DynamoDB configurée pour chiffrer les données au repos à l'AWS Key Management Serviceaide de clés (KMS). L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "DynamoDBTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "AttributeDefinitions": [ { "AttributeName": "PK", "AttributeType": "S" } ], "BillingMode": "PAY_PER_REQUEST", "KeySchema": [ { "AttributeName": "PK", "KeyType": "HASH" } ], "SSESpecification": { "SSEEnabled": true } } } }

Exemple YAML

DynamoDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: PK AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: PK KeyType: HASH SSESpecification: SSEEnabled: true

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

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # dynamodb_table_encrypted_kms_check # # Description: # This control checks whether your Amazon DynamoDB table is encrypted with an AWS Key Management Service (KMS) key. # # Reports on: # AWS::DynamoDB::Table # # 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 DynamoDB table resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a DynamoDB table resources # And: 'SSEEnabled' in 'SSESpecification' 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 a DynamoDB table resources # And: 'SSEEnabled' in 'SSESpecification' 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 a DynamoDB table resources # And: 'SSEEnabled' in 'SSESpecification' has been provided and set to bool(true) # Then: PASS # # Constants # let DYNAMODB_TABLE_TYPE = "AWS::DynamoDB::Table" let INPUT_DOCUMENT = this # # Assignments # let dynamodb_tables = Resources.*[ Type == %DYNAMODB_TABLE_TYPE ] # # Primary Rules # rule dynamodb_table_encrypted_kms_check when is_cfn_template(%INPUT_DOCUMENT) %dynamodb_tables not empty { check(%dynamodb_tables.Properties) << [CT.DYNAMODB.PR.2]: Require an Amazon DynamoDB table to be encrypted at rest using an AWS KMS key [FIX]: Provide a 'SSESpecification' configuration and set 'SSEEnabled' to 'true'. >> } rule dynamodb_table_encrypted_kms_check when is_cfn_hook(%INPUT_DOCUMENT, %DYNAMODB_TABLE_TYPE) { check(%INPUT_DOCUMENT.%DYNAMODB_TABLE_TYPE.resourceProperties) << [CT.DYNAMODB.PR.2]: Require an Amazon DynamoDB table to be encrypted at rest using an AWS KMS key [FIX]: Provide a 'SSESpecification' configuration and set 'SSEEnabled' to 'true'. >> } rule check(dynamodb_table) { %dynamodb_table { # Scenario 2 SSESpecification exists SSESpecification is_struct # Scenarios 3 and 4 SSESpecification { SSEEnabled exists SSEEnabled == true } } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, DYNAMODB_TABLE_TYPE) { %doc.%DYNAMODB_TABLE_TYPE.resourceProperties exists }

Exemples de modèles CT.DYNAMODB.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: DynamoDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: PK AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: PK KeyType: HASH SSESpecification: SSEEnabled: 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: DynamoDBTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: PK AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: PK KeyType: HASH SSESpecification: SSEEnabled: false