Saltar al contenido

Configuración de Cifrado de Datos

Descripción General

Vinyl utiliza el cifrado de datos para dos propósitos:

  • Protección de tokens de seguridad como cookies de sesión.
  • cifrado de columnas a nivel de aplicación

Ambos utilizan la misma tecnología de cifrado de datos subyacente. En concreto, utilizan la API de protección de datos ASP.Net. Aunque Vinyl intentará configurar la biblioteca de protección de datos automáticamente, es posible que sea necesaria una configuración adicional.

Nota

Este artículo se aplica a Vinyl 3.1 y versiones posteriores. Las características que son específicas de la versión están anotadas**. Consulte la Configuración de cifrado de datos artículo para Vinyl 3.0 y versiones anteriores.

Claves de Cifrado de Datos

Las claves de cifrado de datos (DEK) son claves de cifrado simétricas que se utilizan para proteger los datos. Vinyl admite múltiples políticas de cifrado y almacenamiento de claves configurables. Los administradores deben elegir las políticas adecuadas para su ambiente.

Almacenamiento

Vinyl admite las siguientes políticas de almacenamiento clave:

  • Sistema de archivos, ya sea local o compartido de red.
  • Base de datos (3.3)
  • Servicios web de Amazon (AWS) S3
  • Almacén de parámetros de AWS Systems Manager (3.2)

Cifrado

Dependiendo de la ubicación de almacenamiento, los administradores deberían considerar cifrar las claves. Vinyl admite las siguientes políticas de cifrado de claves:

  • Certificado
  • Servicio de administración de claves de AWS

Configuración

Las políticas de cifrado y almacenamiento de claves se configuran al inicio. La configuración se puede proporcionar utilizando el archivo appsettings.json:

{
  "DataEncryption": {
    "KeyStorage": "FileSystem",
    "KeyEncryption": "None"
  }
}

La configuración también puede ser proporcionada por variables de ambiente:

export DATAENCRYPTION__KEYSTORAGE=FileSystem
export DATAENCRYPTION__KEYENCRYPTION=None

Consulte Configuración de Vinyl al iniciar para informacion adicional.

Almacenamiento

Sistema de Archivos

De forma predeterminada, Vinyl almacenará las claves en el sistema de archivos como texto sin formato. Se almacenan en el directorio keys debajo del directorio de instalación de Vinyl.

Ajustes
Configuración Ejemplo Notas
Almacenamiento de claves FileSystem Indica que Vinyl debería almacenar claves en el sistema de archivos. Esta es la política predeterminada.
Directorio keys Identifica el directorio en el que se almacenarán las claves. El valor predeterminado es el directorio keys debajo del directorio de instalación de Vinyl. El proceso Vinyl debe tener control total de este directorio. En Windows, esto se logra otorgando permiso de usuario al grupo de aplicaciones de IIS.
Ejemplo
{
  "DataEncryption": {
     "KeyStorage": "FileSystem",
     "Directory": "keys"
  }
}

Base de Datos

Las claves se pueden almacenar en la base de datos de Vinyl. Tenga en cuenta que, dado que las claves se utilizan para cifrar datos que también se almacenan en la base de datos, las claves mismas deben cifrarse.

Ajustes
Configuración Ejemplo Notas
Almacenamiento de claves Database Indica que Vinyl debe almacenar claves en la base de datos Vinyl.
Ejemplo
{
  "DataEncryption": {
     "KeyStorage": "Database",
     "KeyEncryption": "Certificate",
     "Certificate": "...base64-encoded...",
     "CertificatePassword": "password"
  }
}

AWS S3

El almacenamiento local de la instancia EC2 no se suele utilizar para la persistencia a largo plazo. Como alternativa, Vinyl admite el almacenamiento de claves en depósitos S3.

Ajustes
Configuración Ejemplo Notas
Almacenamiento de claves S3 Indica que Vinyl debe almacenar claves en un depósito de AWS S3.
S3BucketEndpoint https://s3.amazonaws.com/vinyl-data-encryption-keys
-o-
https://vinyl-data-encryption-keys.s3.amazonaws.com/
Identifica la región de AWS y el depósito de S3 en el que se almacenarán las claves de S3. La URL debe adoptar una de las siguientes formas:
  • https://s3{-aws-region}.amazonaws.com/{bucket}
  • https://{bucket}.s3{-aws-region}.amazonaws.com
Para obtener más información, consulte el siguiente documento: https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html
S3KeyPrefix dev Opcional. Permite que múltiples ambientes almacenen claves en el mismo depósito, aislando las claves por prefijo.
Ejemplo
{
  "DataEncryption": {
     "KeyStorage": "S3",
     "S3BucketEndpoint": "https://{bucket}.s3{-aws-region}.amazonaws.com",
     "S3KeyPrefix": "production"
  }
}

Almacén de Parámetros de AWS Systems Manager

El almacenamiento local de la instancia EC2 no se suele utilizar para la persistencia a largo plazo. Como alternativa, las claves se pueden almacenar en el almacén de parámetros de AWS Systems Manager. Las claves almacenadas en Parameter Store se pueden cifrar mediante el Servicio de administración de claves (KMS).

Ajustes
Configuración Ejemplo Notas
Almacenamiento de claves ParameterStore Indica que Vinyl debe almacenar claves en el almacén de parámetros de AWS Systems Manager.
PrefijoNombreParámetro /production Aísla claves por prefijo.
KmsKeyId arn:aws:kms:us-east-1:1234567890:key/1234abcd-12ab-34cd-56ef-1234567890ab Opcional. Identifica la clave KMS que se debe utilizar para cifrar claves. El valor debe tomar la forma de un nombre de recurso de Amazon (ARN).
Ejemplo
{
  "DataEncryption": {
     "KeyStorage": "ParameterStore",
     "ParameterNamePrefix": "/production",
     "KmsKeyId": "arn:aws:kms:us-east-1:1234567890:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  }
}

Cifrado

Ninguno

De forma predeterminada, Vinyl no cifrar las claves. Sin embargo, las claves se pueden cifrar de forma transparente según la política de almacenamiento. Por ejemplo, se puede configurar un depósito S3 para cifrar todos los datos.

Ajustes
Configuración Ejemplo Notas
Cifrado de clave None Indica que las claves deben almacenarse en texto sin formato.
Ejemplo
{
  "DataEncryption": {
    "KeyStorage": "FileSystem",
    "KeyEncryption": "None"
  }
}

Certificado

Las claves se pueden cifrar mediante un certificado X.509.

Ajustes
Configuración Ejemplo Notas
Cifrado de clave Certificate Indica que las claves deben cifrarse mediante un certificado X.509. Los administradores deben proporcionar Certificado o CertificateThumbprint.
Certificado Certificado X.509. El certificado debe proporcionarse como PKCS#12 (PFX) codificado en base64 con clave privada. Requiere CertificadoContraseña.
Contraseña del certificado Contraseña del certificado X.509.
Certificado de huella digital Huella digital del certificado X.509. Vinyl intentará cargar el certificado desde el almacén de certificados Personal de la cuenta Computadora local.
Ejemplo
{
  "DataEncryption": {
     "KeyStorage": "FileSystem",
     "CertificateThumbprint": "C123B3E899807189F11F0EC4AC320760F00ECE34"
  }
}

Servicio de Administración de Claves de AWS

Vinyl se puede configurar para cifrar claves mediante AWS Key Management Service (KMS).

Ajustes
Configuración Ejemplo Notas
Cifrado de clave Kms Indica que Vinyl debe cifrar las claves con AWS KMS.
KmsKeyId arn:aws:kms:us-east-1:1234567890:key/1234abcd-12ab-34cd-56ef-1234567890ab Identifica la clave KMS que se debe utilizar para cifrar claves. El valor debe tomar la forma de un nombre de recurso de Amazon (ARN).
Ejemplo
{
  "DataEncryption": {
     "KeyStorage": "Database",
     "KeyEncryption": "Kms",
     "KmsKeyId": "arn:aws:kms:us-east-1:1234567890:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  }
}

Servicios Web de Amazon

Política de Depósito S3

Al almacenar claves de cifrado en un depósito de S3, considere usar una política de rol para otorgar acceso a la instancia EC2 al depósito.

Ejemplo
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::{bucket-name}/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "*"
        }
    ]
}

Política de Claves KMS

Al cifrar claves con KMS, considere usar una política de rol para otorgar a la instancia EC3 acceso a la clave.

Ejemplo
{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:GenerateDataKey",
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": [
      "arn:aws:kms:us-west-2:1234567890:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ]
  }
}

Tallo de Frijol Elástico

Vinyl se envía con un secuencia de comandos .ebextensions que registra automáticamente las propiedades del ambiente.

Valores Predeterminados

La configuración predeterminada de Elastic Beanstalk varía según la versión de Vinyl.

Configuración 3.2 y inferiores 3.3 y superiores
Almacenamiento de claves S3 Database
S3BucketEndpoint https://{bucket}.s3{-aws-region}.amazonaws.com
S3BucketPrefix {elastic-beanstalk-environment-name}
Cifrado de clave Kms
KmsKeyId {kms-key-arn}

Precaución

Vinyl no se iniciará con las propiedades del ambiente predeterminadas de Elastic Beanstalk. Los administradores deben cambiar el KmsKeyId o elegir una política de cifrado de clave alternativa.

Proveedores de Criptografía

Vinyl es una aplicación .NET. En .NET, las implementaciones de algoritmos criptográficos pueden ser proporcionadas por uno de los tres proveedores de criptografía.

  • Proveedor de servicios criptográficos (CSP): el proveedor de servicios criptográficos es un contenedor de la API de criptografía de Windows (CAPI). CAPI ha quedado obsoleto. Por lo tanto, este proveedor no es compatible.
  • Criptografía de próxima generación (CNG): los algoritmos implementados por el proveedor de CNG suelen ser compatibles con FIPS. Este es el proveedor de criptografía predeterminado.
  • Administrado: los algoritmos implementados por este proveedor no suelen cumplir con FIPS. Pueden ser más lentas que implementaciones equivalentes de GNC. Sin embargo, las implementaciones administradas se envían con .NET y, por lo tanto, están disponibles en todas las plataformas.

Ajustes

Configuración Ejemplo Notas
CryptoProvider Cng Determina el proveedor de cifrado. Los valores válidos incluyen:
  • Cng - Criptografía de Próxima Generación. Predeterminado.
  • Managed - Implementaciones gestionadas.

Ejemplo

{
  "DataEncryption": {
    "CryptoProvider": "Managed"
  }
}

Importar

Las claves de cifrado de datos se pueden importar al inicio. Normalmente, esto se hace para migrar claves de una ubicación de almacenamiento a otra. Las claves se descifrarán y cifrarán en el proceso.

Ajustes

Configuración Ejemplo Notas
Importar Conjunto alternativo de políticas de cifrado y almacenamiento de claves.

Ejemplo

{
  "DataEncryption": {
    "KeyStorage": "Database",
    "KeyEncryption": "Certificate",
    "Certificate": "...base64-encoded...",
    "CertificatePassword": "password",
    "Import": {
      "KeyStorage": "FileSystem",
      "Directory": "keys"
    }
  }
}