Sécurité dans AWS AppConfig - AWS AppConfig

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.

Sécurité dans AWS AppConfig

La sécurité du cloud AWS est la priorité absolue. En tant que AWS client, vous bénéficiez d'un centre de données et d'une architecture réseau conçus pour répondre aux exigences des entreprises les plus sensibles en matière de sécurité.

La sécurité est une responsabilité partagée entre vous AWS et vous. Le modèle de responsabilité partagée décrit cela comme la sécurité du cloud et la sécurité dans le cloud :

  • Sécurité du cloud : AWS est chargée de protéger l'infrastructure qui exécute les AWS services dans le AWS Cloud. AWS vous fournit également des services que vous pouvez utiliser en toute sécurité. Des auditeurs tiers testent et vérifient régulièrement l'efficacité de notre sécurité dans le cadre des programmes de AWS conformité Programmes de de conformité. Pour en savoir plus sur les programmes de conformité qui s'appliquent à AWS Systems Manager, voir AWS Services concernés par programme de conformitéAWS .

  • Sécurité dans le cloud — Votre responsabilité est déterminée par le AWS service que vous utilisez. Vous êtes également responsable d’autres facteurs, y compris de la sensibilité de vos données, des exigences de votre entreprise, ainsi que de la législation et de la réglementation applicables.

AWS AppConfig est une capacité de AWS Systems Manager. Pour comprendre comment appliquer le modèle de responsabilité partagée lors de l'utilisation AWS AppConfig, voir Security in AWS Systems Manager. Cette section décrit comment configurer Systems Manager pour répondre aux objectifs de sécurité et de conformité de AWS AppConfig.

Implémentation d'un accès sur la base du moindre privilège

En tant que bonne pratique de sécurité, accordez les autorisations minimales requises par les identités pour effectuer des actions spécifiques sur des ressources spécifiques dans des conditions spécifiques. AWS AppConfig L'agent propose deux fonctionnalités qui lui permettent d'accéder au système de fichiers d'une instance ou d'un conteneur : sauvegarde et écriture sur disque. Si vous activez ces fonctionnalités, vérifiez que seul l' AWS AppConfig agent est autorisé à écrire dans les fichiers de configuration désignés sur le système de fichiers. Vérifiez également que seuls les processus requis pour lire ces fichiers de configuration sont en mesure de le faire. L'implémentation d'un accès sur la base du moindre privilège est fondamentale pour réduire les risques en matière de sécurité et l'impact que pourraient avoir des d'erreurs ou des actes de malveillance.

Pour plus d'informations sur la mise en œuvre de l'accès au moindre privilège, consultez la section SEC03-BP02 Accorder l'accès au moindre privilège dans le guide de l'AWS Well-Architected Tool utilisateur. Pour plus d'informations sur les fonctionnalités de l' AWS AppConfig agent mentionnées dans cette section, consultezFonctionnalités de récupération supplémentaires.

Chiffrement des données au repos pour AWS AppConfig

AWS AppConfig fournit un cryptage par défaut pour protéger les données clients au repos lors de l'utilisation Clés détenues par AWS.

Clés détenues par AWS— AWS AppConfig utilise ces clés par défaut pour chiffrer automatiquement les données déployées par le service et hébergées dans le magasin de AWS AppConfig données. Vous ne pouvez ni afficher, ni gérer, ni utiliser Clés détenues par AWS, ni auditer leur utilisation. Toutefois, vous n'avez pas besoin de prendre de mesure ou de modifier les programmes pour protéger les clés qui chiffrent vos données. Pour plus d’informations, consultez Clés détenues par AWS dans le Guide du développeur AWS Key Management Service .

Bien que vous ne puissiez pas désactiver cette couche de chiffrement ou sélectionner un autre type de chiffrement, vous pouvez spécifier une clé gérée par le client à utiliser lorsque vous enregistrez les données de configuration hébergées dans le magasin de AWS AppConfig données et lorsque vous déployez vos données de configuration.

Clés gérées par le client : AWS AppConfig prend en charge l'utilisation d'une clé symétrique gérée par le client que vous créez, détenez et gérez pour ajouter une deuxième couche de chiffrement à la couche existante Clé détenue par AWS. Étant donné que vous avez le contrôle total de cette couche de chiffrement, vous pouvez effectuer les tâches suivantes :

  • Établir et maintenir des politiques et des subventions clés

  • Établir et maintenir des politiques IAM

  • Activation et désactivation des stratégies de clé

  • Rotation des matériaux de chiffrement de clé

  • Ajout de balises

  • Création d'alias de clé

  • Planification des clés pour la suppression

Pour plus d'informations, consultez la section Clé gérée par le client dans le guide du AWS Key Management Service développeur.

AWS AppConfig prend en charge les clés gérées par le client

AWS AppConfig offre un support pour le chiffrement des clés géré par le client pour les données de configuration. Pour les versions de configuration enregistrées dans le magasin de données AWS AppConfig hébergé, les clients peuvent définir un KmsKeyIdentifier sur le profil de configuration correspondant. Chaque fois qu'une nouvelle version des données de configuration est créée à l'aide de l'opération CreateHostedConfigurationVersion API, une clé de AWS KMS données est AWS AppConfig générée KmsKeyIdentifier à partir du pour chiffrer les données avant de les stocker. Lorsque les données sont consultées ultérieurement, soit pendant les opérations soit pendant les GetHostedConfigurationVersion opérations de l'StartDeploymentAPI, il AWS AppConfig déchiffre les données de configuration à l'aide des informations relatives à la clé de données générée.

AWS AppConfig offre également un support pour le chiffrement des clés géré par le client pour les données de configuration déployées. Pour chiffrer les données de configuration, les clients peuvent fournir un KmsKeyIdentifier à leur déploiement. AWS AppConfig génère la clé de AWS KMS données avec celle-ci KmsKeyIdentifier pour chiffrer les données sur le fonctionnement de l'StartDeploymentAPI.

AWS AppConfig accès au chiffrement

Lorsque vous créez une clé gérée par le client, appliquez la politique de clé suivante pour vous assurer que la clé peut être utilisée.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_ID:role/role_name" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" } ]

Pour chiffrer les données de configuration hébergées à l'aide d'une clé gérée par le client, l'appel d'identité CreateHostedConfigurationVersion a besoin de la déclaration de politique suivante, qui peut être attribuée à un utilisateur, à un groupe ou à un rôle :

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:GenerateDataKey, "Resource": "arn:aws:kms:Region:account_ID:key_ID" } ] }

Si vous utilisez un secret Secrets Manager ou toute autre donnée de configuration chiffrée à l'aide d'une clé gérée par le client, vous retrievalRoleArn kms:Decrypt devrez déchiffrer et récupérer les données.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:Region:account_ID:configuration source/object" } ] }

Lors de l'appel de l'opération AWS AppConfig StartDeploymentAPI, l'appel d'identité StartDeployment nécessite la politique IAM suivante, qui peut être attribuée à un utilisateur, à un groupe ou à un rôle :

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey*" ], "Resource": "arn:aws:kms:Region:account_ID:key_ID" } ] }

Lors de l'appel de l'opération AWS AppConfig GetLatestConfigurationAPI, l'appel d'identité GetLatestConfiguration nécessite la politique suivante, qui peut être attribuée à un utilisateur, à un groupe ou à un rôle :

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt, "Resource": "arn:aws:kms:Region:account_ID:key_ID" } ] }

Contexte de chiffrement

Un contexte de chiffrement est un ensemble facultatif de paires clé-valeur qui contient des informations contextuelles supplémentaires sur les données.

AWS KMS utilise le contexte de chiffrement comme données authentifiées supplémentaires pour prendre en charge le chiffrement authentifié. Lorsque vous incluez un contexte de chiffrement dans une demande de chiffrement de données, AWS KMS lie le contexte de chiffrement aux données chiffrées. Pour déchiffrer les données, vous devez inclure le même contexte de chiffrement dans la demande.

AWS AppConfig contexte de chiffrement : AWS AppConfig utilise un contexte de chiffrement dans toutes les opérations AWS KMS cryptographiques pour les données de configuration hébergées chiffrées et les déploiements. Le contexte contient une clé correspondant au type de données et une valeur identifiant l'élément de données spécifique.

Surveillance de vos clés de chiffrement pour AWS

Lorsque vous utilisez des clés gérées par un AWS KMS client avec AWS AppConfig, vous pouvez utiliser AWS CloudTrail Amazon CloudWatch Logs pour suivre les demandes AWS AppConfig envoyées à AWS KMS.

L'exemple suivant est un CloudTrail événement destiné Decrypt à surveiller les AWS KMS opérations appelées pour accéder AWS AppConfig aux données chiffrées par votre clé gérée par le client :

{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "appconfig.amazonaws.com" }, "eventTime": "2023-01-03T02:22:28z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "Region", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "encryptionContext": { "aws:appconfig:deployment:arn": "arn:aws:appconfig:Region:account_ID:application/application_ID/environment/environment_ID/deployment/deployment_ID" }, "keyId": "arn:aws:kms:Region:account_ID:key/key_ID", "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "account_ID", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:Region:account_ID:key_ID" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "account_ID", "sharedEventID": "dc129381-1d94-49bd-b522-f56a3482d088" }

Accès AWS AppConfig via un point de terminaison d'interface (AWS PrivateLink)

Vous pouvez l'utiliser AWS PrivateLink pour créer une connexion privée entre votre VPC et. AWS AppConfig Vous pouvez y accéder AWS AppConfig comme s'il se trouvait dans votre VPC, sans utiliser de passerelle Internet, de périphérique NAT, de connexion VPN ou AWS Direct Connect de connexion. Les instances de votre VPC n'ont pas besoin d'adresses IP publiques pour y accéder. AWS AppConfig

Vous établissez cette connexion privée en créant un point de terminaison d’interface optimisé par AWS PrivateLink. Nous créons une interface réseau de point de terminaison dans chaque sous-réseau que vous activez pour le point de terminaison d’interface. Il s'agit d'interfaces réseau gérées par le demandeur qui servent de point d'entrée pour le trafic destiné à AWS AppConfig.

Pour plus d’informations, consultez Accès aux Services AWS via AWS PrivateLink dans le Guide AWS PrivateLink .

Considérations relatives à AWS AppConfig

Avant de configurer un point de terminaison d'interface pour AWS AppConfig, consultez les considérations du AWS PrivateLink guide.

AWS AppConfig permet de passer des appels aux appconfigdataservices appconfiget via le point de terminaison de l'interface.

Création d'un point de terminaison d'interface pour AWS AppConfig

Vous pouvez créer un point de terminaison d'interface pour AWS AppConfig utiliser la console Amazon VPC ou le AWS Command Line Interface ()AWS CLI. Pour plus d’informations, consultez Création d’un point de terminaison d’interface dans le Guide AWS PrivateLink .

Créez un point de terminaison d'interface pour AWS AppConfig utiliser les noms de service suivants :

com.amazonaws.region.appconfig
com.amazonaws.region.appconfigdata

Si vous activez le DNS privé pour le point de terminaison de l'interface, vous pouvez envoyer des demandes d'API AWS AppConfig en utilisant son nom DNS régional par défaut. Par exemple : appconfig.us-east-1.amazonaws.com et appconfigdata.us-east-1.amazonaws.com.

Création d’une politique de point de terminaison pour votre point de terminaison d’interface

Une politique de point de terminaison est une ressource IAM que vous pouvez attacher à votre point de terminaison d’interface. La politique de point de terminaison par défaut autorise un accès complet AWS AppConfig via le point de terminaison de l'interface. Pour contrôler l'accès autorisé AWS AppConfig depuis votre VPC, associez une politique de point de terminaison personnalisée au point de terminaison de l'interface.

Une politique de point de terminaison spécifie les informations suivantes :

  • Les principaux qui peuvent effectuer des actions (Comptes AWS, utilisateurs IAM et rôles IAM).

  • Les actions qui peuvent être effectuées.

  • La ressource sur laquelle les actions peuvent être effectuées.

Pour plus d’informations, consultez Contrôle de l’accès aux services à l’aide de politiques de point de terminaison dans le Guide AWS PrivateLink .

Exemple : politique de point de terminaison VPC pour les actions AWS AppConfig

Voici un exemple de politique de point de terminaison. Lorsque vous attachez cette politique à votre point de terminaison d'interface, elle accorde l'accès aux actions AWS AppConfig répertoriées pour tous les principaux sur toutes les ressources.

{ "Statement": [ { "Principal": "*", "Effect": "Allow", "Action": [ "appconfig:CreateApplication", "appconfig:CreateEnvironment", "appconfig:CreateConfigurationProfile", "appconfig:StartDeployment", "appconfig:GetLatestConfiguration" "appconfig:StartConfigurationSession" ], "Resource":"*" } ] }

Rotation des clés de Secrets Manager

Cette section décrit les informations de sécurité importantes concernant AWS AppConfig l'intégration avec Secrets Manager. Pour plus d'informations sur Secrets Manager, consultez Qu'est-ce que c'est AWS Secrets Manager ? dans le guide de AWS Secrets Manager l'utilisateur.

Configuration de la rotation automatique des secrets Secrets Manager déployés par AWS AppConfig

La rotation est le processus de mise à jour périodique d'un secret stocké dans Secrets Manager. Lorsque vous effectuez une rotation de secret, vous mettez à jour les informations d'identification dans le secret et dans la base de données ou le service. Vous pouvez configurer la rotation automatique des secrets dans Secrets Manager en utilisant une AWS Lambda fonction de mise à jour du secret et de la base de données. Pour plus d'informations, voir Rotation AWS Secrets Manager des secrets dans le guide de AWS Secrets Manager l'utilisateur.

Pour activer la rotation des clés des secrets Secrets Manager déployés par AWS AppConfig, mettez à jour votre fonction Lambda de rotation et déployez le secret pivoté.

Note

Déployez votre profil de AWS AppConfig configuration une fois que votre secret a été modifié et entièrement mis à jour vers la nouvelle version. Vous pouvez déterminer si le secret a changé parce que le statut VersionStage passe de AWSPENDING àAWSCURRENT. La fin de la rotation secrète s'effectue dans la finish_secret fonction Modèles de rotation de Secrets Manager.

Voici un exemple de fonction qui lance un AWS AppConfig déploiement après la rotation d'un secret.

import time import boto3 client = boto3.client('appconfig') def finish_secret(service_client, arn, new_version): """Finish the rotation by marking the pending secret as current This method finishes the secret rotation by staging the secret staged AWSPENDING with the AWSCURRENT stage. Args: service_client (client): The secrets manager service client arn (string): The secret ARN or other identifier new_version (string): The new version to be associated with the secret """ # First describe the secret to get the current version metadata = service_client.describe_secret(SecretId=arn) current_version = None for version in metadata["VersionIdsToStages"]: if "AWSCURRENT" in metadata["VersionIdsToStages"][version]: if version == new_version: # The correct version is already marked as current, return logger.info("finishSecret: Version %s already marked as AWSCURRENT for %s" % (version, arn)) return current_version = version break # Finalize by staging the secret version current service_client.update_secret_version_stage(SecretId=arn, VersionStage="AWSCURRENT", MoveToVersionId=new_version, RemoveFromVersionId=current_version) # Deploy rotated secret response = client.start_deployment( ApplicationId='TestApp', EnvironmentId='TestEnvironment', DeploymentStrategyId='TestStrategy', ConfigurationProfileId='ConfigurationProfileId', ConfigurationVersion=new_version, KmsKeyIdentifier=key, Description='Deploy secret rotated at ' + str(time.time()) ) logger.info("finishSecret: Successfully set AWSCURRENT stage to version %s for secret %s." % (new_version, arn))