Conectar-se ao AWS KMS por meio de um endpoint da VPC - AWS Key Management Service

Conectar-se ao AWS KMS por meio de um endpoint da VPC

Você pode se conectar diretamente ao AWS KMS por meio de um endpoint privado de interface em sua nuvem privada virtual (VPC). Quando você usa um endpoint da VPC de interface, a comunicação entre sua VPC e o AWS KMS é realizada inteiramente dentro da rede da AWS.

O AWS KMS é compatível com endpoints de interface da Amazon Virtual Private Cloud (Amazon VPC) desenvolvidos pelo AWS PrivateLink. Cada endpoint da VPC é representado por uma ou mais interfaces de rede elástica (ENIs) com endereços IP privados em sua sub-redes da VPC.

O endpoint da interface VPC conecta a VPC diretamente ao AWS KMS sem um gateway da Internet, dispositivo NAT, conexão VPN ou conexão AWS Direct Connect. As instâncias na sua VPC não necessitam que endereços IP públicos se comuniquem com o AWS KMS.

Compatível Regiões da AWS

O AWS KMS oferece suporte a endpoints de VPC em todas as Regiões da AWS em que tanto a Amazon VPC quanto o AWS KMS estão disponíveis.

Considerações sobre endpoints da VPC do AWS KMS

Antes de configurar um endpoint de interface da VPC para o AWS KMS, consulte o tópico Propriedades e limitações do endpoint de interface no Guia do AWS PrivateLink.

O suporte do AWS KMS para um endpoint de VPC inclui o seguinte.

Criar um endpoint da VPC para o AWS KMS

Você pode criar um endpoint da VPC para o AWS KMS usando o console da Amazon VPC ou a API da Amazon VPC. Para mais informações, consulte Criar um endpoint de interface no Guia do usuário do AWS PrivateLink.

Para criar um endpoint da VPC para o AWS KMS, use o seguinte nome de serviço:

com.amazonaws.region.kms

Por exemplo, na Região Oeste dos EUA (Oregon) (us-west-2), o nome do serviço seria:

com.amazonaws.us-west-2.kms

Para facilitar o uso do endpoint da VPC, é possível habilitar um nome de DNS privado para seu endpoint da VPC. Se você selecionar a opção Enable DNS Name (Habilitar nome de DNS), o nome de host DNS padrão do AWS KMS (https://kms.<region>.amazonaws.com) será resolvido para seu endpoint da VPC.

Essa opção facilita usar o endpoint da VPC. Os AWS SDKs e a AWS CLI usam o nome de host DNS padrão do AWS KMS. Dessa forma, não é necessário especificar o URL do endpoint da VPC em aplicações e comandos.

Para mais informações, consulte Acessar um serviço por meio de um endpoint de interface no Guia do AWS PrivateLink.

Conectar-se a um endpoint da VPC do AWS KMS

É possível se conectar ao AWS KMS por meio do endpoint da VPC usando um AWS SDK, a AWS CLI ou o AWS Tools for PowerShell. Para especificar o endpoint da VPC, use seu nome de DNS.

Por exemplo, este comando list-keys usa o parâmetro endpoint-url para especificar o endpoint da VPC. Para usar um comando como este, substitua o exemplo de ID de endpoint da VPC na sua conta.

$ aws kms list-keys --endpoint-url https://vpce-1234abcdf5678c90a-09p7654s-us-east-1a.ec2.us-east-1.vpce.amazonaws.com

Se os nomes de host privados tiverem sido ativados ao criar o endpoint da VPC, você não precisa especificar o URL do endpoint da VPC nos comandos de CLI ou na configuração da aplicação. O nome de host AWS KMS DNS padrão (https://kms.<region>.amazonaws.com) é resolvido para o endpoint da VPC. A AWS CLI e os SDKs usam esse nome de host por padrão. Assim, você pode começar a usar o endpoint da VPC sem alterar nada em seus scripts e aplicações.

Para usar nomes de host privados, os atributosenableDnsHostnames e enableDnsSupport da sua VPC devem ser definidos como true. Para definir esses atributos, use a operação ModifyVpcAttribute. Para mais detalhes, consulte Exibir e atualizar atributos DNS para sua VPC no Guia do usuário do Amazon VPC.

Controlar o acesso a um endpoint da VPC

Para controlar o acesso ao endpoint da VPC para o AWS KMS, associe uma política de endpoint da VPC ao endpoint da VPC. A política de endpoint determina se as entidades principais podem usar o endpoint da VPC para chamar operações do AWS KMS em recursos do AWS KMS.

É possível criar uma política de endpoint da VPC ao criar seu endpoint e alterar a política de endpoint da VPC a qualquer momento. Use o console de gerenciamento da VPC ou as operações CreateVpcEndpoint ou ModifyVpcEndpoint. Você também pode criar e alterar uma política de endpoint da VPC usando um modelo do AWS CloudFormation. Para obter ajuda sobre o uso do console de gerenciamento da VPC, consulte Criar um endpoint de interface e Modificar um endpoint de interface no Guia do AWS PrivateLink.

nota

AWS KMSO é compatível com políticas de endpoint da VPC a partir de julho de 2020. Os endpoint da VPCs para AWS KMS que foram criados antes dessa data têm a política de endpoint da VPC padrão, mas você pode alterá-la a qualquer momento.

Para ajuda sobre como escrever e formatar um documento de política JSON, consulte aReferência a políticas JSON do IAM, no Manual do usuário do IAM.

Sobre políticas de endpoint da VPC

Para que uma solicitação do AWS KMS que usa um endpoint da VPC seja bem-sucedida, a entidade principal requer permissões de duas origens:

  • Uma política de chaves, uma política do IAM ou uma concessão deve conceder à entidade principal permissão para chamar a operação no recurso (chave do KMS ou alias).

  • Uma política de endpoint da VPC deve dar permissão à entidade principal para usar o endpoint para fazer a solicitação.

Por exemplo, uma política de chaves pode dar à entidade principal permissão para chamar Decrypt em uma chave do KMS específica. No entanto, a política de endpoint da VPC pode não permitir que a entidade principal chame Decrypt nessa chave do KMS usando o endpoint.

Ou uma política de endpoint da VPC pode permitir que uma entidade principal use o endpoint para chamar DisableKey em determinadas chaves do KMS. Porém, se a entidade principal não tiver essas permissões de uma política de chaves, política do IAM ou concessão, ocorrerá falha na solicitação.

Política de endpoint da VPC padrão

Cada endpoint da VPC tem uma política de endpoint da VPC, mas não é necessário especificar a política. Se você não especificar uma política, a política de endpoint padrão permitirá todas as operações por todas as entidades principais em todos os recursos sobre o endpoint.

No entanto, para recursos do AWS KMS, a entidade principal também deve ter permissão para chamar a operação a partir de uma política de chaves, uma política do IAM ou uma concessão. Portanto, na prática, a política padrão diz que se uma entidade principal tem permissão para chamar uma operação em um recurso, ela também pode chamá-la usando o endpoint.

{ "Statement": [ { "Action": "*", "Effect": "Allow", "Principal": "*", "Resource": "*" } ] }

Para permitir que entidades principais usem o endpoint da VPC apenas para um subconjunto de suas operações permitidas, crie ou atualize a política de endpoint da VPC.

Criar uma política de endpoint da VPC

Uma política de endpoint da VPC determina se uma entidade principal tem permissão para usar o endpoint da VPC para executar operações em um recurso. Para recursos do AWS KMS, a entidade principal também deve ter permissão para realizar as operações a partir de uma política de chave, uma política do IAM ou uma concessão.

Cada declaração de política de endpoint da VPC requer os seguintes elementos:

  • A entidade principal que pode executar ações

  • As ações que podem ser executadas

  • Os recursos nos quais as ações podem ser executadas

A declaração de política não especifica o endpoint da VPC. Em vez disso, ele se aplica a qualquer endpoint da VPC ao qual a política está associada. Para obter mais informações, consulte Controlar o acesso a serviços com endpoint da VPCs no Guia do usuário da Amazon VPC.

Veja a seguir uma política de endpoint da VPC demonstrativa para o AWS KMS. Quando associada a um endpoint da VPC, essa política permite que o ExampleUser use o endpoint da VPC para chamar as operações especificadas nas chaves do KMS determinadas. Antes de usar uma política como esta, substitua a entidade principal e o ARN de chave demonstrativos por valores válidos de sua conta.

{ "Statement":[ { "Sid": "AllowDecryptAndView", "Principal": {"AWS": "arn:aws:iam::111122223333:user/ExampleUser"}, "Effect":"Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:ListAliases", "kms:ListKeys" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

AWS CloudTrailA registra todas as operações que usam o endpoint da VPC. No entanto, seus logs do CloudTrail não incluem operações solicitadas por entidades principais em outras contas ou operações para chaves do KMS em outras contas.

Dessa forma, convém criar uma política de endpoint da VPC que impeça que as entidades principais em contas externas usem o endpoint da VPC para chamar qualquer operação do AWS KMS em qualquer chave na conta local.

O exemplo a seguir usa a chave de condição global AWS:PrincipalAccount para negar acesso a todas as entidades principais para todas as operações em todas as chaves do KMS, a menos que a entidade principal esteja na conta local. Antes de usar uma política como esta, substitua o ID de conta demonstrativo por um válido.

{ "Statement": [ { "Sid": "AccessForASpecificAccount", "Principal": {"AWS": "*"}, "Action": "kms:*", "Effect": "Deny", "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringNotEquals": { "aws:PrincipalAccount": "111122223333" } } } ] }

Visualizar uma política de endpoint da VPC

Para visualizar a política de endpoint da VPC para um endpoint, use o console de gerenciamento da VPC ou a operação DescribeVpcEndpoints.

O comando de AWS CLI a seguir obtém a política para o endpoint com o ID de endpoint da VPC especificado.

Antes de executar esse comando, substitua o ID de endpoint demonstrativo por um válido da sua conta.

$ aws ec2 describe-vpc-endpoints \ --query 'VpcEndpoints[?VpcEndpointId==`vpce-1234abcdf5678c90a`].[PolicyDocument]' --output text

Usar um endpoint da VPC em uma declaração de política

É possível controlar o acesso a recursos e operações do AWS KMS quando a solicitação vem da VPC ou usa um endpoint da VPC. Para fazer isso, use uma das chaves de condição global a seguir em uma política de chave ou política do IAM.

  • Use a chave de condição aws:sourceVpce para conceder ou restringir o acesso com base no endpoint da VPC.

  • Use a chave de condição aws:sourceVpc para conceder ou restringir o acesso a uma VPC que hospedar o endpoint privado.

nota

Tome cuidado ao criar políticas de chaves e políticas do IAM com base no seu endpoint da VPC. Se uma declaração de política exigir que as solicitações sejam provenientes de uma VPC ou endpoint da VPC específico, as solicitações de serviços integrados da AWS que usam o AWS KMS em seu nome poderão falhar. Para obter ajuda, consulte Usar condições do endpoint da VPC em políticas com permissões do AWS KMS.

Além disso, a chave de condição aws:sourceIP não será efetiva se a solicitação vier de um endpoint da Amazon VPC. Para restringir solicitações a um endpoint da VPC, use as chaves de condições aws:sourceVpce ou aws:sourceVpc. Para mais informações, consulte Gerenciamento de identidade e acesso para VPC endpoints e serviços de VPC endpoint no Guia do AWS PrivateLink.

Você pode usar essas chaves de condição globais para controlar o acesso a AWS KMS keys (chaves do KMS), aliases e operações como CreateKey que não dependem de nenhum recurso específico.

Por exemplo, o exemplo de política de chave a seguir permite que um usuário execute algumas operações de criptografia com uma chave do KMS somente quando a solicitação usa o endpoint da VPC especificado. Quando um usuário faz uma solicitação para AWS KMS, o ID do endpoint da VPC na solicitação está comparado com a chave-valor de condição aws:sourceVpce na política. Se não coincidirem, a solicitação será negada.

Para usar uma política como essa, substitua o ID Conta da AWS de espaço reservado e os IDs de endpoint da VPC por valores válidos para a sua conta.

{ "Id": "example-key-1", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM policies", "Effect": "Allow", "Principal": {"AWS":["111122223333"]}, "Action": ["kms:*"], "Resource": "*" }, { "Sid": "Restrict usage to my VPC endpoint", "Effect": "Deny", "Principal": "*", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1234abcdf5678c90a" } } } ] }

Você também pode usar a chave de condição aws:sourceVpc para restringir o acesso às suas chaves do KMS com base na VPC no qual o endpoint da VPC reside.

O exemplo de política de chave a seguir permite comandos que gerenciam a chave do KMS somente quando eles são provenientes do vpc-12345678. Além disso, ele permite comandos que usam a chave do KMS para operações de criptografia somente quando eles são provenientes de vpc-2b2b2b2b. Você pode usar uma política como essa se uma aplicação é executada em uma VPC, mas você usa uma segunda VPC isolada para funções de gerenciamento.

Para usar uma política como essa, substitua o ID Conta da AWS de espaço reservado e os IDs de endpoint da VPC por valores válidos para a sua conta.

{ "Id": "example-key-2", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow administrative actions from vpc-12345678", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "kms:Create*","kms:Enable*","kms:Put*","kms:Update*", "kms:Revoke*","kms:Disable*","kms:Delete*", "kms:TagResource", "kms:UntagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpc": "vpc-12345678" } } }, { "Sid": "Allow key usage from vpc-2b2b2b2b", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "kms:Encrypt","kms:Decrypt","kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpc": "vpc-2b2b2b2b" } } }, { "Sid": "Allow read actions from everywhere", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "kms:Describe*","kms:List*","kms:Get*" ], "Resource": "*", } ] }

Registrar o endpoint da VPC em log

AWS CloudTrailA registra todas as operações que usam o endpoint da VPC. Quando uma solicitação para o AWS KMS usa um endpoint da VPC, o ID do endpoint da VPC aparece na entrada de log do AWS CloudTrail que registra a solicitação. Você pode usar o ID de endpoint para auditar o uso do seu endpoint da VPC do AWS KMS.

No entanto, os logs do CloudTrail não incluem operações solicitadas por entidades principais em outras contas ou solicitações de operações do AWS KMS em chaves do KMS e aliases em outras contas. Além disso, para proteger sua VPC, as solicitações que são negadas por uma política de endpoint da VPC, mas teriam sido permitidas de outra forma, não são registradas na AWS CloudTrail.

Por exemplo, este exemplo de entrada de log registra uma solicitação GenerateDataKey que usou o endpoint da VPC. O campo vpcEndpointId aparece no final da entrada de log.

{ "eventVersion":"1.05", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::111122223333:user/Alice", "accessKeyId": "EXAMPLE_KEY_ID", "accountId": "111122223333", "userName": "Alice" }, "eventTime":"2018-01-16T05:46:57Z", "eventSource":"kms.amazonaws.com", "eventName":"GenerateDataKey", "awsRegion":"eu-west-1", "sourceIPAddress":"172.01.01.001", "userAgent":"aws-cli/1.14.23 Python/2.7.12 Linux/4.9.75-25.55.amzn1.x86_64 botocore/1.8.27", "requestParameters":{ "keyId":"1234abcd-12ab-34cd-56ef-1234567890ab", "numberOfBytes":128 }, "responseElements":null, "requestID":"a9fff0bf-fa80-11e7-a13c-afcabff2f04c", "eventID":"77274901-88bc-4e3f-9bb6-acf1c16f6a7c", "readOnly":true, "resources":[{ "ARN":"arn:aws:kms:eu-west-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId":"111122223333", "type":"AWS::KMS::Key" }], "eventType":"AwsApiCall", "recipientAccountId":"111122223333", "vpcEndpointId": "vpce-1234abcdf5678c90a" }