As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Você pode usar o console ou CQL as instruções para especificar as AWS KMS key para novas tabelas e atualizar as chaves de criptografia das tabelas existentes no Amazon Keyspaces. O tópico a seguir descreve como implementar chaves gerenciadas pelo cliente para tabelas novas e existentes.
Tópicos
- Pré-requisitos: Crie uma chave gerenciada pelo cliente usando AWS KMS e conceda permissões ao Amazon Keyspaces
- Etapa 3: Especificar uma chave gerenciada pelo cliente para uma nova tabela
- Etapa 4: Atualizar a chave de criptografia de uma tabela existente
- Etapa 5: Usar o contexto de criptografia do Amazon Keyspaces nos logs
- Etapa 6: Configurar o monitoramento com AWS CloudTrail
Pré-requisitos: Crie uma chave gerenciada pelo cliente usando AWS KMS e conceda permissões ao Amazon Keyspaces
Antes de proteger uma tabela do Amazon Keyspaces com uma chave gerenciada pelo cliente, você deve primeiro criar a chave em AWS Key Management Service (AWS KMS) e depois autorizar o Amazon Keyspaces a usar essa chave.
Etapa 1: Criar uma chave gerenciada pelo cliente do AWS KMS
Para criar uma chave gerenciada pelo cliente para ser usada para proteger uma tabela do Amazon Keyspaces, você pode seguir as etapas em Criação de KMS chaves de criptografia simétricas usando o console ou o. AWS API
Etapa 2: Autorizar o uso da chave gerenciada pelo cliente
Antes de escolher uma chave gerenciada pelo cliente para proteger uma tabela do Amazon Keyspaces, as políticas nessa chave gerenciada pelo cliente devem conceder ao Amazon Keyspaces permissão para usá-la em seu nome. Você tem controle total sobre as políticas e concessões em uma chave gerenciada pelo cliente. É possível fornecer essas permissões em uma política de chaves, em uma política do IAM ou em uma concessão.
O Amazon Keyspaces não precisa de autorização adicional para usar o padrão Chave pertencente à AWS para proteger as tabelas do Amazon Keyspaces em sua conta AWS .
Os tópicos a seguir mostram como configurar as permissões necessárias usando IAM políticas e concessões que permitem que as tabelas do Amazon Keyspaces usem uma chave gerenciada pelo cliente.
Tópicos
Política de chaves para chaves gerenciadas pelo cliente
Ao escolher uma chave gerenciada pelo cliente para proteger uma tabela do Amazon Keyspaces, o Amazon Keyspaces obtém permissão para usar a chave gerenciada pelo cliente em nome da entidade principal que faz a seleção. Essa entidade principal, um usuário ou um perfil deve ter as permissões na chave gerenciada pelo cliente exigida pelo Amazon Keyspaces.
No mínimo, o Amazon Keyspaces exige as seguintes permissões em uma chave gerenciada pelo cliente:
kms: ReEncrypt * (para kms: ReEncryptFrom e kms:ReEncryptTo)
kms: GenerateDataKey * (para kms: GenerateDataKey e kms:) GenerateDataKeyWithoutPlaintext
Exemplo de política de chaves
Por exemplo, a política de chaves de exemplo a seguir fornece somente as permissões necessárias. A política tem os seguintes efeitos:
-
Permite que o Amazon Keyspaces use a chave gerenciada pelo cliente em operações criptográficas e cria concessões, mas somente quando está atuando em nome de entidades principais na conta que tem permissão para usar o Amazon Keyspaces. Se as entidades principais especificados na instrução da política não tiverem permissão para usar o Amazon Keyspaces, a chamada falhará, mesmo se vier do serviço do Amazon Keyspaces.
-
A chave de ViaService condição kms: permite as permissões somente quando a solicitação vem do Amazon Keyspaces em nome dos diretores listados na declaração de política. Essas entidades principais não podem chamar essas operações diretamente. Observe que o valor de
kms:ViaService
,cassandra.*.amazonaws.com
, tem um asterisco (*) na posição da região. O Amazon Keyspaces exige a permissão para ser independente de qualquer coisa específica. Região da AWS -
Concede aos administradores da chave gerenciada pelo cliente (usuários que podem assumir o perfil
db-team
) acesso somente leitura à chave gerenciada pelo cliente e permissão para revogar concessões, incluindo as concessões exigidas pelo Amazon Keyspaces para proteger a tabela. -
Concede ao Amazon Keyspaces acesso somente leitura à chave gerenciada pelo cliente. Nesse caso, o Amazon Keyspaces pode chamar essas operações diretamente. Ele não precisa atuar em nome da entidade principal de uma conta.
Antes de usar um exemplo de política de chaves, substitua os diretores de exemplo pelos diretores reais do seu. Conta da AWS
{
"Id": "key-policy-cassandra",
"Version":"2012-10-17",
"Statement": [
{
"Sid" : "Allow access through Amazon Keyspaces for all principals in the account that are authorized to use Amazon Keyspaces",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::111122223333:user/db-lead
"},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey",
"kms:CreateGrant"
],
"Resource": "*",
"Condition": {
"StringLike": {
"kms:ViaService" : "cassandra.*.amazonaws.com"
}
}
},
{
"Sid": "Allow administrators to view the customer managed key and revoke grants",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/db-team
"
},
"Action": [
"kms:Describe*",
"kms:Get*",
"kms:List*",
"kms:RevokeGrant"
],
"Resource": "*"
}
]
}
Como usar concessões para autorizar o Amazon Keyspaces
Além de políticas de chaves, o Amazon Keyspaces usa concessões para definir permissões em uma chave gerenciada pelo cliente. Para visualizar as concessões em uma chave gerenciada pelo cliente na sua conta, use a operação ListGrants. O Amazon Keyspaces não precisa de concessões ou permissões adicionais para usar a Chave pertencente à AWS para proteger sua tabela.
O Amazon Keyspaces usa as permissões de concessão ao executar manutenção do sistema e tarefas de proteção de dados contínua em segundo plano. Usa também concessões para gerar chaves de tabela.
Cada concessão é específica a uma tabela. Se a conta inclui várias tabelas criptografadas na mesma chave gerenciada pelo cliente, há uma concessão de cada tipo para cada tabela. A concessão é restringida pelo contexto de criptografia do Amazon Keyspaces, que inclui o nome da tabela e Conta da AWS o ID. A concessão inclui permissão para retirar a concessão se ela não for mais necessária.
Para criar as concessões, o Amazon Keyspaces deve ter permissão para chamar CreateGrant
em nome do usuário que criou a tabela criptografada.
A política de chaves também pode permitir que a conta revogue a concessão na chave gerenciada pelo cliente. No entanto, se você revogar a concessão em uma tabela criptografada ativa, o Amazon Keyspaces não poderá proteger e manter a tabela.
Etapa 3: Especificar uma chave gerenciada pelo cliente para uma nova tabela
Siga estas etapas para especificar a chave gerenciada pelo cliente em uma nova tabela usando o console do Amazon Keyspaces ou. CQL
Crie uma tabela criptografada usando uma chave gerenciada pelo cliente (console)
-
No painel de navegação, selecione Tables (Tabelas) e Create table (Criar tabela).
-
Na página Criar tabela, na seção Detalhes da tabela, selecione um espaço de chaves e forneça um nome para a nova tabela.
-
Na seção Esquema, crie o esquema para sua tabela.
Na seção Configurações da tabela, selecione Personalizar configurações.
-
Continue com as configurações de criptografia.
Nesta etapa, você seleciona as configurações de criptografia para a tabela.
Na seção Criptografia em repouso, em Escolha uma AWS KMS key, escolha a opção Escolha uma KMS chave diferente (avançada) e, no campo de pesquisa, escolha AWS KMS key ou insira um Nome de recurso da Amazon (ARN).
nota
Se a chave selecionada não estiver acessível ou não tiver as permissões necessárias, consulte Solução de problemas de acesso à chave no Guia do AWS Key Management Service desenvolvedor.
-
Selecione Create (Criar) para criar a tabela criptografada.
Crie uma nova tabela usando uma chave gerenciada pelo cliente para criptografia em repouso (CQL)
Para criar uma nova tabela que usa uma chave gerenciada pelo cliente para criptografia em repouso, você pode usar a instrução CREATE TABLE
como no exemplo a seguir. Certifique-se de substituir a chave ARN ARN por uma chave válida com permissões concedidas ao Amazon Keyspaces.
CREATE TABLE my_keyspace.my_table
(id bigint, name text, place text STATIC, PRIMARY KEY(id, name)) WITH CUSTOM_PROPERTIES = {
'encryption_specification':{
'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY',
'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111
'
}
};
Se você receber uma Invalid Request Exception
, precisará confirmar que a chave gerenciada pelo cliente é válida e que o Amazon Keyspaces tem as permissões necessárias. Para confirmar se a chave foi configurada corretamente, consulte Solução de problemas de acesso à chave no Guia do AWS Key Management Service desenvolvedor.
Etapa 4: Atualizar a chave de criptografia de uma tabela existente
Você também pode usar o console do Amazon Keyspaces ou CQL alterar as chaves de criptografia de uma tabela existente entre uma chave gerenciada pelo cliente Chave pertencente à AWS e uma KMS chave gerenciada pelo cliente a qualquer momento.
Atualizar uma tabela existente com a nova chave gerenciada pelo cliente (console)
-
No painel de navegação, selecione Tabelas.
-
Escolha a tabela com a qual você deseja trabalhar e selecione a guia Configurações adicionais.
-
Na seção Criptografia em repouso, escolha Gerenciar criptografia para editar as configurações de criptografia da tabela.
Em Escolher uma AWS KMS key, escolha a opção Escolha uma KMS chave diferente (avançada) e, no campo de pesquisa, escolha uma AWS KMS key ou insira um Nome de recurso da Amazon (ARN).
nota
Se a chave selecionada não for válida, consulte Solução de problemas de acesso à chave no Guia do AWS Key Management Service desenvolvedor.
Como alternativa, você pode escolher um Chave pertencente à AWS para uma tabela criptografada com uma chave gerenciada pelo cliente.
-
Selecione Salvar para salvar as alterações.
Atualizar a chave de criptografia usada para uma tabela existente
Para alterar a chave de criptografia de uma tabela existente, use a instrução ALTER
TABLE
para especificar uma chave gerenciada pelo cliente para criptografia em repouso. Certifique-se de substituir a chave ARN ARN por uma chave válida com permissões concedidas ao Amazon Keyspaces.
ALTER TABLE my_keyspace.my_table
WITH CUSTOM_PROPERTIES = {
'encryption_specification':{
'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY',
'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111
'
}
};
Se você receber uma Invalid Request Exception
, precisará confirmar que a chave gerenciada pelo cliente é válida e que o Amazon Keyspaces tem as permissões necessárias. Para confirmar se a chave foi configurada corretamente, consulte Solução de problemas de acesso à chave no Guia do AWS Key Management Service desenvolvedor.
Para alterar a chave de criptografia de volta para a opção padrão de criptografia em repouso com Chaves pertencentes à AWS, você pode usar a ALTER TABLE
instrução conforme mostrado no exemplo a seguir.
ALTER TABLE my_keyspace.my_table
WITH CUSTOM_PROPERTIES = {
'encryption_specification':{
'encryption_type' : 'AWS_OWNED_KMS_KEY'
}
};
Etapa 5: Usar o contexto de criptografia do Amazon Keyspaces nos logs
Um contexto de criptografia é um conjunto de pares de chave-valor que contêm dados arbitrários não secretos. Quando você inclui um contexto de criptografia em uma solicitação para criptografar dados, vincula AWS KMS criptograficamente o contexto de criptografia aos dados criptografados. Para descriptografar os dados, você deve passar o mesmo contexto de criptografia.
O Amazon Keyspaces usa o mesmo contexto de criptografia em todas as operações AWS KMS criptográficas. Se você usar uma chave gerenciada pelo cliente para proteger a tabela do Amazon Keyspaces, é possível usar o contexto de criptografia para identificar o uso da chave gerenciada pelo cliente em logs e registros de auditoria. Ela também aparece em texto simples em registros, como em registros para e AWS CloudTrailAmazon CloudWatch Logs.
Em suas solicitações para AWS KMS, o Amazon Keyspaces usa um contexto de criptografia com três pares de chave-valor.
"encryptionContextSubset": {
"aws:cassandra:keyspaceName": "my_keyspace",
"aws:cassandra:tableName": "mytable"
"aws:cassandra:subscriberId": "111122223333"
}
-
Espaço de chaves: O primeiro par de chave-valor identifica o espaço de chaves que inclui a tabela que o Amazon Keyspaces está criptografando. A chave é
aws:cassandra:keyspaceName
. O valor é o nome do espaço de chaves."aws:cassandra:keyspaceName": "
<keyspace-name>
"Por exemplo:
"aws:cassandra:keyspaceName": "
my_keyspace
" -
Tabela: o segundo par de chave/valor identifica a tabela que o Amazon Keyspaces está criptografando. A chave é
aws:cassandra:tableName
. O valor é o nome da tabela."aws:cassandra:tableName": "
<table-name>
"Por exemplo:
"aws:cassandra:tableName": "
my_table
" -
Conta: o terceiro par de chave-valor identifica a Conta da AWS. A chave é
aws:cassandra:subscriberId
. O valor é o ID de conta."aws:cassandra:subscriberId": "
<account-id>
"Por exemplo:
"aws:cassandra:subscriberId": "111122223333"
Etapa 6: Configurar o monitoramento com AWS CloudTrail
Se você usar uma chave gerenciada pelo cliente para proteger suas tabelas do Amazon Keyspaces, poderá usar AWS CloudTrail registros para rastrear as solicitações que o Amazon Keyspaces envia em seu nome. AWS KMS
As solicitações GenerateDataKey
, DescribeKey
, Decrypt
, e CreateGrant
são discutidas nesta seção. Além disso, o Amazon Keyspaces usa uma RetireGrantoperação para remover uma concessão quando você exclui uma tabela.
- GenerateDataKey
-
O Amazon Keyspaces cria uma chave de tabela exclusiva para criptografar dados em repouso. Ele envia uma GenerateDataKeysolicitação para AWS KMS que especifique a KMS chave da tabela.
O evento que registra a operação
GenerateDataKey
é semelhante ao evento de exemplo a seguir. O usuário é a conta de serviço do Amazon Keyspaces. Os parâmetros incluem o Amazon Resource Name (ARN) da chave gerenciada pelo cliente, um especificador de chave que exige uma chave de 256 bits e o contexto de criptografia que identifica o espaço de chaves, a tabela e o. Conta da AWS{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T04:56:05Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "keySpec": "AES_256", "encryptionContext": { "aws:cassandra:keyspaceName": "my_keyspace", "aws:cassandra:tableName": "my_table", "aws:cassandra:subscriberId": "123SAMPLE012" }, "keyId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" }, "responseElements": null, "requestID": "5e8e9cb5-9194-4334-aacc-9dd7d50fe246", "eventID": "49fccab9-2448-4b97-a89d-7d5c39318d6f", "readOnly": true, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012", "sharedEventID": "84fbaaf0-9641-4e32-9147-57d2cb08792e" }
- DescribeKey
-
O Amazon Keyspaces usa uma DescribeKeyoperação para determinar se a KMS chave que você selecionou existe na conta e na região.
O evento que registra a operação
DescribeKey
é semelhante ao evento de exemplo a seguir. O usuário é a conta de serviço do Amazon Keyspaces. Os parâmetros incluem a ARN chave gerenciada pelo cliente e um especificador de chave que requer uma chave de 256 bits.{ "eventVersion": "1.08", "userIdentity": { "type": "IAMUser", "principalId": "AIDAZ3FNIIVIZZ6H7CFQG", "arn": "arn:aws:iam::123SAMPLE012:user/admin", "accountId": "123SAMPLE012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "admin", "sessionContext": { "sessionIssuer": {}, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-04-16T04:55:42Z" } }, "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T04:55:58Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "keyId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" }, "responseElements": null, "requestID": "c25a8105-050b-4f52-8358-6e872fb03a6c", "eventID": "0d96420e-707e-41b9-9118-56585a669658", "readOnly": true, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012" }
- Decrypt
-
Quando você acessa uma tabela criptografada do Amazon Keyspaces, o Amazon Keyspaces precisa descriptografar a chave da tabela para que possa descriptografar as chaves abaixo dela na hierarquia. Descriptografa os dados na tabela. Para descriptografar a chave da tabela, o Amazon Keyspaces envia uma solicitação Decrypt que especifica a AWS KMS chave da tabela. KMS
O evento que registra a operação
Decrypt
é semelhante ao evento de exemplo a seguir. O usuário é o principal usuário Conta da AWS que está acessando a tabela. Os parâmetros incluem a chave da tabela criptografada (como um blob de texto cifrado) e o contexto de criptografia que identifica a tabela e o. Conta da AWS AWS KMS deriva a ID da chave gerenciada pelo cliente do texto cifrado.{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T05:29:44Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "encryptionContext": { "aws:cassandra:keyspaceName": "my_keyspace", "aws:cassandra:tableName": "my_table", "aws:cassandra:subscriberId": "123SAMPLE012" }, "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "50e80373-83c9-4034-8226-5439e1c9b259", "eventID": "8db9788f-04a5-4ae2-90c9-15c79c411b6b", "readOnly": true, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012", "sharedEventID": "7ed99e2d-910a-4708-a4e3-0180d8dbb68e" }
- CreateGrant
-
Quando você usa uma chave gerenciada pelo cliente para proteger sua tabela do Amazon Keyspaces, o Amazon Keyspaces usa concessões para permitir que o serviço execute a proteção de dados e tarefas de manutenção e durabilidade contínuas. Essas concessões não são necessárias em Chaves pertencentes à AWS.
As concessões que o Amazon Keyspaces cria são específicas a uma tabela. A entidade principal na solicitação CreateGrant é o usuário que criou a tabela.
O evento que registra a operação
CreateGrant
é semelhante ao evento de exemplo a seguir. Os parâmetros incluem a ARN chave gerenciada pelo cliente para a tabela, o principal beneficiário e o diretor aposentado (o serviço Amazon Keyspaces) e as operações que a concessão cobre. Inclui também uma restrição que requer que todas as operações de criptografia usem o contexto de criptografia.{ "eventVersion": "1.08", "userIdentity": { "type": "IAMUser", "principalId": "AIDAZ3FNIIVIZZ6H7CFQG", "arn": "arn:aws:iam::arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111:user/admin", "accountId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "admin", "sessionContext": { "sessionIssuer": {}, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-04-16T04:55:42Z" } }, "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T05:11:10Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "keyId": "a7d328af-215e-4661-9a69-88c858909f20", "operations": [ "DescribeKey", "GenerateDataKey", "Decrypt", "Encrypt", "ReEncryptFrom", "ReEncryptTo", "RetireGrant" ], "constraints": { "encryptionContextSubset": { "aws:cassandra:keyspaceName": "my_keyspace", "aws:cassandra:tableName": "my_table", "aws:cassandra:subscriberId": "123SAMPLE012" } }, "retiringPrincipal": "cassandratest.us-east-1.amazonaws.com", "granteePrincipal": "cassandratest.us-east-1.amazonaws.com" }, "responseElements": { "grantId": "18e4235f1b07f289762a31a1886cb5efd225f069280d4f76cd83b9b9b5501013" }, "requestID": "b379a767-1f9b-48c3-b731-fb23e865e7f7", "eventID": "29ee1fd4-28f2-416f-a419-551910d20291", "readOnly": false, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012" }