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