Configuração de Criptografia de Dados¶
O Vinyl usa criptografia de dados para duas finalidades:
- Proteger tokens de segurança, como cookies de sessão.
- criptografia de coluna em nível de aplicativo.
Ambos usam a mesma tecnologia subjacente de criptografia de dados. Especificamente, eles usam a API ASP.Net Data Protection. Embora o Vinyl tente configurar a biblioteca de proteção de dados automaticamente, configurações adicionais podem ser necessárias.
Nota
Este artigo se aplica ao Vinyl 3.0 e versões anteriores. Consulte Configuração de criptografia de dados artigo para Vinyl 3.1+.
Armazenamento de Chave de Criptografia de Dados¶
Chaves de criptografia de dados (DEKs) são chaves de criptografia simétricas usadas para proteger dados. Como as DEKs são usadas para criptografar dados armazenados no banco de dados, as próprias DEKs não podem ser armazenadas no banco de dados. O Vinyl oferece suporte a diversas políticas de armazenamento DEK configuráveis. Os administradores devem escolher a política de armazenamento apropriada para seu ambiente. O Vinyl oferece suporte às seguintes políticas de armazenamento:
- Sistema de arquivo
- S3
A política de armazenamento é configurada via AppSettings. Consulte Configuração .Net personalizada para obter informações adicionais sobre AppSettings.
Armazenamento do Sistema de Arquivos¶
No Vinyl 3.1+ a criptografia de dados é configurada em AppSettings.json.
Configuração | Exemplo | Notas |
---|---|---|
DataEncryptionKeyStorage | Sistema de arquivos | Indica que o Vinyl deve armazenar DEKs no sistema de arquivos. Este é o valor padrão. |
DataEncryptionKeyDirectory | C:\inetpub\wwwroot\Vinyl\App_Data\Keys | Identifica o diretório no qual os DEKs serão armazenados. O padrão é o diretório App_Data\Keys, abaixo do diretório de instalação do Vinyl. O usuário do pool de aplicativos deve ter controle total desse diretório. |
KeyEncryptionKeyCertificateThumbprint | C123B3E899807189F11F0EC4AC320760F00ECE34 | Opcional. Impressão digital X.509 da chave de criptografia (KEK). O certificado KEK deve ser registrado no armazenamento de certificados pessoais do computador local. A impressão digital pode ser encontrada observando as propriedades do certificado. |
Exemplo de Configuração de AppSettings¶
<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<add key="DataEncryptionKeyStorage" value="FileSystem" />
<add key="DataEncryptionKeyDirectory" value="C:\inetpub\wwwroot\Vinyl\App_Data\Keys" />
<add key="KeyEncryptionKeyCertificateThumbprint" value="C123B3E899807189F11F0EC4AC320760F00ECE34" />
</appSettings>
Armazenamento Amazon S3¶
Como o armazenamento local da instância do EC2 não pode ser usado para armazenamento de longo prazo, os DEKs devem ser armazenados em outro lugar. O Vinyl oferece suporte ao armazenamento de DEKs em buckets S3. As configurações a seguir configuram o armazenamento S3 DEK.
Configuração | Exemplo | Notas |
---|---|---|
DataEncryptionKeyStorage | S3 | Indica que o Vinyl deve armazenar DEKs no Amazon S3. |
DataEncryptionKeyS3BucketEndpoint | https://s3.amazonaws.com/vinyl-data-encryption-keys -ou- https://vinyl-data-encryption-keys.s3.amazonaws.com/ | Identifica a região AWS e o bucket S3 nos quais as chaves S3 serão armazenadas. A URL deve ter um dos seguintes formatos:
|
DataEncryptionKeyS3KeyPrefix | desenvolvedor | Opcional. Permite que vários ambientes armazenem DEKs no mesmo bucket, isolando as chaves por prefixo. |
Exemplo de Configuração de AppSettings.json¶
<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<add key="DataEncryptionKeyStorage" value="FileSystem" />
<add key="DataEncryptionKeyDirectory" value="C:\inetpub\wwwroot\Vinyl\App_Data\Keys" />
<add key="KeyEncryptionKeyCertificateThumbprint" value="C123B3E899807189F11F0EC4AC320760F00ECE34" />
</appSettings>
Configuração do Elastic Beanstalk¶
O Vinyl vem com um script .ebextensions que registra automaticamente as propriedades do ambiente para armazenamento S3 DEK.
Cuidado
O Vinyl não iniciará com as propriedades padrão do ambiente do Elastic Beanstalk. Você deve alterar o DataEncryptionKeyS3BucketEndpoint
e DataEncryptionKeyS3KeyPrefix
valores.
Conceder Acesso aos Ambientes do Elastic Beanstalk aos Buckets do S3¶
Armazenar chaves de acesso no servidor web é desaconselhável.
As instâncias do EC2 em um ambiente do Elastic Beanstalk são atribuídas a uma papel. Considere usar políticas de papel para conceder às instâncias do EC2 acesso a um bucket S3. O exemplo de política a seguir concede acesso a um bucket do S3.
{
"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": "*"
}
]
}
Provedores de Criptografia¶
Em .Net, as implementações de algoritmos criptográficos podem ser fornecidas por um dos três provedores de criptografia.
- Crypto Service Provider (CSP) - O Crypto Service Provider é um wrapper em torno da API de criptografia do Windows (CAPI). CAPI foi descontinuado. Este provedor, portanto, não é compatível.
- Criptografia de próxima geração (CNG) - Os algoritmos implementados pelo provedor de CNG são normalmente compatíveis com FIPS. No entanto, o CNG não é totalmente compatível com o Windows Server 2008. Este é o provedor de criptografia padrão.
- Gerenciado - Os algoritmos implementados por este provedor normalmente não são compatíveis com FIPS. Eles podem ser mais lentos que implementações equivalentes de CNG. No entanto, as implementações gerenciadas são fornecidas com o .Net Framework e, portanto, estão disponíveis em todas as plataformas.
O provedor de criptografia é configurado por meio de AppSettings.json.
Exemplo de Configuração de AppSettings¶
<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<add key="DataEncryptionCryptoProvider" value="Managed" />
</appSettings>