Permissões de privilégio mínimo
Como suas chaves do KMS protegem informações confidenciais, recomendamos seguir o princípio do acesso com privilégio mínimo. Delegue as permissões mínimas necessárias para executar uma tarefa ao definir as políticas de chave. Só permita todas as ações (kms:*
) em uma política de chave do KMS se planejar restringir ainda mais as permissões com políticas adicionais do IAM. Se planejar gerenciar permissões com políticas do IAM, limite quem tem a capacidade de criar e anexar políticas do IAM a entidades principais do IAM e monitore as mudanças nas políticas.
Se você permitir todas as ações (kms:*
) na política de chaves e na política do IAM, a entidade principal terá permissões administrativas e de uso para a chave do KMS. Como prática recomendada de segurança, recomendamos delegar essas permissões somente a entidades principais específicas. Você pode fazer isso nomeando explicitamente a entidade principal na política de chave ou limitando as entidades principais às quais a política do IAM está anexada. Você também pode usar chaves de condição para restringir as permissões. Por exemplo, você pode usar aws:PrincipalTag
para permitir todas as ações se a entidade principal que está fazendo a chamada de API tiver a tag especificada na regra de condição.
Para ajudar a entender como as declarações de política são avaliadas na AWS, consulte Lógica da avaliação de política no Guia do usuário do IAM. Antes de criar políticas, recomendamos revisar esse tópico para reduzir a chance de sua política ter efeitos indesejados, como fornecer acesso a entidades principais que não deveriam ter acesso.
dica
Ao testar uma aplicação em um ambiente que não seja de produção, use o IAM Access Analyzer
Se você usar usuários do IAM em vez de perfis do IAM, é altamente recomendável ativar a autenticação multifator (MFA) da AWS para mitigar a vulnerabilidade das credenciais de longo prazo. Você pode usar o MFA para:
-
Exija que os usuários validem suas credenciais com a MFA antes de realizar ações privilegiadas, como agendar a exclusão da chave.
-
Divida a propriedade de uma conta de administrador, senha e dispositivo de MFA entre indivíduos para implementar a autorização dividida.
Saiba mais
Implementação de permissões de privilégio mínimo
Ao conceder a um serviço da AWS permissão para usar uma chave do KMS, certifique-se de que a permissão seja válida somente para os recursos que o serviço deve acessar em seu nome. Essa estratégia de privilégio mínimo ajuda a impedir o uso não autorizado de uma chave do KMS quando as solicitações são passadas entre serviços da AWS.
Para implementar uma estratégia de privilégio mínimo, recomendamos usar chaves de condição de contexto de criptografia do AWS KMS e as chaves de condições de ARN de origem ou conta de origem globais.
Uso de chaves de condição de contexto de criptografia
A maneira mais eficaz de implementar permissões de privilégio mínimo ao usar recursos do AWS KMS é incluir as chaves de condições kms:EncryptionContext:context-key ou kms:EncryptionContextKeys na política que permite que as entidades principais chamem operações criptográficas do AWS KMS. Essas chaves de condição são particularmente eficazes porque associam a permissão ao contexto de criptografia que está vinculado ao texto cifrado quando o recurso é criptografado.
Use chaves de condições de contexto de criptografia somente quando a ação na declaração da política for CreateGrant ou uma operação criptográfica simétrica do AWS KMS que usa um parâmetro EncryptionContext
, como as operações como GenerateDataKey ou Decrypt. (Para ver uma lista das operações válidas, consulte kms:EncryptionContext:context-key ou kms:EncryptionContextKeys. Se você usar essas chaves de condição para permitir outras operações, como DescribeKey, a permissão será negada.
Defina o valor para o contexto de criptografia usado pelo serviço ao criptografar o recurso. Essas informações geralmente estão disponíveis no capítulo Segurança da documentação do serviço. Por exemplo, o contexto de criptografia para AWS Proton identifica o recurso do AWS Proton e seu modelo associado. O contexto de criptografia do AWS Secrets Manager identifica o segredo e sua versão. O contexto de criptografia para Amazon Location identifica o rastreador ou a coleção.
O exemplo de declaração de política de chave a seguir permite que o Amazon Location Service crie concessões em nome de usuários autorizados. Esta declaração de política limita a permissão usando as chaves de condição kms:ViaService,kms:CallerAccount e kms:EncryptionContext:context-key
para vincular a permissão a um recurso rastreador específico.
{ "Sid": "Allow Amazon Location to create grants on behalf of authorized users", "Effect": "Allow", "Principal": { "AWS": "
arn:aws:iam::111122223333:role/LocationTeam
" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "geo.us-west-2.amazonaws.com", "kms:CallerAccount": "111122223333
", "kms:EncryptionContext:aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:tracker/SAMPLE-Tracker
" } } }
Uso de chaves de condição aws:SourceArn
ou aws:SourceAccount
Quando a entidade principal em uma declaração de política chave é uma entidade principal de serviço da AWS, recomendamos usar as chaves de condição globais aws:SourceArn ou aws:SourceAccount, além da chave de condição kms:EncryptionContext:context-key
. Os valores de ARN e conta são incluídos no contexto de autorização somente quando uma solicitação chega ao AWS KMS de outro serviço da AWS. Essa combinação de condições implementa permissões de privilégio mínimo e evita um possível cenário de auxiliar confuso. As entidades principais de um serviço geralmente não são usadas como entidades principais em uma política de chaves, mas alguns serviços da AWS, como o AWS CloudTrail, exigem que isso seja feito.
Para usar as chaves de condição globais aws:SourceArn
ou aws:SourceAccount
, defina o valor como o nome do recurso da Amazon (ARN) ou a conta do recurso que está sendo criptografado. Por exemplo, em uma declaração de política de chave que concede ao AWS CloudTrail permissão para criptografar uma trilha, defina o valor de aws:SourceArn
como o ARN da trilha. Sempre que possível, use aws:SourceArn
, que é mais específico. Defina o valor como o ARN ou um padrão de ARN com caracteres curinga. Se você não conhece o ARN do recurso, use aws:SourceAccount
em vez disso.
nota
Se um ARN de recurso incluir caracteres que não sejam permitidos em uma política de chaves do AWS KMS, você não poderá usar esse ARN de recurso no valor da chave de condição aws:SourceArn
. Em vez disso, use a chave de condição aws:SourceAccount
. Para obter detalhes sobre as regras de documento de política de chaves, consulte Formato de política de chaves.
No exemplo de política de chaves a seguir, a entidade principal que obtém as permissões é a entidade principal do serviço AWS CloudTrail, cloudtrail.amazonaws.com
. Para implementar o privilégio mínimo, essa política usa as chaves de condição aws:SourceArn
e kms:EncryptionContext:context-key
. A declaração de política permite que o CloudTrail use a chave do KMS para gerar a chave de dados que ele usa para criptografar uma trilha. As condições aws:SourceArn
e kms:EncryptionContext:context-key
são avaliadas de forma independente. Qualquer solicitação para usar a chave do KMS para a operação especificada deve atender às duas condições.
Para restringir a permissão do serviço à trilha finance
na conta de exemplo (111122223333) e na região us-west-2
, esta declaração de política define a chave de condição aws:SourceArn
como o ARN de uma trilha específica. A declaração de condição usa o operador ArnEquals para garantir que cada elemento no ARN seja avaliado de forma independente durante a correspondência. O exemplo também usa a chave de condição kms:EncryptionContext:context-key
para limitar a permissão a trilhas em uma determinada conta e região.
Antes de usar essa política de chaves, substitua os valores de ID da conta, região e nome da trilha de exemplo por valores válidos da sua conta.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow CloudTrail to encrypt logs", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:cloudtrail:
us-west-2
:111122223333
:trail/finance
" ] }, "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": [ "arn:aws:cloudtrail:*:111122223333
:trail/*" ] } } } ] }