Configuração de Criptografia de Dados
Visão Geral
App Builder usa criptografia de dados para dois propósitos:
- Proteger tokens de segurança, como cookies de sessão
- criptografia de coluna em nível de aplicativo
Ambos usam a mesma tecnologia de criptografia de dados subjacente. Especificamente, eles usam ASP.Net Data Protection API. Embora App Builder tentará configurar a biblioteca de Proteção de Dados automaticamente, configuração adicional pode ser necessária.
Chaves de Criptografia de Dados
Chaves de Criptografia de Dados (DEKs) são chaves de criptografia simétricas usadas para proteger dados. App Builder suporta múltiplas políticas de armazenamento e criptografia de chaves configuráveis. Os administradores devem escolher as políticas apropriadas para seu ambiente.
Armazenar
App Builder suporta as seguintes políticas de armazenamento de chaves:
- Sistema de arquivos, compartilhamento local ou de rede
- Banco de dados
- Amazon Web Services (AWS) S3
- AWS Systems Manager Parameter Store
Criptografia
Dependendo do local de armazenamento, os administradores devem considerar a criptografia de chaves. App Builder suporta as seguintes políticas de criptografia principais:
- Certificado
- Serviço de gerenciamento de chaves da AWS
Configuração
As políticas de armazenamento e criptografia de chaves são configuradas na inicialização. A configuração pode ser fornecida usando o arquivo appsettings.json:
{
"DataEncryption": {
"KeyStorage": "FileSystem",
"KeyEncryption": "None"
}
}
A configuração também pode ser fornecida por variáveis de ambiente:
export DATAENCRYPTION__KEYSTORAGE=FileSystem
export DATAENCRYPTION__KEYENCRYPTION=None
Veja Configurando App Builder na inicialização para obter informações adicionais.
Armazenar
Sistema de Arquivos
Por padrão, App Builder armazenará chaves no sistema de arquivos como texto simples. Elas são armazenadas no diretório keys abaixo do App Builder diretório de instalação.
Configurações
Configuração | Exemplo | Notas |
---|---|---|
Armazenamento de Chaves | FileSystem | Indica que App Builder deve armazenar chaves no sistema de arquivos. Esta é a política padrão. |
Diretório | keys | Identifica o diretório no qual as chaves serão armazenadas. O padrão é o diretório keys abaixo do App Builder diretório de instalação. O App Builder processo deve ter controle total deste diretório. No Windows, isso é obtido concedendo ao usuário do pool de aplicativos do IIS permissão. |
Exemplo
{
"DataEncryption": {
"KeyStorage": "FileSystem",
"Directory": "keys"
}
}
Base de Dados
As chaves podem ser armazenadas no App Builder banco de dados. Observe que, como as chaves são usadas para criptografar dados que também são armazenados no banco de dados, as próprias chaves devem ser criptografadas.
Configurações
| Configuração | Exemplo | Notas |TABLEROWEND
| ...TABLEROWEND
| Armazenamento de Chaves | Database
| Indica que App Builder deve armazenar as chaves no _App Builder _ banco de dados. |
Exemplo
{
"DataEncryption": {
"KeyStorage": "Database",
"KeyEncryption": "Certificate",
"Certificate": "...base64-encoded...",
"CertificatePassword": "password"
}
}
AWS S3
O armazenamento local da instância EC2 não é normalmente usado para persistência de longo prazo. Como alternativa, App Builder suporta armazenamento de chaves em buckets S3.
Configurações
Configuração | Exemplo | Notas |
---|---|---|
Armazenamento de Chaves | S3 | Indica que App Builder deve armazenar chaves em um bucket AWS S3. |
Ponto de extremidade do S3Bucket | https://s3.amazonaws.com/vinyl-data-encryption-keys -ou- https://vinyl-data-encryption-keys.s3.amazonaws.com/ | Identifica a região da AWS e o bucket S3 no qual as chaves S3 serão armazenadas. A URL deve assumir um dos seguintes formatos:
|
_Prefixo_da_Chave_S3 | dev | Opcional. Permite que vários ambientes armazenem chaves no mesmo bucket, isolando as chaves por prefixo. |
Exemplo
{
"DataEncryption": {
"KeyStorage": "S3",
"S3BucketEndpoint": "https://{bucket}.s3{-aws-region}.amazonaws.com",
"S3KeyPrefix": "production"
}
}
Armazenamento de Parâmetros do Gerenciador de Sistemas AWS
O armazenamento local da instância EC2 normalmente não é usado para persistência de longo prazo. Como alternativa, as chaves podem ser armazenadas no AWS Systems Manager Parameter Store. As chaves armazenadas no Parameter Store podem ser criptografadas usando o Key Management Service (KMS).
Configurações
| Configuração | Exemplo | Notas |TABLEROWEND
| ...TABLEROWEND
| Armazenamento de Chaves | ParameterStore
| Indica que App Builder deve armazenar chaves no AWS Systems Manager Parameter Store. | | PrefixoNomeDoParâmetro | /production
| Isola chaves por prefixo. | | KmsKeyId | arn:aws:kms:us-east-1:1234567890:key/1234abcd-12ab-34cd-56ef-1234567890ab
| Opcional. Identifica a chave KMS que deve ser usada para criptografar chaves. O valor deve assumir a forma de um Amazon Resource Name (ARN). |
Exemplo
{
"DataEncryption": {
"KeyStorage": "ParameterStore",
"ParameterNamePrefix": "/production",
"KmsKeyId": "arn:aws:kms:us-east-1:1234567890:key/1234abcd-12ab-34cd-56ef-1234567890ab"
}
}
Criptografia
Nenhum
Por padrão, App Builder não criptografar chaves. No entanto, as chaves podem ser criptografadas de forma transparente com base na política de armazenamento. Por exemplo, um bucket S3 pode ser configurado para criptografar todos os dados.
Configurações
| Configuração | Exemplo | Notas |TABLEROWEND
| ...TABLEROWEND
| Criptografia de Chave | None
| Indica que as chaves devem ser armazenadas em texto simples. |
Exemplo
{
"DataEncryption": {
"KeyStorage": "FileSystem",
"KeyEncryption": "None"
}
}
Certificado
As chaves podem ser criptografadas usando um certificado X.509.
Configurações
| Configuração | Exemplo | Notas |TABLEROWEND
| ...TABLEROWEND
| Criptografia de Chave | Certificate
| Indica que as chaves devem ser criptografadas usando um certificado X.509. Os administradores devem fornecer Certificate ou CertificateThumbprint. | | Certificate | | Certificado X.509. O certificado deve ser fornecido como um PKCS#12 (PFX) codificado em base64 com chave privada. Requer CertificatePassword. | | CertificatePassword | | Senha do certificado X.509. | | CertificateThumbprint | | Impressão digital do certificado X.509. App Builder tentará carregar o certificado do armazenamento de certificados Pessoal da conta Computador Local. |
Exemplo
{
"DataEncryption": {
"KeyStorage": "FileSystem",
"CertificateThumbprint": "C123B3E899807189F11F0EC4AC320760F00ECE34"
}
}
Serviço de Gerenciamento de Chaves AWS
App Builder pode ser configurado para criptografar chaves usando o AWS Key Management Service (KMS).
Configurações
| Configuração | Exemplo | Notas |TABLEROWEND
| ...TABLEROWEND
| Criptografia de Chave | Kms
| Indica que App Builder deve criptografar chaves com AWS KMS. | | KmsKeyId | arn:aws:kms:us-east-1:1234567890:key/1234abcd-12ab-34cd-56ef-1234567890ab
| Identifica a chave KMS que deve ser usada para criptografar chaves. O valor deve assumir a forma de um Amazon Resource Name (ARN). |
Exemplo
{
"DataEncryption": {
"KeyStorage": "Database",
"KeyEncryption": "Kms",
"KmsKeyId": "arn:aws:kms:us-east-1:1234567890:key/1234abcd-12ab-34cd-56ef-1234567890ab"
}
}
Serviços da Web da Amazon
Política de Bucket S3
Ao armazenar chaves de criptografia em um bucket S3, considere usar uma política de papel para conceder à instância do EC2 acesso ao bucket.
Exemplo
{
"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 Chave KMS
Ao criptografar chaves com o KMS, considere usar uma política de papel para conceder à instância do EC3 acesso à chave.
Exemplo
{
"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"
]
}
}
Pé de Feijão Elástico
App Builder vem com um script .ebextensions que registra automaticamente as propriedades do ambiente.
Padrões
A configuração padrão do Elastic Beanstalk varia de acordo com a versão do App Builder.
Configuração | 3.2 e inferior | 3.3 e superior |
---|---|---|
Armazenamento de Chaves | S3 | Database |
Ponto de extremidade do S3Bucket | https://{bucket}.s3{-aws-region}.amazonaws.com | |
PrefixoS3Bucket | {elastic-beanstalk-environment-name} | |
Criptografia de Chave | Kms | |
KmsKeyId | {kms-key-arn} |
Cuidado
App Builder não iniciará com as propriedades de ambiente padrão do Elastic Beanstalk. Os administradores devem alterar o KmsKeyId ou escolher uma política de criptografia de chave alternativa.
Provedores de Criptografia
App Builder é um aplicativo .NET. No .NET, 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 Windows Cryptography API (CAPI). A CAPI foi descontinuada. Portanto, esse provedor não é suportado.
- Criptografia de Próxima Geração (CNG) - Algoritmos implementados pelo provedor CNG são tipicamente compatíveis com FIPS. Este é o provedor de criptografia padrão.
- Gerenciado - Algoritmos implementados por este provedor não são tipicamente compatíveis com FIPS. Eles podem ser mais lentos do que implementações CNG equivalentes. No entanto, implementações gerenciadas são enviadas com .NET e, portanto, estão disponíveis em todas as plataformas.
Configurações
| Configuração | Exemplo | Notas |TABLEROWEND
| ...TABLEROWEND
| CriptoProvedor | Cng
| Determina o provedor de criptografia. Os valores válidos incluem:
Cng
- Criptografia de Próxima Geração. Padrão.Managed
- Implementações gerenciadas.
Exemplo
{
"DataEncryption": {
"CryptoProvider": "Managed"
}
}
Import
Chaves de criptografia de dados podem ser importadas na inicialização. Normalmente, isso é feito para migrar chaves de um local de armazenamento para outro. As chaves serão descriptografadas e criptografadas no processo.
Configurações
Configuração | Exemplo | Notas |
---|---|---|
Importar | Conjunto alternativo de políticas de armazenamento e criptografia de chaves. |
Exemplo
{
"DataEncryption": {
"KeyStorage": "Database",
"KeyEncryption": "Certificate",
"Certificate": "...base64-encoded...",
"CertificatePassword": "password",
"Import": {
"KeyStorage": "FileSystem",
"Directory": "keys"
}
}
}