Seguridad en AWS AppConfig - AWS AppConfig

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Seguridad en AWS AppConfig

La seguridad en la nube de AWS es la mayor prioridad. Como cliente de AWS, se beneficiará de una arquitectura de red y un centro de datos que están diseñados para satisfacer los requisitos de seguridad de las organizaciones más exigentes.

La seguridad es una responsabilidad compartida entre AWS y usted. El modelo de responsabilidad compartida la describe como seguridad de la nube y seguridad en la nube:

  • Seguridad de la nube: AWS es responsable de proteger la infraestructura que ejecuta servicios de AWS en la Nube de AWS. AWS también le proporciona servicios que puede utilizar de forma segura. Los auditores externos prueban y verifican periódicamente la eficacia de nuestra seguridad como parte de los Programas de conformidad de AWS . Para obtener información sobre los programas de conformidad que se aplican a AWS Systems Manager, consulte Servicios de AWS en el ámbito del programa de conformidad.

  • Seguridad en la nube: su responsabilidad viene determinada por el servicio de AWS que utilice. También es responsable de otros factores, incluida la confidencialidad de los datos, los requisitos de la empresa y la legislación y la normativa aplicables.

AWS AppConfig es una capacidad de AWS Systems Manager. Para comprender cómo aplicar el modelo de responsabilidad compartida cuando se utiliza AWS AppConfig, consulte Seguridad en AWS Systems Manager. En esa sección se describe cómo configurar Systems Manager para cumplir los objetivos de seguridad y conformidad de AWS AppConfig.

Implementación del acceso a los privilegios mínimos

Como práctica recomendada de seguridad, conceda los permisos mínimos requeridos que las identidades requieren para realizar acciones específicas en recursos específicos en condiciones específicas. AWS AppConfig El agente ofrece dos funciones que permiten al agente acceder al sistema de archivos de una instancia o contenedor: realizar copias de seguridad y escribir en disco. Si habilita estas funciones, compruebe que solo el AWS AppConfig agente tiene permisos para escribir en los archivos de configuración designados del sistema de archivos. Compruebe también que solo los procesos necesarios para leer estos archivos de configuración tengan la capacidad de hacerlo. La implementación del acceso con privilegios mínimos es esencial a la hora de reducir los riesgos de seguridad y el impacto que podrían causar los errores o los intentos malintencionados.

Para obtener más información sobre la implementación del acceso con privilegios mínimos, consulte SEC03-BP02 Conceder acceso con privilegios mínimos en la Guía del usuario. AWS Well-Architected Tool Para obtener más información sobre las funciones del AWS AppConfig agente mencionadas en esta sección, consulte. Funciones de recuperación adicionales

Cifrado de datos en reposo en AWS AppConfig

AWS AppConfig proporciona cifrado de forma predeterminada para proteger los datos en reposo de los clientes utilizando Claves propiedad de AWS.

Claves propiedad de AWS: AWS AppConfig utiliza estas claves de forma predeterminada para cifrar automáticamente los datos desplegados por el servicio y alojados en el almacén de datos de AWS AppConfig. No puede ver, administrar o usar las Claves propiedad de AWS, ni auditar su uso. Sin embargo, no tiene que realizar ninguna acción ni cambiar ningún programa para proteger las claves que cifran sus datos. Para obtener más información, consulte Claves propiedad de AWS en la Guía para desarrolladores de AWS Key Management Service.

Si bien el usuario no puede deshabilitar esta capa de cifrado ni seleccionar otro tipo de cifrado, puede especificar una clave administrada por el cliente para usarla al guardar los datos de configuración alojados en el almacén de datos de AWS AppConfig y al implementar los datos de configuración.

Claves administradas por el cliente: AWS AppConfig admite el uso de una clave simétrica administrada por el cliente que usted crea, posee y administra para añadir una segunda capa de cifrado sobre la Clave propiedad de AWS existente. Como usted tiene el control total de esta capa de cifrado, puede realizar tareas como las siguientes:

  • Establecer y mantener concesiones y políticas de claves

  • Establecer y mantener concesiones y políticas de IAM

  • Habilitar y deshabilitar políticas de claves

  • Rotar el material criptográfico

  • Agregar etiquetas.

  • Crear alias de clave

  • Programar la eliminación de claves

Para obtener más información, consulte las claves administradas por el cliente en la  Guía para desarrolladores de AWS Key Management Service.

AWS AppConfigCompatibilidad con las claves administradas por el cliente

AWS AppConfig ofrece compatibilidad con el cifrado de claves administrado por el cliente para los datos de configuración. En el caso de las versiones de la configuración guardadas en el almacén de datos alojado de AWS AppConfig, los clientes pueden establecer una KmsKeyIdentifier en el perfil de configuración correspondiente. Cada vez que se crea una nueva versión de los datos de configuración mediante la operación de API CreateHostedConfigurationVersion, AWS AppConfig genera una clave de datos de AWS KMS a partir del KmsKeyIdentifier para cifrar los datos antes de almacenarlos. Cuando se accede a los datos más adelante, ya sea durante las operaciones de API GetHostedConfigurationVersion o StartDeployment, AWS AppConfig descifra los datos de configuración utilizando la información sobre la clave de datos generada.

AWS AppConfig también ofrece compatibilidad con el cifrado de claves administrado por el cliente para los datos de configuración implementados. Para cifrar los datos de configuración, los clientes pueden proporcionar un KmsKeyIdentifier a su implementación. AWS AppConfig genera la clave de datos de AWS KMS con este KmsKeyIdentifier para cifrar los datos sobre la operación de API StartDeployment.

Acceso de cifrado de AWS AppConfig

Al crear una clave administrada por el cliente, utilice la política de claves que se indica a continuación para asegurarse de que se pueda utilizar la clave.

{ "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": "*" } ]

Para cifrar los datos de configuración alojados con una clave administrada por el cliente, la identidad que llama a CreateHostedConfigurationVersion necesita la siguiente declaración de política, que se puede asignar a un usuario, grupo o rol:

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

Si utiliza un secreto de Secrets Manager o cualquier otro dato de configuración cifrado con una clave administrada por el cliente, su retrievalRoleArn necesitará kms:Decrypt para descifrar y recuperar los datos.

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

Al llamar a la operación de la AWS AppConfig StartDeploymentAPI, la llamada de identidad StartDeployment necesita la siguiente política de IAM, que se puede asignar a un usuario, grupo o rol:

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

Al llamar a la operación de la AWS AppConfig GetLatestConfigurationAPI, la llamada de identidad GetLatestConfiguration necesita la siguiente política, que se puede asignar a un usuario, grupo o rol:

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

Contexto de cifrado

Un contexto de cifrado es un conjunto opcional de pares clave-valor que pueden contener información contextual adicional sobre los datos.

AWS KMS utiliza el contexto de cifrado como datos autenticados adicionales para admitir el cifrado autenticado. Cuando se incluye un contexto de cifrado en una solicitud para cifrar datos, AWS KMS vincula el contexto de cifrado a los datos cifrados. Para descifrar los datos, debe incluir el mismo contexto de cifrado en la solicitud.

Contexto de cifrado de AWS AppConfig: AWS AppConfig utiliza un contexto de cifrado en todas las operaciones criptográficas de AWS KMS para las implementaciones y los datos de configuración alojados cifrados. El contexto contiene una clave correspondiente al tipo de datos y un valor que identifica el elemento de datos específico.

Supervisar las claves de cifrado para AWS

Cuando utilizas claves gestionadas por el AWS KMS clienteAWS AppConfig, puedes utilizar AWS CloudTrail Amazon CloudWatch Logs para realizar un seguimiento de las solicitudes que se AWS AppConfig envían aAWS KMS.

El siguiente ejemplo es un CloudTrail evento Decrypt para monitorear AWS KMS las operaciones solicitadas para acceder AWS AppConfig a los datos cifrados por la clave administrada por el cliente:

{ "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" }

Acceso a AWS AppConfig a través de un punto de conexión de la interfaz (AWS PrivateLink)

Puede usar un AWS PrivateLink para crear una conexión privada entre la VPC y AWS AppConfig. Puede acceder a AWS AppConfig como si estuviera en su VPC, sin el uso de una puerta de enlace de Internet, un dispositivo NAT, una conexión VPN o una conexión AWS Direct Connect. Las instancias de la VPC no necesitan direcciones IP públicas para acceder a AWS AppConfig.

Esta conexión privada se establece mediante la creación de un punto de conexión de interfaz alimentado por AWS PrivateLink . Creamos una interfaz de red de punto de conexión en cada subred habilitada para el punto de conexión de interfaz. Se trata de interfaces de red administradas por el solicitante que sirven como punto de entrada para el tráfico destinado a AWS AppConfig.

Para obtener más información, consulte Acceso a Servicios de AWS a través de AWS PrivateLink en la Guía de AWS PrivateLink.

Consideraciones sobre AWS AppConfig

Antes de configurar un punto de conexión de interfaz para AWS AppConfig, consulte Consideraciones en la Guía de AWS PrivateLink.

AWS AppConfigpermite realizar llamadas a los appconfigdataservicios appconfigy a través del punto final de la interfaz.

Creación de un punto de conexión de interfaz para AWS AppConfig

Puede crear un punto de conexión de interfaz para AWS AppConfig mediante la consola de Amazon VPC o la AWS Command Line Interface (AWS CLI). Para obtener más información, consulte Creación de un punto de conexión de interfaz en la Guía de AWS PrivateLink.

Cree un punto de conexión para AWS AppConfig utilizando los siguientes nombres de servicio:

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

Si habilita DNS privado para el punto de conexión de interfaz, puede realizar solicitudes a la API para AWS AppConfig usando su nombre de DNS predeterminado para la región. Por ejemplo, appconfig.us-east-1.amazonaws.com y appconfigdata.us-east-1.amazonaws.com.

Creación de una política de puntos de conexión para el punto de conexión de interfaz

Una política de puntos de conexión es un recurso de IAM que puede adjuntar al punto de conexión de su interfaz. La política de puntos de conexión predeterminada permite acceso completo a AWS AppConfig a través del punto de conexión de interfaz. Para controlar el acceso permitido a AWS AppConfig desde la VPC, adjunte una política de puntos de conexión personalizada al punto de conexión de interfaz.

Una política de punto de conexión especifica la siguiente información:

  • Las entidades principales que pueden llevar a cabo acciones (Cuentas de AWS, usuarios de IAM y roles de IAM).

  • Las acciones que se pueden realizar.

  • El recurso en el que se pueden realizar las acciones.

Para obtener más información, consulte Control del acceso a los servicios con políticas de punto de conexión en la Guía del usuario de AWS PrivateLink.

Ejemplo: política de punto de conexión de VPC para acciones de AWS AppConfig

A continuación, se muestra un ejemplo de una política de un punto de conexión personalizada. Cuando se asocia con un punto de conexión, esta política concede acceso a las acciones de AWS AppConfig mostradas para todas las entidades principales en todos los recursos.

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

Rotación de claves de Secrets Manager

En esta sección se describe información de seguridad importante sobre la integración de AWS AppConfig con Secrets Manager. Para obtener más información acerca de Secrets Manager, consulte ¿Qué es AWS Secrets Manager? en la Guía del usuario de AWS Secrets Manager.

Configuración de la rotación automática de los secretos de Secrets Manager implementación por AWS AppConfig

La rotación es el proceso de actualización periódica de un secreto almacenado en Secrets Manager. Cuando Secrets Manager rota un secreto, se actualizan las credenciales tanto en el secreto como en la base de datos o el servicio. Puede configurar la rotación automática de secretos en Secrets Manager utilizando una función de AWS Lambda para actualizar el secreto y la base de datos. Para obtener más información, consulte Rotación de sus secretos de AWS Secrets Manager en la guía del usuario de AWS Secrets Manager.

Para habilitar la rotación de claves de los secretos de Secrets Manager implementados por AWS AppConfig, actualice la función de Lambda de rotación e implemente el secreto rotado.

nota

Implemente su perfil de configuración de AWS AppConfig una vez que su secreto se haya rotado y actualizado completamente a la nueva versión. Puede determinar si el secreto ha cambiado porque el estado VersionStage cambia de AWSPENDING a AWSCURRENT. La finalización de la rotación de secretos se produce dentro de la función finish_secret de las plantillas de rotación de Secrets Manager.

A continuación, se muestra un ejemplo de función que inicia una implementación de AWS AppConfig después de rotar un secreto.

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))