Usar condições de política com o AWS KMS
É possível especificar condições nas políticas de chave e em políticas do AWS Identity and Access Management (políticas do IAM) que controlam o acesso aos recursos do AWS KMS A declaração de política é efetiva apenas quando as condições forem verdadeiras. Por exemplo, talvez você deseje que uma declaração de política só entre em vigor após uma data específica. Ou, você pode querer que uma declaração de política controle o acesso apenas quando um valor específico existe em uma solicitação de API.
Para especificar condições, use chaves de condição no elemento Condition
de uma instrução de política com operadores de política de condição do IAM. Algumas chaves de condição geralmente se aplicam à AWS, outras são específicas do AWS KMS.
Os valores das chaves de condição devem aderir às regras de caracteres e codificação para políticas de chaves do AWS KMS e políticas do IAM. Para obter detalhes sobre as regras de documento de política de chaves, consulteFormato de política de chaves. Para obter detalhes sobre as regras de documento de política do IAM, consulte Requisitos de nome do IAM no Guia do usuário do IAM.
Tópicos
Chaves de condição globais da AWS
A AWS define chaves de condições globais, um conjunto de chaves de condições da política para todos os serviços da AWS que usam o IAM para controle de acesso. O AWS KMS oferece suporte a todas as chaves de condições globais. Você pode usá-las em políticas de chaves do AWS KMS e políticas do IAM.
Por exemplo, é possível usar a chave de condição global aws:PrincipalArn para permitir o acesso a uma AWS KMS key (chave do KMS) somente quando a entidade principal na solicitação é representada pelo Amazon Resource Name (ARN) no valor da chave de condição. Para oferecer suporte ao controle de acesso baseado em atributos (ABAC) no AWS KMS, você pode usar a chave de condição global aws:ResourceTag/tag-key em uma política do IAM para permitir acesso a chaves do KMS com uma tag específica.
Para ajudar a evitar que um serviço da AWS seja usado como um auxiliar confuso em uma política em que a entidade principal é uma entidade principal de serviço da AWS, é possível usar as chaves de condições globais aws:SourceArn ou aws:SourceAccount. Para obter mais detalhes, consulte Uso de chaves de condição aws:SourceArn ou aws:SourceAccount.
Para informações sobre chaves de condição globais da AWS, incluindo os tipos de solicitações em que elas estão disponíveis, consulte Chaves de contexto de condição globais da AWS, no Manual do usuário do IAM. Para exemplos de como usar chaves de condição globais em políticas do IAM, consulte Controlar o acesso a solicitações e Controlar chaves de etiquetas, no Manual do usuário do IAM.
Os tópicos a seguir fornecem orientações especiais para o uso de chaves de condição com base em endereços IP e endpoint da VPCs.
Tópicos
Usar a condição de endereço IP em políticas com permissões do AWS KMS
Você pode usar AWS KMS para proteger seus dados em um serviço integrado da AWS. No entanto, tome cuidado ao especificar os operadores de condição do endereço IP ou a chave de condição aws:SourceIp
na mesma instrução de política que permite ou nega o acesso ao AWS KMS. Por exemplo, a política em AWS: Nega acesso à AWS com base no IP de origem restringe as ações da AWS para solicitações do intervalo IP especificado.
Considere este cenário:
-
Anexe uma política como a mostrada em AWS: Nega acesso à AWS com base no IP de origem para um usuário do IAM. Defina o valor da
aws:SourceIp
chave de condição para o intervalo de endereços IP para a empresa do usuário. Esse usuário do IAM tem outras políticas anexadas que permitem que ele use o Amazon EBS, o Amazon EC2 e o AWS KMS. -
O usuário tenta anexar um volume do EBS criptografado a uma instância do EC2. Esta ação falha com um erro de autorização, embora o usuário tenha permissão para usar todos os serviços relevantes.
A etapa 2 falha porque a solicitação ao AWS KMS para descriptografar a chave de dados criptografada do volume vem de um endereço IP que está associado com a infraestrutura do Amazon EC2. Para que a solicitação seja bem-sucedida, ela deve ter o endereço IP do usuário de origem. Como a política na etapa 1 nega explicitamente todas as solicitações de endereços IP que não sejam aqueles especificados, o Amazon EC2 não recebe permissão para descriptografar a chave de dados criptografada do volume do EBS.
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, incluindo um endpoint da VPC do AWS KMS, use as chaves de condições aws:sourceVpce
ou aws:sourceVpc
. Para obter mais informações, consulte endpoint da VPCs – controle do uso de endpoints no Manual do usuário do Amazon VPC.
Usar condições do endpoint da VPC em políticas com permissões do AWS KMS
O AWS KMS oferece suporte a endpoints da Amazon Virtual Private Cloud (Amazon VPC) com a tecnologia do AWS PrivateLink. É possível usar as chaves de condição global a seguir em políticas de chave e políticas do IAM para controlar o acesso a recursos do AWS KMS quando a solicitação vem de uma VPC ou usa um endpoint da VPC. Para obter mais detalhes, consulte Usar um endpoint da VPC em uma declaração de política.
-
aws:SourceVpc
limita o acesso a solicitações da VPC especificado. -
aws:SourceVpce
limita o acesso a solicitações do endpoint da VPC especificado.
Se você usar essas chaves de condições para controlar o acesso a chaves do KMS, poderá negar acesso acidentalmente a serviços da AWS que usam o AWS KMS em seu nome.
Tome cuidado para evitar uma situação como o exemplo de chaves de condições de endereço IP. Se você restringir as solicitações de uma chave do KMS para uma VPC ou um endpoint da VPC, poderão ocorrer falhas nas chamadas para o AWS KMS de um serviço integrado, como Amazon S3 ou o Amazon EBS. Isso pode acontecer mesmo se a solicitação de origem for originada, em última análise, na VPC ou no endpoint da VPC.
Chaves de condição do AWS KMS
O AWS KMS fornece um conjunto de chaves de condição que você pode usar em políticas de chaves e políticas do IAM. Essas chaves de condição são específicas do AWS KMS. Por exemplo, é possível usar a chave de condição kms:EncryptionContext:context-key
para exigir um contexto de criptografia específico ao controlar o acesso a uma chave do KMS de criptografia simétrica.
Condições para uma solicitação de operação de API
Muitas das chaves de condição do AWS KMS controlam o acesso a uma chave do KMS com base no valor de um parâmetro na solicitação de uma operação do AWS KMS. Por exemplo, é possível usar a chave de condição kms:KeySpec em uma política do IAM para permitir o uso da operação CreateKey somente quando o valor do parâmetro KeySpec
na solicitação CreateKey
é RSA_4096
.
Esse tipo de condição funciona mesmo quando o parâmetro não aparece na solicitação, como quando você usa o valor padrão do parâmetro. Por exemplo, é possível usar a chave de condição kms:KeySpec para permitir que os usuários usem a operação CreateKey
somente quando o valor do parâmetro KeySpec
é SYMMETRIC_DEFAULT
, que é o valor padrão. Essa condição permite solicitações que têm o parâmetro KeySpec
com o valor SYMMETRIC_DEFAULT
e solicitações que não têm parâmetro KeySpec
.
Condições para chaves do KMS usadas em operações de API
Algumas chaves de condição do AWS KMS controlam o acesso a operações com base em uma propriedade da chave do KMS que é usada na operação. Por exemplo, é possível usar a condição kms:KeyOrigin para permitir que as entidades principais chamem GenerateDataKey em uma chave do KMS somente quando a Origin
da chave do KMS é AWS_KMS
. Para descobrir se uma chave de condição pode ser usada dessa maneira, consulte a descrição da chave de condição.
A operação deve ser uma operação de recurso de chave do KMS, ou seja, uma operação autorizada para uma chave do KMS específica. Para identificar as operações de recursos de chaves do KMS, na Tabela de ações e recursos, procure um valor de KMS key
na coluna Resources
para a operação. Se você usar esse tipo de chave de condição com uma operação não autorizada para determinado recurso da chave do KMS, como ListKeys, essa permissão não terá efeito, pois a condição nunca poderá ser atendida. Não há recursos da chave do KMS envolvidos na autorização da operação ListKeys
e nenhuma propriedade KeySpec
.
Os tópicos a seguir descrevem cada chave de condição do AWS KMS e incluem declarações de política de exemplo que demonstram a sintaxe da política.
Usar operadores de conjuntos com chaves de condição
Quando uma condição de política compara dois conjuntos de valores, como o conjunto de etiquetas em uma solicitação e o conjunto de etiquetas em uma política, você precisa informar ao AWS como comparar esses conjuntos. O IAM define dois operadores de conjunto, ForAnyValue
e ForAllValues
, para essa finalidade. Use operadores de conjunto somente com chaves de condição de vários valores, que exigem esses operadores. Não use operadores de conjuntos com chaves de condição de valor único. Como sempre, teste suas instruções de política completamente antes de usá-las em um ambiente de produção.
Chaves de condição são de valor único ou de vários valores. Para determinar se uma chave de condição do AWS KMS é de valor único ou de vários valores, consulte a coluna Value type (Tipo de valor) na descrição da chave de condição.
-
Chaves de condição de valor único têm no máximo um valor no contexto de autorização (a solicitação ou o recurso). Por exemplo, como cada chamada de API pode ser proveniente de apenas uma Conta da AWS, kms:CallerAccount é uma chave de condição de valor único. Não use um operador de conjunto com uma chave de condição de valor único.
-
Chaves de condição de vários valores têm diversos valores no contexto de autorização (a solicitação ou o recurso). Por exemplo, como cada chave do KMS pode ter vários aliases, kms:ResourceAliases pode ter vários valores. Chaves de condição de vários valores exigem um operador de conjunto.
Observe que a diferença entre chaves de condição de valor único e de vários valores depende do número de valores no contexto de autorização, e não do número de valores na condição da política.
O uso de um operador de conjunto com uma chave de condição de valor único pode criar uma instrução de política excessivamente permissiva (ou excessivamente restritiva). Use operadores de conjunto somente com chaves de condição de vários valores.
Se você criar ou atualizar uma política que inclui um operador de conjunto ForAllValues
com as chaves de condição kms:EncryptionContext:context-key ou aws:RequestTag/tag-key
, o AWS KMS retornará a seguinte mensagem de erro:
OverlyPermissiveCondition: Using the ForAllValues set operator with a
single-valued condition key matches requests without the specified [encryption context or
tag] or with an unspecified [encryption context or tag]. To fix, remove
ForAllValues.
Para obter informações detalhadas sobre os operadores de conjunto ForAnyValue
e ForAllValues
, consulte Usar várias chaves e valores, no Manual do usuário do IAM. Para obter informações sobre o risco de usar a operador de conjunto ForAllValues
com uma condição de valor único, consulte Aviso de segurança – ForAllValues com chave de valor único, no Manual do usuário do IAM.
Tópicos
- kms:BypassPolicyLockoutSafetyCheck
- kms:CallerAccount
- kms:CustomerMasterKeySpec (defasada)
- kms:CustomerMasterKeyUsage (defasado)
- kms:DataKeyPairSpec
- kms:EncryptionAlgorithm
- kms:EncryptionContext:context-key
- kms:EncryptionContextKeys
- kms:ExpirationModel
- kms:GrantConstraintType
- kms:GrantIsForAWSResource
- kms:GrantOperations
- kms:GranteePrincipal
- kms:KeyOrigin
- kms:KeySpec
- kms:KeyUsage
- kms:MacAlgorithm
- kms:MessageType
- kms:MultiRegion
- kms:MultiRegionKeyType
- kms:PrimaryRegion
- kms:ReEncryptOnSameKey
- kms:RequestAlias
- kms:ResourceAliases
- kms:ReplicaRegion
- kms:RetiringPrincipal
- kms:SigningAlgorithm
- kms:ValidTo
- kms:ViaService
- kms:WrappingAlgorithm
- kms:WrappingKeySpec
kms:BypassPolicyLockoutSafetyCheck
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
Booliano |
Valor único |
|
Somente políticas do IAM Políticas de chaves e políticas do IAM |
A kms:BypassPolicyLockoutSafetyCheck
chave de condição controla o acesso às operações CreateKey e PutKeyPolicy com base no valor do parâmetro BypassPolicyLockoutSafetyCheck
na solicitação.
A instrução de política do IAM de exemplo a seguir impede que os usuários ignorem a verificação de segurança de bloqueio da política ao negar a eles a permissão para criar chaves do KMS quando o valor do parâmetro BypassPolicyLockoutSafetyCheck
na solicitação CreateKey
é true.
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "Bool": { "kms:BypassPolicyLockoutSafetyCheck": true } } } }
Você também pode usar a chave de condição kms:BypassPolicyLockoutSafetyCheck
em uma política do IAM ou política de chaves para controlar o acesso à operação PutKeyPolicy
. A declaração de política de exemplo a seguir de uma política de chaves impede que os usuários ignorem a verificação de segurança de bloqueio da política ao alterar a política de uma chave do KMS.
Em vez de usar Deny
de forma explícita, esta declaração de política usa Allow
com o operador de condição nula para permitir o acesso somente quando a solicitação não inclui o parâmetro BypassPolicyLockoutSafetyCheck
. Quando o parâmetro não for usado, o valor padrão será false
. Essa instrução de política um pouco mais fraca pode ser substituída no caso raro em que uma derivação é necessária.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "kms:PutKeyPolicy", "Resource": "*", "Condition": { "Null": { "kms:BypassPolicyLockoutSafetyCheck": true } } } }
Consulte também
kms:CallerAccount
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
Operações de recursos de chaves do KMS Operações do armazenamento de chaves personalizado |
Políticas de chaves e políticas do IAM |
Você pode usar essa chave de condição para permitir ou negar o acesso a todas as identidades (usuários e funções do IAM) em uma Conta da AWS. Em políticas de chaves, você pode usar o elemento Principal
para especificar as identidades às quais a declaração de política se aplica. A sintaxe do elemento Principal
não fornece uma forma de especificar todas as identidades em uma Conta da AWS. Mas você pode obter esse efeito ao combinar essa chave de condição com um elemento Principal
que especifica todas as identidades do AWS.
Você pode usá-lo para controlar acesso a qualquer operação de recurso de chave do KMS, ou seja, qualquer operação do AWS KMS que usa uma chave do KMS específica. Para identificar as operações de recursos de chaves do KMS, na Tabela de ações e recursos, procure um valor de KMS key
na coluna Resources
para a operação. Ele também é válido para operações que gerenciam armazenamentos de chaves personalizados.
Por exemplo, a instrução de política de chaves a seguir demonstra como usar a chave de condição kms:CallerAccount
. Essa instrução de política está na política de chaves da Chave gerenciada pela AWS para o Amazon EBS. Ela combina um elemento Principal
que especifica todas as identidades da AWS com a chave de condição kms:CallerAccount
para permitir efetivamente o acesso a todas as identidades na Conta da AWS 111122223333. Ela contém uma chave de condição do AWS KMS adicional (kms:ViaService
) para limitar ainda mais as permissões, ao autorizar somente as solicitações que chegam por meio do Amazon EBS. Para mais informações, consulte kms:ViaService.
{ "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS", "Effect": "Allow", "Principal": {"AWS": "*"}, "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333", "kms:ViaService": "ec2.us-west-2.amazonaws.com" } }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*" }
kms:CustomerMasterKeySpec (defasada)
A chave de condição kms:CustomerMasterKeySpec
está defasada. Em vez disso, use a chave de condição kms:KeySpec.
As chaves de condição kms:CustomerMasterKeySpec
e kms:KeySpec
funcionam da mesma forma. Apenas os nomes são diferentes. Recomendamos usar o kms:KeySpec
. No entanto, para evitar a alterações extremas, o AWS KMS oferece suporte a ambas as chaves de condição.
kms:CustomerMasterKeyUsage (defasado)
A chave de condição kms:CustomerMasterKeyUsage
está obsoleta. Em vez disso, use a chave de condição kms:KeyUsage.
As chaves de condição kms:CustomerMasterKeyUsage
e kms:KeyUsage
funcionam da mesma forma. Apenas os nomes são diferentes. Recomendamos usar o kms:KeyUsage
. No entanto, para evitar a alterações extremas, o AWS KMS oferece suporte a ambas as chaves de condição.
kms:DataKeyPairSpec
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
É possível usar essa chave de condição para controlar o acesso às operações GenerateDataKeyPair e GenerateDataKeyPairWithoutPlaintext com base no valor do parâmetro KeyPairSpec
na solicitação. Por exemplo, é possível permitir que um usuário gere somente tipos de pares de chaves de dados específicos.
O exemplo de instrução de política de chaves a seguir usa a chave de condição kms:DataKeyPairSpec
para permitir que um usuário use a chave do KMS para gerar somente pares de chaves de dados RSA.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:GenerateDataKeyPair", "kms:GenerateDataKeyPairWithoutPlaintext" ], "Resource": "*", "Condition": { "StringLike": { "kms:DataKeyPairSpec": "RSA*" } } }
Consulte também
kms:EncryptionAlgorithm
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
É possível usar a chave de condição kms:EncryptionAlgorithm
para controlar o acesso às operações de criptografia com base no algoritmo de criptografia usado na operação. Para as operações Encrypt, Decrypt e ReEncrypt, ela controla o acesso com base no valor do parâmetro EncryptionAlgorithm na solicitação. Para operações que geram chaves de dados e pares de chaves de dados, ela controla o acesso com base no algoritmo de criptografia que é usado para criptografar a chave de dados.
Essa chave de condição não tem efeito em operações realizadas fora do AWS KMS, como criptografar com a chave pública em um par de chaves do KMS assimétricas fora do AWS KMS.
Parâmetro EncryptionAlgorithm em uma solicitação
Para permitir que os usuários usem apenas um algoritmo de criptografia específico com uma chave do KMS, use uma instrução de política com um efeito Deny
e um operador de condição StringNotEquals
. Por exemplo, o seguinte exemplo de instrução de política de chaves proíbe que as entidades principais capazes de assumir a função ExampleRole
usem essa chave do KMS nas operações de criptografia especificadas, a menos que o algoritmo de criptografia na solicitação seja RSAES_OAEP_SHA_256
, um algoritmo criptográfico assimétrico usado em chaves RSA do KMS.
Diferente de uma instrução de política que permite que um usuário utilize um algoritmo de criptografia específico, uma instrução de política com um duplo negativo como essa evita que outras políticas e concessões da chave do KMS permitam que essa função use outros algoritmos de criptografia. O Deny
nessa instrução de política de chaves tem precedência sobre qualquer política de chaves ou política do IAM com um efeito Allow
e tem precedência sobre todas as concessões dessa chave do KMS e suas entidades principais.
{ "Sid": "Allow only one encryption algorithm with this asymmetric KMS key", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "*", "Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "RSAES_OAEP_SHA_256" } } }
Algoritmo de criptografia usado para a operação
Você também pode usar a chave de condição kms:EncryptionAlgorithm
para controlar o acesso às operações com base no algoritmo de criptografia utilizado na operação, mesmo quando esse algoritmo não está especificado na solicitação. Isso permite exigir ou proibir o algoritmo SYMMETRIC_DEFAULT
, que pode não ser especificado em uma solicitação por ser o valor padrão.
Também é possível usar a chave de condição kms:EncryptionAlgorithm
para controlar o acesso às operações que geram chaves de dados e pares de chaves de dados. Essas operações só usam chaves do KMS de criptografia simétrica e o algoritmo SYMMETRIC_DEFAULT
.
Por exemplo, essa política do IAM limita seus principais à criptografia simétrica. Ela nega o acesso a qualquer chave do KMS na conta de exemplo para operações de criptografia, a menos que o algoritmo de criptografia especificado na solicitação ou usado na operação seja SYMMETRIC_DEFAULT. Incluir GenerateDataKey*
adiciona GenerateDataKey, GenerateDataKeyWithoutPlaintext, GenerateDataKeyPair e GenerateDataKeyPairWithoutPlaintext às permissões. A condição não tem efeito nessas operações porque elas sempre utilizam um algoritmo de criptografia simétrica.
{ "Sid": "AllowOnlySymmetricAlgorithm", "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "SYMMETRIC_DEFAULT" } } }
Consulte também
kms:EncryptionContext:context-key
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
É possível usar a chave de condição kms:EncryptionContext:context-key
para controlar o acesso a uma chave do KMS de criptografia simétrica com base no contexto de criptografia em uma solicitação de uma operação criptográfica. Use essa chave de condição para avaliar a chave e o valor no par de contexto de criptografia. Para avaliar somente as chaves de contexto de criptografia ou exigir um contexto de criptografia independentemente das chaves ou valores, use a chave de condição kms:EncryptionContextKeys.
Essa chave de condição é válida em declarações de políticas de chaves e declarações de políticas do IAM, mesmo que não apareça no console do IAM ou na Referência de autorização de serviço do IAM.
Os valores das chaves de condição devem estar em conformidade com as regras de caracteres para políticas de chaves e políticas do IAM. Alguns caracteres que são válidos em um contexto de criptografia não são válidos em políticas. Talvez você não consiga usar essa chave de condição para expressar todos os valores válidos de contexto de criptografia. Para obter detalhes sobre as regras de documento de política de chaves, consulteFormato de política de chaves. Para obter detalhes sobre as regras de documento de política do IAM, consulte Requisitos de nome do IAM no Guia do usuário do IAM.
Não é possível especificar um contexto de criptografia em uma operação criptográfica com uma chave do KMS assimétrica ou uma chave do KMS de Hash-based message authentication code (HMAC – Código de autenticação de mensagem por hash). Algoritmos assimétricos e algoritmos de Message authentication code (MAC – Código de autenticação de mensagem) não são compatíveis com um contexto de criptografia.
Para usar a chave de condição kms:EncryptionContext:context-key, substitua o espaço reservado context-key
pela chave de contexto de criptografia. Substitua o espaço reservado context-value
pelo valor de contexto de criptografia.
"kms:EncryptionContext:
context-key
": "context-value
"
Por exemplo, a seguinte chave de condição especifica um contexto de criptografia no qual a chave é AppName
e o valor é ExampleApp
(AppName =
ExampleApp
).
"kms:EncryptionContext:AppName": "ExampleApp"
Esta é uma chave de condição de valor único. A chave na chave de condição especifica uma chave de contexto de criptografia específica (context-key). Embora seja possível incluir vários pares de contexto de criptografia em cada solicitação de API, o par de contexto de criptografia com a context-key especificada pode ter somente um valor. Por exemplo, a chave de condição kms:EncryptionContext:Department
aplica-se somente a pares de contexto de criptografia com uma chave Department
, e qualquer par de contexto de criptografia com a chave Department
pode ter somente um valor.
Não use um operador de conjunto com a chave de condição kms:EncryptionContext:context-key
. Se você criar uma instrução de política com uma ação Allow
, a chave de condição kms:EncryptionContext:context-key
e o operador de conjunto ForAllValues
, a condição permitirá solicitações sem contexto de criptografia e solicitações com pares de contexto de criptografia que não estão especificados na condição de política.
Não use um operador de conjunto ForAnyValue
ou ForAllValues
com essa chave de condição de valor único. Esses operadores de conjunto podem criar uma condição de política que não requer valores que você pretende exigir e permite valores que você pretende proibir.
Se você criar ou atualizar uma política que inclua um operador de conjunto ForAllValues
com kms:EncryptionContext:context-key, o AWS KMS retornará a seguinte mensagem de erro:
OverlyPermissiveCondition:EncryptionContext: Using the
ForAllValues
set operator with a single-valued condition key matches requests without the specified
encryption context or with an unspecified encryption context. To fix, remove
ForAllValues.
Para exigir um par de contexto de criptografia específico, use a chave de condição kms:EncryptionContext:context-key
com o operador StringEquals
.
A seguinte instrução de política de chaves de exemplo permite que as entidades principais que podem assumir a função usem a chave do KMS em uma solicitação GenerateDataKey
apenas quando o contexto de criptografia nessa solicitação inclui o par AppName:ExampleApp
. Outros pares de contexto de criptografia são permitidos.
O nome da chave não é sensível a maiúsculas e minúsculas. A diferenciação de maiúsculas e minúsculas do valor é determinada pelo operador de condição, como StringEquals
. Para obter mais detalhes, consulte Diferenciação de letras maiúsculas e minúsculas da condição de contexto de criptografia.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }
Para exigir um par de contexto de criptografia e proibir todos os outros pares de contexto de criptografia, use kms:EncryptionContext:context-key e kms:EncryptionContextKeys ao mesmo tempo na instrução de política. A instrução de política de exemplo a seguir usa a condição kms:EncryptionContext:AppName
para exigir o par de contextos de criptografia AppName=ExampleApp
na solicitação. Ela também usa uma chave de condição kms:EncryptionContextKeys
com o operador de conjunto ForAllValues
para permitir apenas a chave de contexto de criptografia AppName
.
O operador de conjunto ForAllValues
limita as chaves de contexto de criptografia na solicitação para AppName
. Se a condição kms:EncryptionContextKeys
com o operador de conjunto ForAllValues
tivesse sido usada sozinha em uma instrução de política, esse operador de conjunto permitiria solicitações sem contexto de criptografia. No entanto, se a solicitação não tivesse um contexto de criptografia, a condição kms:EncryptionContext:AppName
falharia. Para detalhes sobre o operador de conjunto ForAllValues
, consulteUsar várias chaves e valores, no Manual do usuário do IAM.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::712816755609:user/alice" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" }, "ForAllValues:StringEquals": { "kms:EncryptionContextKeys": [ "AppName" ] } } }
Também é possível usar essa chave de condição para negar acesso a uma chave do KMS para uma operação específica. O exemplo a seguir de instrução de política de chaves usa um efeito Deny
para proibir a entidade principal de usar a chave do KMS quando o contexto de criptografia na solicitação inclui um par de contextos de criptografia Stage=Restricted
. Essa condição permite uma solicitação com outros pares de contextos de criptografia, incluindo pares de contextos de criptografia com a chave Stage
e outros valores, como Stage=Test
.
{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Stage": "Restricted" } } }
Usar vários pares de contextos de criptografia
Você pode exigir ou proibir vários pares de contextos de criptografia. Também pode exigir um dos vários pares de contextos de criptografia. Para obter detalhes sobre a lógica usada para interpretar essas condições, consulte Criar uma condição com várias chaves ou valores, no Manual do usuário do IAM.
Versões anteriores deste tópico exibiam instruções de política que usavam os operadores de conjunto ForAnyValue
e ForAllValues
com a chave de condição kms:EncryptionContext:context-key. Usar um operador de conjunto com uma chave de condição de valor único pode resultar em políticas que permitem solicitações sem contexto de criptografia e pares de contextos de criptografia não especificados.
Por exemplo, uma condição de política com o efeito Allow
, o operador de conjunto ForAllValues
e a chave de condição "kms:EncryptionContext:Department": "IT"
não limita o contexto de criptografia ao par "Department=IT". Ele permite solicitações sem contexto de criptografia e solicitações com pares de contextos de criptografia não especificados, como Stage=Restricted
.
Reveja suas políticas e remova o operador de conjunto de qualquer condição com kms:EncryptionContext:context-key. Tentativas de criar ou atualizar uma política com esse formato falham com uma exceção OverlyPermissiveCondition
. Para resolver o erro, exclua o operador de conjunto.
Para exigir vários pares de contextos de criptografia, liste esses pares na mesma condição. A seguinte instrução de política de chaves de exemplo requer dois pares de contextos de criptografia: Department=IT
e Project=Alpha
. Como as condições têm chaves diferentes (kms:EncryptionContext:Department
e kms:EncryptionContext:Project
), elas são implicitamente conectadas por um operador AND. Outros pares de contextos de criptografia são permitidos, mas não são necessários.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Department": "IT", "kms:EncryptionContext:Project": "Alpha" } } }
Para exigir um par de contextos de criptografia OU outro par, coloque cada chave de condição em uma instrução de política separada. O exemplo a seguir de política de chaves requer pares Department=IT
ou Project=Alpha
, ou ambos. Outros pares de contextos de criptografia são permitidos, mas não são necessários.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Department": "IT" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Project": "Alpha" } } }
Para exigir pares de criptografia específicos e excluir todos os outros pares de contexto de criptografia, use context-key and kms:EncryptionContextKeys ao mesmo tempo na instrução de política. A instrução de política de chaves a seguir usa a condição kms:EncryptionContext:context-key para exigir um contexto de criptografia com ambos os pares Department=IT
e Project=Alpha
. Ela usa uma chave de condição kms:EncryptionContextKeys
com o operador de conjunto ForAllValues
para permitir apenas as chaves de contexto de criptografia Department
e Project
.
O operador de conjunto ForAllValues
limita as chaves de contexto de criptografia na solicitação para Department
e Project
. Se ele fosse usado sozinho em uma condição, esse operador de conjunto permitiria solicitações sem contexto de criptografia, mas, nesta configuração, kms:EncryptionContext:context-key nessa condição falharia.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::712816755609:user/alice" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Department": "IT", "kms:EncryptionContext:Project": "Alpha" }, "ForAllValues:StringEquals": { "kms:EncryptionContextKeys": [ "Department", "Project" ] } } }
Você também pode proibir vários pares de contexto de criptografia. O seguinte exemplo de instrução de política de chaves usa um efeito Deny
para proibir a entidade principal de usar as chaves do KMS se o contexto de criptografia na solicitação incluir um par Stage=Restricted
ou Stage=Production
.
Vários valores (Restricted
e Production
) para a mesma chave (kms:EncryptionContext:Stage
) são implicitamente conectados por OR. Para obter mais detalhes, consulte Lógica de avaliação para condições com várias chaves ou valores, no Manual do usuário do IAM.
{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Stage": [ "Restricted", "Production" ] } } }
Diferenciação de letras maiúsculas e minúsculas da condição de contexto de criptografia
O contexto de criptografia especificado em uma operação de criptografia deve ser uma correspondência exata, que diferencia maiúsculas de minúsculas para o contexto de criptografia especificado na operação de criptografia. Somente a ordem dos pares em um contexto de criptografia com vários pares pode variar.
No entanto, em condições de política, a chave de condição não diferencia maiúsculas de minúsculas. A diferenciação de maiúsculas e minúsculas do valor da condição é determinada pelo operador de condição de política que você usa, como StringEquals
ou StringEqualsIgnoreCase
.
Dessa forma, a chave de condição, que consiste do prefixo kms:EncryptionContext:
e da substituição
, não diferencia maiúsculas de minúsculas. Uma política que usa essa condição não verifica a capitalização dos elementos da chave de condição. A diferenciação de maiúsculas e minúsculas do valor, ou seja, a substituição context-key
, é determinada pelo operador de condição de política.context-value
Por exemplo, a declaração de política a seguir permite a operação quando o contexto de criptografia inclui uma chave Appname
, independentemente da sua capitalização. A condição StringEquals
exige que ExampleApp
seja capitalizado da maneira como foi especificado.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:Appname": "ExampleApp" } } }
Para exigir uma chave de contexto de criptografia com distinção entre letras maiúsculas e minúsculas, use a política de condição kms: EncryptionContextKeys com um operador de condição que diferencia maiúsculas de minúsculas, como StringEquals
. Nesta condição de política, como a chave de contexto de criptografia é o valor da condição de política, o recurso é determinado pelo operador da condição.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" } } }
Para solicitar uma avaliação com distinção entre letras maiúsculas e minúsculas da chave e do valor do contexto de criptografia, use as condições de política kms:EncryptionContextKeys
and kms:EncryptionContext:context-key juntas na mesma instrução de política. O operador de condição sensível a maiúsculas e minúsculas (comoStringEquals
) sempre aplica-se ao valor da condição. A chave de contexto de criptografia (como AppName
) é o valor da condição kms:EncryptionContextKeys
. O valor do contexto de criptografia (como ExampleApp
) é o valor da condição kms:EncryptionContext:context-key.
Por exemplo, na instrução de política de chaves a seguir, como o operador StringEquals
diferencia maiúsculas de minúsculas, a chave de contexto de criptografia e o valor de contexto de criptografia diferenciam maiúsculas de minúsculas.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" }, "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }
Usar variáveis em uma condição de contexto de criptografia
A chave e o valor em um par de contexto de criptografia devem ser strings literais simples. Não podem ser números inteiros, objetos, ou qualquer tipo que não esteja totalmente resolvido. Se você usar um tipo diferente, como um inteiro ou flutuante, o AWS KMS o interpretará como uma string literal.
"encryptionContext": { "department": "10103.0" }
No entanto, o valor da chave de condição kms:EncryptionContext:context-key
pode ser uma variável de política do IAM. Essas variáveis de política são resolvidas em tempo de execução com base nos valores da solicitação. Por exemplo, o aws:CurrentTime
é resolvido como a hora da solicitação e aws:username
é resolvido como o nome amigável do chamador.
É possível usar essas variáveis de política para criar uma declaração de política com uma condição que requer informações muito específicas em um contexto de criptografia, como o nome de usuário do chamador. Como contém uma variável, é possível usar a mesma declaração de política para todos os usuários que podem assumir a função. Não é necessário escrever uma declaração de política diferente para cada usuário.
Considere uma situação em que você deseja que todos os usuários que podem assumir uma função usem a mesma chave do KMS para criptografar e descriptografar seus dados. No entanto, você deseja permitir que eles descriptografem somente os dados que criptografaram. Comece exigindo que cada solicitação para o AWS KMS inclua um contexto de criptografia em que a chave é user
e o valor é o nome de usuário da AWS do chamador, como o seguinte.
"encryptionContext": { "user": "bob" }
Para impor esse requisito, é possível usar uma declaração de política como a do exemplo a seguir. Essa instrução de política concede à função TestTeam
permissão para criptografar e descriptografar dados com a chave do KMS. No entanto, a permissão será válida somente quando o contexto de criptografia na solicitação incluir um par "user":
"
. Para representar o nome do usuário, a condição usa a variável de política <username>
"aws:username
.
Quando a solicitação for avaliada, o nome de usuário do chamador substituirá a variável na condição. Dessa forma, a condição requer um contexto de criptografia de "user":
"bob"
para "bob" e "user": "alice"
para "alice".
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:user": "${aws:username}" } } }
É possível usar uma variável de política do IAM somente no valor do par de chaves da condição kms:EncryptionContext:context-key
. Não é possível usar uma variável na chave.
Também não é possível usar chaves de contexto específicas do provedor em variáveis. Essas chaves de contexto identificam exclusivamente os usuários que fizeram login na AWS usando a federação de identidades na web.
Como todas as variáveis, essas variáveis podem ser usadas apenas na condição de política kms:EncryptionContext:context-key
, não no contexto de criptografia real. E elas podem ser usadas apenas no valor da condição, não na chave.
Por exemplo, a declaração de política de chaves a seguir é semelhante à anterior. No entanto, a condição requer um contexto de criptografia em que a chave é sub
e o valor identifica exclusivamente um usuário conectado a um grupo de usuários do Amazon Cognito. Para obter detalhes sobre como identificar usuários e funções no Amazon Cognito, consulte Funções do IAM, no Guia do desenvolvedor do Amazon Cognito.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:sub": "${cognito-identity.amazonaws.com:sub}" } } }
Consulte também
kms:EncryptionContextKeys
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String (lista) |
Vários valores |
|
Políticas de chaves e políticas do IAM |
É possível usar a chave de condição kms:EncryptionContextKeys
para controlar o acesso a uma chave do KMS de criptografia simétrica com base no contexto de criptografia em uma solicitação de uma operação criptográfica. Use essa chave de condição para avaliar apenas a chave em cada par de contexto de criptografia. Para avaliar tanto a chave quanto o valor no contexto de criptografia, use a chave de condição kms:EncryptionContext:context-key
.
Não é possível especificar um contexto de criptografia em uma operação criptográfica com uma chave do KMS assimétrica ou uma chave do KMS de Hash-based message authentication code (HMAC – Código de autenticação de mensagem por hash). Algoritmos assimétricos e algoritmos de MAC não são compatíveis com um contexto de criptografia.
Os valores da chave de condição, incluindo uma chave de contexto de criptografia, devem estar em conformidade com as regras de caracteres e codificação para políticas de chaves do AWS KMS. Talvez você não consiga usar essa chave de condição para expressar todas as chaves válidas de contexto de criptografia. Para obter detalhes sobre as regras de documento de política de chaves, consulteFormato de política de chaves. Para obter detalhes sobre as regras de documento de política do IAM, consulte Requisitos de nome do IAM no Guia do usuário do IAM.
Esta é uma chave de condição de vários valores. Você pode especificar vários pares de contexto de criptografia em cada solicitação de API. kms:EncryptionContextKeys
compara as chaves de contexto de criptografia na solicitação com o conjunto de chaves de contexto de criptografia na política. Para determinar como esses conjuntos são comparados, você deve fornecer um operador de conjunto ForAnyValue
ou ForAllValues
na condição de política. Para detalhes sobre os operadores de conjunto, consulteUsar várias chaves e valores, no Manual do usuário do IAM.
-
ForAnyValue
: pelo menos uma chave de contexto de criptografia na solicitação deve corresponder a uma chave de contexto de criptografia na condição da política. Outras chaves de contexto de criptografia são permitidas. Se a solicitação não tiver um contexto de criptografia, a condição não será atendida. -
ForAllValues
: cada chave de contexto de criptografia na solicitação deve corresponder a uma chave de contexto de criptografia na condição da política. Esse operador de conjunto limita as chaves de contexto de criptografia àquelas na condição de política. Ele não requer uma chave de contexto de criptografia, mas proíbe chaves de contexto de criptografia não especificadas.
O exemplo a seguir de instrução de política de chaves usa a chave de condição kms:EncryptionContextKeys
com o operador de conjunto ForAnyValue
. Essa instrução de política permite o uso de uma chave do KMS para as operações especificadas, mas somente quando pelo menos um dos pares de contextos de criptografia na solicitação inclui a chave AppName
, independentemente do seu valor.
Por exemplo, essa instrução de política de chaves permite uma solicitação GenerateDataKey
com dois pares de contextos de criptografia, AppName=Helper
e Project=Alpha
, pois o primeiro par de contextos de criptografia atende à condição. Uma solicitação com apenas Project=Alpha
ou sem um contexto de criptografia falharia.
Como a operação da condição StringEquals diferencia maiúsculas de minúsculas, essa instrução de política requer a ortografia e capitalização da chave de contexto de criptografia. No entanto, você pode usar um operador de condição que ignora a capitalização da chave, como StringEqualsIgnoreCase
.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" } } }
Você também pode usar a chave de condição kms:EncryptionContextKeys
para exigir um contexto de criptografia (qualquer um) em operações de criptografia que usam a chave do KMS.
A instrução de política de exemplo a seguir usa a chave de condição kms:EncryptionContextKeys
com o Operador de condição nula para permitir o acesso a uma chave do KMS apenas quando o contexto de criptografia na solicitação da API não é nulo. Essa condição não confere as chaves ou os valores do contexto de criptografia. Ela só verifica se o contexto de criptografia existe.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "Null": { "kms:EncryptionContextKeys": false } } }
Consulte também
kms:ExpirationModel
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
A kms:ExpirationModel
chave de condição controla o acesso à operação ImportKeyMaterial com base no valor do parâmetro ExpirationModel na solicitação.
ExpirationModel
é um parâmetro opcional que determina se o material de chave importada expira. Os valores válidos são KEY_MATERIAL_EXPIRES
e KEY_MATERIAL_DOES_NOT_EXPIRE
. KEY_MATERIAL_EXPIRES
é o valor padrão.
A data e a hora de expiração são determinadas pelo valor do parâmetro ValidTo. O parâmetro ValidTo
só não será necessário se o valor do parâmetro ExpirationModel
for KEY_MATERIAL_DOES_NOT_EXPIRE
. Você também pode usar a chave de condição kms:ValidTo para exigir uma determinada data de validade como uma condição para acessar.
A declaração de política de exemplo a seguir usa a chave de condição kms:ExpirationModel
para permitir que um usuário importe o material de chave para uma chave do KMS apenas quando a solicitação incluir o parâmetro ExpirationModel
e seu valor for KEY_MATERIAL_DOES_NOT_EXPIRE
.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "StringEquals": { "kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE" } } }
Você também pode usar a chave de condição kms:ExpirationModel
para permitir que um usuário importe o material de chave somente quando este expirar. A instrução de política de chave de exemplo a seguir usa a chave de condição kms:ExpirationModel
com o Operador de condição nula para permitir que um usuário importe o material de chave somente quando a solicitação não tiver um parâmetro ExpirationModel
. O valor padrão para ExpirationModel é KEY_MATERIAL_EXPIRES
.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "Null": { "kms:ExpirationModel": true } } }
Consulte também
kms:GrantConstraintType
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
Você pode usar a chave de condição para controlar o acesso à operação CreateGrant com base no tipo de restrição de concessão na solicitação.
Ao criar uma concessão, você pode especificar uma restrição de concessão para permitir as operações permitidas pela concessão apenas quando um contexto de criptografia específico existir. A restrição de concessão pode ser de dois tipos: EncryptionContextEquals
ou EncryptionContextSubset
. Você pode usar esta chave de condição para verificar se a solicitação contém um tipo ou outro.
A instrução de política de chaves de exemplo a seguir usa a chave de condição kms:GrantConstraintType
para permitir que um usuário crie concessões apenas quando a solicitação inclui uma restrição de concessão EncryptionContextEquals
. O exemplo mostra uma declaração de política em uma política de chaves.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:GrantConstraintType": "EncryptionContextEquals" } } }
Consulte também
kms:GrantIsForAWSResource
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
Booliano |
Valor único |
|
Políticas de chaves e políticas do IAM |
Permite ou nega permissão para as operações CreateGrant, ListGrants ou RevokeGrant somente quando um serviço da AWS integrado ao AWS KMS
A declaração de política de chaves demonstrativa a seguir usa a chave de condição kms:GrantIsForAWSResource
. Ela permite que serviços da AWS integrados ao AWS KMS, como o Amazon EBS, criem concessões nessa chave do KMS em nome da entidade principal especificada.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } }
Consulte também
kms:GrantOperations
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Vários valores |
|
Políticas de chaves e políticas do IAM |
Você pode usar a chave de condição para controlar o acesso à operação CreateGrant com base nas operações de concessão na solicitação. Por exemplo, você pode permitir que um usuário crie concessões que deleguem permissão para criptografar, mas não descriptografar. Para obter mais informações sobre concessões, consulte Usar concessões.
Esta é uma chave de condição de vários valores. O kms:GrantOperations
compara o conjunto de operações de concessão na solicitação CreateGrant
para o conjunto de operações de concessão na política. Para determinar como esses conjuntos são comparados, você deve fornecer um operador de conjunto ForAnyValue
ou ForAllValues
na condição de política. Para detalhes sobre os operadores de conjunto, consulteUsar várias chaves e valores, no Manual do usuário do IAM.
-
ForAnyValue
: pelo menos uma operação de concessão na solicitação deve corresponder a uma das operações de concessão na condição da política. Outras operações de concessão são permitidas. -
ForAllValues: cada operação de concessão na solicitação deve corresponder a uma operação de concessão na condição da política. Este operador de conjunto limita as operações de concessão àquelas especificadas na condição da política. Ele não requer uma operação de concessão, mas proíbe operações de concessão não especificadas.
ForAllValues também retorna true quando não há operações de concessão na solicitação, mas
CreateGrant
não permite isso. Se o parâmetroOperations
ausente ou tiver um valor nulo, o parâmetroCreateGrant
falhará na solicitação.
A seguinte instrução de política de chaves de exemplo usa a chave de condição kms:GrantOperations
para permitir que um usuário crie concessões somente quando as operações de concessões são Encrypt
e/ou ReEncryptTo
. Se a concessão incluir quaisquer outras operações, a solicitação CreateGrant
falhará.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Encrypt", "ReEncryptTo" ] } } }
Se você alterar o operador de conjunto na condição de política para ForAnyValue
, a instrução de política exigirá que pelo menos uma das operações de concessão na concessão seja Encrypt
ou ReEncryptTo
, mas permitirá outras operações de concessão, como Decrypt
ou ReEncryptFrom
.
Consulte também
kms:GranteePrincipal
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas do IAM e de chaves |
Você pode usar esta chave de condição para controlar o acesso à operação CreateGrant com base no valor do parâmetro GranteePrincipal na solicitação. Por exemplo, você pode permitir que um usuário crie concessões para usar uma chave do KMS apenas quando o principal favorecido na solicitação CreateGrant
corresponder à entidade principal especificada na declaração de condição.
A instrução de política de chaves de exemplo a seguir usa a chave de condição kms:GranteePrincipal
para permitir que um usuário crie concessões para uma chave do KMS apenas quando a entidade principal favorecido na concessão for LimitedAdminRole
.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:GranteePrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole" } } }
Consulte também
kms:KeyOrigin
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
Operações de recursos de chaves do KMS |
Políticas do IAM Políticas de chaves e políticas do IAM |
A chave de condição kms:KeyOrigin
controla o acesso às operações com base no valor da propriedade Origin
da chave do KMS que é criada pela operação ou usada nela. Ela funciona como uma condição de recurso ou de solicitação.
Você pode usar esta chave de condição para controlar o acesso à operação CreateKey com base no valor do parâmetro Origin na solicitação. Os valores válidos para Origin
são AWS_KMS
, AWS_CLOUDHSM
e EXTERNAL
.
Por exemplo, você pode permitir que um usuário crie uma chave do KMS somente quando o material de chave é gerado no KMS AWS KMS (AWS_KMS
), apenas quando o material de chave é gerado em um cluster do AWS CloudHSM associado a um armazenamento de chaves personalizado (AWS_CLOUDHSM
) ou apenas quando o material de chave é importado de uma fonte externa (EXTERNAL
).
A seguinte instrução de política de chaves de exemplo usa a chave de condição kms:KeyOrigin
para permitir que um usuário crie uma chave KMS somente quando o AWS KMS criar o material de chave.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_KMS" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:GenerateDataKeyPair", "kms:GenerateDataKeyPairWithoutPlaintext", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_CLOUDHSM" } } } ] }
Também é possível usar a chave de condição kms:KeyOrigin
para controlar o acesso a operações que usam ou gerenciam uma chave do KMS com base na propriedade Origin
da chave do KMS usada para a operação. A operação deve ser uma operação de recurso de chave do KMS, ou seja, uma operação autorizada para uma chave do KMS específica. Para identificar as operações de recursos de chaves do KMS, na Tabela de ações e recursos, procure um valor de KMS key
na coluna Resources
para a operação.
Por exemplo, a política do IAM a seguir permite que as entidades principais realizem as operações de recursos de chave do KMS especificadas, mas somente com as chaves do KMS na conta que foram criadas em um armazenamento de chaves personalizado.
{ "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:GenerateDataKeyPair", "kms:GenerateDataKeyPairWithoutPlaintext", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_CLOUDHSM" } } }
Consulte também
kms:KeySpec
Chaves de condição do AWS KMS | Tipo de condição | Operações de API | Tipo de política |
---|---|---|---|
|
String |
Operações de recursos de chaves do KMS |
Políticas do IAM Políticas de chaves e políticas do IAM |
A chave de condição kms:KeySpec
controla o acesso às operações com base no valor da propriedade KeySpec
da chave do KMS que é criada pela operação ou usada nela.
É possível usar essa chave de condição em uma política do IAM para controlar o acesso à operação CreateKey com base no valor do parâmetro KeySpec em uma solicitação CreateKey
. Por exemplo, é possível usar essa condição para permitir que os usuários criem somente chaves do KMS de criptografia simétrica ou somente chaves do KMS de HMAC.
O seguinte exemplo de instrução de política do IAM usa a chave de condição kms:KeySpec
para permitir que as entidades principais criem apenas chaves do KMS assimétricas RSA. A permissão só é válida quando o KeySpec
na solicitação começa com RSA_
.
{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringLike": { "kms:KeySpec": "RSA_*" } } }
Também é possível usar a chave de condição kms:KeySpec
para controlar o acesso a operações que usam ou gerenciam uma chave do KMS com base na propriedade KeySpec
da chave do KMS usada para a operação. A operação deve ser uma operação de recurso de chave do KMS, ou seja, uma operação autorizada para uma chave do KMS específica. Para identificar as operações de recursos de chaves do KMS, na Tabela de ações e recursos, procure um valor de KMS key
na coluna Resources
para a operação.
Por exemplo, a seguinte política do IAM permite que as entidades principais executem as operações especificadas de recursos de chave do KMS, mas somente com chaves do KMS de criptografia simétrica na conta.
{ "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringEquals": { "kms:KeySpec": "SYMMETRIC_DEFAULT" } } }
Consulte também
kms:KeyUsage
Chaves de condição do AWS KMS | Tipo de condição | Operações de API | Tipo de política |
---|---|---|---|
|
String |
Operações de recursos de chaves do KMS |
Políticas do IAM Políticas de chaves e políticas do IAM |
A chave de condição kms:KeyUsage
controla o acesso às operações com base no valor da propriedade KeyUsage
da chave do KMS que é criada pela operação ou usada nela.
É possível usar esta chave de condição para controlar o acesso à operação CreateKey com base no valor do parâmetro KeyUsage na solicitação. Os valores válidos para KeyUsage
são ENCRYPT_DECRYPT
, SIGN_VERIFY
e GENERATE_VERIFY_MAC
.
Por exemplo, você pode permitir que um usuário crie uma chave do KMS somente quando KeyUsage
é ENCRYPT_DECRYPT
ou negar a permissão de um usuário quando KeyUsage
é SIGN_VERIFY
.
O exemplo de instrução de política do IAM a seguir usa a chave de condição kms:KeyUsage
para permitir que um usuário crie uma chave do KMS somente quando KeyUsage
é ENCRYPT_DECRYPT
.
{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeyUsage": "ENCRYPT_DECRYPT" } } }
Também é possível usar a chave de condição kms:KeyUsage
para controlar o acesso a operações que usam ou gerenciam uma chave do KMS com base na propriedade KeyUsage
da chave do KMS na operação. A operação deve ser uma operação de recurso de chave do KMS, ou seja, uma operação autorizada para uma chave do KMS específica. Para identificar as operações de recursos de chaves do KMS, na Tabela de ações e recursos, procure um valor de KMS key
na coluna Resources
para a operação.
Por exemplo, a política do IAM a seguir permite que as entidades principais realizem as operações de recursos de chaves do KMS especificadas, mas somente com as chaves do KMS na conta que são usadas para assinatura e verificação.
{ "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:DescribeKey", "kms:GetPublicKey", "kms:ScheduleKeyDeletion" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/*", "Condition": { "StringEquals": { "kms:KeyUsage": "SIGN_VERIFY" } } }
Consulte também
kms:MacAlgorithm
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
É possível usar a chave de condição kms:MacAlgorithm
para controlar o acesso às operações GenerateMac e VerifyMac com base no valor do parâmetro MacAlgorithm
na solicitação.
O seguinte exemplo de política de chaves permite que usuários capazes de assumir a função testers
só usem a chave do KMS de HMAC para gerar e verificar etiquetas HMAC quando o algoritmo MAC na solicitação for HMAC_SHA_384
ou HMAC_SHA_512
. Essa política usa duas instruções distintas de política, cada uma com sua própria condição. Se você especificar mais de um algoritmo MAC em uma única instrução de condição, a condição exigirá ambos os algoritmos em vez de um ou outro.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": [ "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*", "Condition": { "StringEquals": { "kms:MacAlgorithm": "HMAC_SHA_384" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": [ "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*", "Condition": { "StringEquals": { "kms:MacAlgorithm": "HMAC_SHA_512" } } } ] }
Consulte também
kms:MessageType
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
A chave de condição kms:MessageType
controla o acesso às operações Sign e Verify com base no valor do parâmetro MessageType
na solicitação. Os valores válidos para MessageType
são RAW
e DIGEST
.
Por exemplo, a instrução de política de chaves a seguir usa a chave de condição kms:MessageType
para permitir que um usuário use uma chave de condição assimétrica para assinar uma mensagem, mas não um resumo de mensagens.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringEquals": { "kms:MessageType": "RAW" } } }
Consulte também
kms:MultiRegion
Chaves de condição do AWS KMS | Tipo de condição | Operações de API | Tipo de política |
---|---|---|---|
|
Booliano |
Operações de recursos de chaves do KMS |
Políticas de chaves e políticas do IAM |
Você pode usar essa chave de condição para permitir operações somente em chaves de região única ou somente em chaves de várias regiões. A chave de condição kms:MultiRegion
controla o acesso a operações do AWS KMS nas chaves do KMS e à operação CreateKey com base no valor da propriedade MultiRegion
da chave do KMS. Os valores válidos são true
(várias regiões) e false
(região única). Todas as chaves do KMS têm uma propriedade MultiRegion
.
Por exemplo, a seguinte instrução de política do IAM usa a chave de condição kms:MultiRegion
para permitir que as entidades principais criem apenas chaves de região única.
{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "Bool": { "kms:MultiRegion": false } } }
kms:MultiRegionKeyType
Chaves de condição do AWS KMS | Tipo de condição | Operações de API | Tipo de política |
---|---|---|---|
|
String |
Operações de recursos de chaves do KMS |
Políticas de chaves e políticas do IAM |
Você pode usar essa chave de condição para permitir operações somente em chaves primárias de várias regiões ou somente em chaves de réplica de várias regiões. A chave de condição kms:MultiRegionKeyType
controla o acesso a operações do AWS KMS em chaves do KMS e à operação CreateKey com base na propriedade MultiRegionKeyType
da chave do KMS. Os valores válidos são PRIMARY
e REPLICA
. Somente chaves de várias regiões têm uma propriedade MultiRegionKeyType
.
Normalmente, você pode usar a chave de condição kms:MultiRegionKeyType
em uma política do IAM para controlar o acesso a várias chaves do KMS. No entanto, como uma determinada chave de várias regiões pode mudar para primária ou réplica, convém usar essa condição em uma política de chaves para permitir uma operação somente quando a chave de várias regiões específica for uma chave primária ou de réplica.
Por exemplo, a instrução de política do IAM a seguir usa a chave de condição kms:MultiRegionKeyType
para permitir que as entidades principais programem e cancelem a exclusão de chaves somente em chaves de réplica de várias regiões na Conta da AWS especificada.
{ "Effect": "Allow", "Action": [ "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringEquals": { "kms:MultiRegionKeyType": "REPLICA" } } }
Para permitir ou negar acesso a todas as chaves de várias regiões, você pode usar ambos os valores ou um valor nulo com kms:MultiRegionKeyType
. No entanto, a chave de condição kms:MultiRegion é recomendada para esse fim.
kms:PrimaryRegion
Chaves de condição do AWS KMS | Tipo de condição | Operações de API | Tipo de política |
---|---|---|---|
|
String (lista) |
|
Políticas de chaves e políticas do IAM |
É possível usar essa chave de condição para limitar as regiões de destino em uma operação UpdatePrimaryRegion. Estas são as Regiões da AWS que podem hospedar suas chaves primárias de várias regiões.
A chave de condição kms:PrimaryRegion
controla o acesso às operações UpdatePrimaryRegion com base no valor do parâmetro PrimaryRegion
. O parâmetro PrimaryRegion
especifica a Região da AWS da chave de réplica de várias regiões que está sendo promovida para primária. O valor da condição é um ou mais nomes de Região da AWS, como us-east-1
ou ap-southeast-2
, ou padrões de nomes de região, como eu-*
Por exemplo, a instrução de política de chaves a seguir usa a chave de condição kms:PrimaryRegion
para permitir que as entidades principais atualizem a região primária de uma chave de várias regiões para uma das quatro regiões especificadas.
{ "Effect": "Allow", "Action": "kms:UpdatePrimaryRegion", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Developer" }, "Resource": "*", "Condition": { "StringEquals": { "kms:PrimaryRegion": [ "us-east-1", "us-west-2", "eu-west-3", "ap-southeast-2" ] } } }
kms:ReEncryptOnSameKey
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
Booliano |
Valor único |
|
Políticas de chaves e políticas do IAM |
Você pode usar a chave de condição para controlar o acesso à operação ReEncrypt com base em se a solicitação especifica uma chave do KMS de destino que é a mesma utilizada para a criptografia original.
Por exemplo, a instrução de política de chaves a seguir usa a chave de condição kms:ReEncryptOnSameKey
para permitir que um usuário recriptografe apenas quando a chave do KMS de destino é a mesma usada para a criptografia original.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ReEncrypt*", "Resource": "*", "Condition": { "Bool": { "kms:ReEncryptOnSameKey": true } } }
kms:RequestAlias
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String (lista) |
Valor único |
Políticas de chaves e políticas do IAM |
É possível usar essa chave de condição para permitir uma operação somente quando a solicitação usa um alias específico para identificar a chave do KMS. A chave de condição kms:RequestAlias
controla o acesso a uma chave do KMS usada em uma operação criptográfica, GetPublicKey
ou DescribeKey
com base no alias que identifica essa chave do KMS na solicitação. (Essa condição de política não afeta a operação GenerateRandom porque a operação não usa uma chave do KMS ou um alias.)
Essa condição oferece suporte ao controle de acesso baseado em atributos (ABAC) no AWS KMS, que permite controlar o acesso a chaves do KMS com base nas etiquetas e nos aliases de uma chave do KMS. Você pode usar tags e aliases para conceder ou negar acesso a uma chave do KMS sem alterar políticas ou permissões. Para obter mais detalhes, consulte ABAC para AWS KMS.
Para especificar o alias nessa condição de política, use um nome de alias, como alias/project-alpha
, ou um padrão de nome de alias, como alias/*test*
. Não é possível especificar um ARN de alias no valor dessa chave de condição.
Para satisfazer essa condição, o valor do parâmetroKeyId
na solicitação deve ser um nome de alias correspondente ou um ARN de alias. Se a solicitação usar umidentificador de chave diferente, ela não atenderá à condição, mesmo que identifique a mesma chave do KMS.
Por exemplo, a instrução de política de chaves a seguir permite que a entidade principal chame a operação GenerateDataKey na chave do KMS. No entanto, isso é permitido somente quando o valor do parâmetro KeyId
na solicitação é alias/finance-key
ou um ARN de alias com esse nome de alias, como arn:aws:kms:us-west-2:111122223333:alias/finance-key
.
{ "Sid": "Key policy using a request alias condition", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/developer" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:RequestAlias": "alias/finance-key" } } }
Não é possível usar essa chave de condição para controlar o acesso a operações de alias, como CreateAlias ou DeleteAlias. Para obter informações sobre como controlar o acesso a todas as operações de alias, consulte Controlar o acesso a aliases.
kms:ResourceAliases
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String (lista) |
Vários valores | Operações de recursos de chaves do KMS |
Somente políticas do IAM |
Use essa chave de condição para controlar o acesso a uma chave do KMS com base nos aliases que estão associados à chave do KMS. A operação deve ser uma operação de recurso de chave do KMS, ou seja, uma operação autorizada para uma chave do KMS específica. Para identificar as operações de recursos de chaves do KMS, na Tabela de ações e recursos, procure um valor de KMS key
na coluna Resources
para a operação.
Essa condição oferece suporte ao controle de acesso baseado em atributos (ABAC) no AWS KMS. Com o ABAC, você pode controlar o acesso a chaves do KMS com base nas etiquetas atribuídas a uma chave do KMS e nos aliases associados a uma chave do KMS. Você pode usar tags e aliases para conceder ou negar acesso a uma chave do KMS sem alterar políticas ou permissões. Para obter mais detalhes, consulte ABAC para AWS KMS.
Um alias deve ser exclusivo em uma Conta da AWS e região, mas essa condição permite controlar o acesso a várias chaves do KMS na mesma região (usando o operador de comparação StringLike
) ou para várias chaves do KMS em diferentes Regiões da AWS de cada conta.
A condição kms:ResourceAliases é efetiva somente quando a chave do KMS está em conformidade com a cota de aliases por chave do KMS. Se uma chave do KMS exceder essa cota, as entidades principais autorizadas a usar essa chave pela condição kms:ResourceAliases
terão acesso negado a ela.
Para especificar o alias nessa condição de política, use um nome de alias, como alias/project-alpha
, ou um padrão de nome de alias, como alias/*test*
. Não é possível especificar um ARN de alias no valor dessa chave de condição. Para atender à condição, a chave do KMS usada na operação deve ter o alias especificado. Não importa se ou como a chave do KMS é identificada na solicitação para a operação.
Esta é uma chave de condição de vários valores que compara o conjunto de aliases associados a uma chave do KMS com o conjunto de aliases na política. Para determinar como esses conjuntos são comparados, você deve fornecer um operador de conjunto ForAnyValue
ou ForAllValues
na condição de política. Para detalhes sobre os operadores de conjunto, consulteUsar várias chaves e valores, no Manual do usuário do IAM.
-
ForAnyValue: pelo menos um alias associado à chave do KMS deve corresponder a um alias na condição da política. Outros aliases são permitidos. Se a chave do KMS não tiver alias, a condição não será atendida.
-
ForAllValues: cada alias associado à chave do KMS deve corresponder a um alias na política. Esse operador de conjunto limita os aliases associados à chave do KMS àqueles na condição da política. Ele não requer aliases, mas proíbe aliases não especificados.
Por exemplo, a instrução de política do IAM a seguir permite que a entidade principal chame a operação GenerateDataKey em qualquer chave do KMS na Conta da AWS especificada que está associada ao alias finance-key
. (As políticas de chaves das chaves do KMS afetadas também devem permitir que a conta da entidade principal as use para essa operação.) Para indicar que a condição é atendida quando um dos muitos aliases que podem estar associados à chave do KMS é alias/finance-key
, a condição usa o operador de conjunto ForAnyValue
.
Como a condição kms:ResourceAliases
é baseada no recurso, e não na solicitação, uma chamada para GenerateDataKey
é bem-sucedida para qualquer chave do KMS associada ao alias finance-key
, mesmo que a solicitação use um ID de chave ou ARN de chave para identificar a chave do KMS.
{ "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": "kms:GenerateDataKey", "Resource": [ "arn:aws:kms:*:111122223333:key/*", "arn:aws:kms:*:444455556666:key/*" ], "Condition": { "ForAnyValue:StringEquals": { "kms:ResourceAliases": "alias/finance-key" } } }
O seguinte exemplo de instrução de política do IAM permite que a entidade principal habilite e desabilite chaves do KMS, mas somente quando todos os aliases das chaves do KMS incluem “Test
”. Essa instrução de política usa duas condições. A condição com o operador de conjunto ForAllValues
requer que todos os aliases associados à chave do KMS incluam “Test”. A condição com o operador de conjunto ForAnyValue
requer que a chave do KMS tenha pelo menos um alias com “Test”. Sem a condição ForAnyValue
, essa instrução de política teria permitido que a entidade principal usasse chaves do KMS sem aliases.
{ "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": [ "kms:EnableKey", "kms:DisableKey" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "ForAllValues:StringLike": { "kms:ResourceAliases": [ "alias/*Test*" ] }, "ForAnyValue:StringLike": { "kms:ResourceAliases": [ "alias/*Test*" ] } } }
kms:ReplicaRegion
Chaves de condição do AWS KMS | Tipo de condição | Operações de API | Tipo de política |
---|---|---|---|
|
String (lista) |
|
Políticas de chaves e políticas do IAM |
Você pode usar essa chave de condição para limitar as Regiões da AWS em que um principal pode replicar uma chave de várias regiões. A chave de condição kms:ReplicaRegion
controla o acesso à operação ReplicicateKey com base no valor do parâmetro ReplicaRegion na solicitação. Esse parâmetro especifica a propriedade Região da AWS da nova chave de réplica.
O valor da condição é um ou mais nomes de Região da AWS, como us-east-1
ou ap-southeast-2
, ou padrões de nome, como eu-*
. Para obter uma lista dos nomes deRegiões da AWS com suporte pelo AWS KMS, consulte Endpoints e cotas do AWS Key Management Service, na Referência geral da AWS.
Por exemplo, a instrução de política de chaves a seguir usa a chave de condição kms:ReplicaRegion
para permitir que as entidades principais chamem a operação ReplicateKey somente quando o valor do parâmetro ReplicaRegion
é uma das regiões especificadas.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Administrator" }, "Action": "kms:ReplicateKey" "Resource": "*", "Condition": { "StringEquals": { "kms:ReplicaRegion": [ "us-east-1", "eu-west-3", "ap-southeast-2" ] } } }
Essa chave de condição controla o acesso apenas à operação ReplicateKey. Para controlar o acesso à operação UpdatePrimaryRegion, use a chave de condição kms:PrimaryRegion.
kms:RetiringPrincipal
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String (lista) |
Valor único |
|
Políticas de chaves e políticas do IAM |
Você pode usar esta chave de condição para controlar o acesso à operação CreateGrant com base no valor do parâmetro RetiringPrincipal na solicitação. Por exemplo, você pode permitir que um usuário crie concessões para usar uma chave do KMS apenas quando RetiringPrincipal
na solicitação CreateGrant
corresponder a RetiringPrincipal
na instrução da condição.
A seguinte instrução de política de chaves de exemplo permite que um usuário crie permissões para a chave do KMS. A chave de condição kms:RetiringPrincipal
restringe a permissão a solicitações CreateGrant
em que a desativação principal na concessão é o usuário LimitedAdminRole
ou o OpsAdmin
.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:RetiringPrincipal": [ "arn:aws:iam::111122223333:role/LimitedAdminRole", "arn:aws:iam::111122223333:user/OpsAdmin" ] } } }
Consulte também
kms:SigningAlgorithm
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
É possível usar a chave de condição kms:SigningAlgorithm
para controlar o acesso às operações Sign e Verify com base no valor do parâmetro SigningAlgorithm na solicitação. Essa chave de condição não tem efeito em operações realizadas fora do AWS KMS, como verificar assinatura com a chave pública em um par de chaves do KMS assimétricas fora do AWS KMS.
O exemplo de política de chaves a seguir permite que os usuários que podem assumir a função testers
usem a chave do KMS para assinar mensagens somente quando o algoritmo de assinatura usado para a solicitação é um algoritmo RSASSA_PSS, como RSASSA_PSS_SHA512
.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers" }, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringLike": { "kms:SigningAlgorithm": "RSASSA_PSS*" } } }
Consulte também
kms:ValidTo
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
Timestamp |
Valor único |
|
Políticas de chaves e políticas do IAM |
A kms:ValidTo
chave de condição controla o acesso à operação ImportKeyMaterial com base no valor do parâmetro ValidTo na solicitação, o que determina quando o material de chave importada expira. O valor é expresso no horário do Unix
Por padrão, o parâmetro ValidTo
é obrigatório em uma solicitação ImportKeyMaterial
. No entanto, se o valor do parâmetro ExpirationModel for KEY_MATERIAL_DOES_NOT_EXPIRE
, o parâmetro ValidTo
será inválido. Você também pode usar a chave de condição kms: ExpirationModel para exigir o parâmetro ExpirationModel
ou um valor de parâmetro específico.
A seguinte instrução de política de exemplo permite a um usuário importar material-chave em uma chave do KMS. A chave de condição kms:ValidTo
limita a permissão para solicitações ImportKeyMaterial
em que o valor ValidTo
é menor que ou igual a 1546257599.0
(31 de dezembro de 2018 23:59:59).
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "NumericLessThanEquals": { "kms:ValidTo": "1546257599.0" } } }
Consulte também
kms:ViaService
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
Operações de recursos de chaves do KMS |
Políticas de chaves e políticas do IAM |
A chave de condição kms:ViaService
limita o uso de uma AWS KMS AWS KMS key (chave do KMS) para solicitações provenientes de serviços da AWS especificados. Você pode especificar um ou mais serviços em cada chave de condição kms:ViaService
. A operação deve ser uma operação de recurso de chave do KMS, ou seja, uma operação autorizada para uma chave do KMS específica. Para identificar as operações de recursos de chaves do KMS, na Tabela de ações e recursos, procure um valor de KMS key
na coluna Resources
para a operação.
Por exemplo, a seguinte instrução de política de chaves usa a chave de condição kms:ViaService
para permitir que uma chave gerenciada pelo cliente seja usada para as ações especificadas somente quando a solicitação vem do Amazon EC2 ou do Amazon RDS na região Oeste dos EUA (Oregon) em nome de ExampleUser
.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:ListGrants", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "ec2.us-west-2.amazonaws.com", "rds.us-west-2.amazonaws.com" ] } } }
Também é possível usar uma chave de condição kms:ViaService
para negar permissão para usar uma chave do KMS quando a solicitação é proveniente de serviços específicos. Por exemplo, a instrução de política a seguir usa uma chave de condição kms:ViaService
para impedir que uma chave gerenciada pelo cliente seja usada para operações Encrypt
quando a solicitação é proveniente do AWS Lambda em nome de ExampleUser
.
{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "lambda.us-west-2.amazonaws.com" ] } } }
Quando você usa a chave de condição kms:ViaService
, o serviço faz a solicitação em nome de uma entidade principal na conta da Conta da AWS. Essas entidades principais deve ter as seguintes permissões:
-
Permissão para usar a chave do KMS. A entidade principal precisa conceder essas permissões ao serviço integrado, de forma que o serviço possa usar a chave gerenciada pelo cliente em nome da entidade principal. Para mais informações, consulte Como os serviços da AWS, usam o AWS KMS.
-
Permissão para usar o serviço integrado. Para obter detalhes sobre como conceder acesso aos usuários para um serviço da AWS integrado ao AWS KMS, consulte a documentação do serviço integrado.
Todas as Chaves gerenciadas pela AWS usam uma chave de condição kms:ViaService
no seu documento de política de chaves. Essa condição permite que a chave do KMS seja usada apenas para solicitações provenientes do serviço que criou a chave do KMS. Para ver a política de chaves de uma Chave gerenciada pela AWS, use a operação GetKeyPolicy.
A chave de condição kms:ViaService
é válida no IAM e em declarações de políticas de chaves. Os serviços que você especificar devem ser integrados ao AWS KMSkms:ViaService
.
Serviços que oferecem suporte à chave de condição kms:ViaService
A tabela a seguir lista os serviços da AWS integrados com o AWS KMS e que oferecem suporte ao uso da chave de condição kms:ViaService
em chaves gerenciadas pelo cliente. Os serviços nessa tabela podem não estar disponíveis em todas as regiões. Use o sufixo .amazonaws.com
do nome do AWS KMS ViaService em todas as partições da AWS.
Talvez seja necessário rolar horizontalmente ou verticalmente para ver todos os dados nessa tabela.
Nome do serviço | Nome do AWS KMS ViaService |
---|---|
AWS App Runner | apprunner. |
Amazon AppFlow | appflow. |
Amazon Application Migration Service | mgn. |
Amazon Athena | athena. |
AWS Audit Manager | auditmanager. |
Amazon Aurora | rds. |
AWS Backup | backup. |
AWS Backup Gateway | backup-gateway. |
AWS CodeArtifact | codeartifact. |
Amazon CodeGuru Reviewer | codeguru-reviewer. |
Amazon Comprehend | comprehend. |
Amazon Connect | connect. |
Amazon Connect Customer Profiles | profile. |
Amazon Connect Wisdom | wisdom. |
AWS Database Migration Service (AWS DMS) | dms. |
AWS Directory Service | directoryservice. |
Amazon DynamoDB | dynamodb. |
Amazon EC2 Systems Manager (SSM) | ssm. |
Amazon Elastic Block Store (Amazon EBS) | ec2. (somente EBS) |
Amazon Elastic Container Registry (Amazon ECR) | ecr. |
Amazon Elastic File System (Amazon EFS) | elasticfilesystem. |
Amazon Elastic Kubernetes Service (Amazon EKS) | eks. |
Amazon ElastiCache |
Inclua ambos os nomes ViaService na chave-valor de condição:
|
Amazon OpenSearch Service (OpenSearch Service) | es. |
AWS Elemental MediaTailor | mediatailor. |
Amazon FinSpace | finspace. |
Amazon Forecast | forecast. |
Amazon FSx | fsx. |
AWS Glue | glue. |
Amazon HealthLake | healthlake. |
AWS IoT SiteWise | iotsitewise. |
Amazon Kendra | kendra. |
Amazon Keyspaces (for Apache Cassandra) | cassandra. |
Amazon Kinesis | kinesis. |
Amazon Kinesis Data Firehose | firehose. |
Amazon Kinesis Video Streams | kinesisvideo. |
AWS Lambda | lambda. |
Amazon Lex | lex. |
AWS License Manager | license-manager. |
Amazon Location Service | geo. |
Amazon Lookout for Equipment | lookoutequipment. |
Amazon Lookout for Metrics | lookoutmetrics. |
Amazon Lookout for Vision | lookoutvision. |
Amazon Managed Blockchain | managedblockchain. |
Amazon Managed Streaming for Apache Kafka (Amazon MSK) | kafka. |
Amazon Managed Workflows for Apache Airflow (MWAA) | airflow. |
Amazon MemoryDB | memorydb. |
Amazon Monitron | monitron. |
Amazon MQ | mq. |
Amazon Neptune | rds. |
Amazon Nimble Studio | nimble. |
AWS Proton | proton. |
Amazon Quantum Ledger Database (Amazon QLDB) | qldb. |
Performance Insights do Amazon RDS | rds. |
Amazon Redshift | redshift. |
Editor de consultas do Amazon Redshift V2 | sqlworkbench. |
Amazon Redshift Serverless | redshift-serverless. |
Amazon Rekognition | rekognition. |
Amazon Relational Database Service (Amazon RDS) | rds. |
AWS Secrets Manager | secretsmanager. |
Amazon Simple Email Service (Amazon SES) | ses. |
Amazon Simple Notification Service (Amazon SNS) | sns. |
Amazon Simple Queue Service (Amazon SQS) | sqs. |
Amazon Simple Storage Service (Amazon S3) | s3. |
AWS Snowball | importexport. |
AWS Storage Gateway | storagegateway. |
AWS Systems Manager Incident Manager | ssm-incidents. |
AWS Systems Manager Incident Manager Contacts | ssm-contacts. |
Amazon Timestream | timestream. |
Amazon Translate | translate. |
Amazon WorkMail | workmail. |
Amazon WorkSpaces | workspaces. |
Amazon WorkSpaces Web | workspaces-web. |
AWS X-Ray | xray. |
kms:WrappingAlgorithm
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
Esta chave de condição controla o acesso à operação GetParametersForImport com base no valor do parâmetro WrappingAlgorithm na solicitação. Você pode usar essa condição para exigir que os principais usem determinado algoritmo para criptografar material de chaves durante o processo de importação. As solicitações para a chave pública e o token de importação exigidos falham quando especificam um algoritmo de empacotamento diferente.
A instrução de política de exemplo a seguir usa a chave de condição kms:WrappingAlgorithm
para dar ao usuário de exemplo permissão para chamar a operação GetParametersForImport
, mas o impede de usar o algoritmo de empacotamento RSAES_OAEP_SHA_1
. Quando o WrappingAlgorithm
na solicitação GetParametersForImport
é RSAES_OAEP_SHA_1
, a operação falha.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringNotEquals": { "kms:WrappingAlgorithm": "RSAES_OAEP_SHA_1" } } }
Consulte também
kms:WrappingKeySpec
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
Esta chave de condição controla o acesso à operação GetParametersForImport com base no valor do parâmetro WrappingKeySpec na solicitação. Você pode usar essa condição para exigir que as entidades principais usem determinado tipo de chave pública durante o processo de importação. Se a solicitação especifica um tipo de chave diferente, ela falha.
Como o único valor válido para o valor do parâmetro WrappingKeySpec
é RSA_2048
, impedir que os usuários usem esse valor efetivamente os impede de usar a operação GetParametersForImport
.
A declaração de política de exemplo a seguir usa a chave de condição kms:WrappingAlgorithm
para exigir que WrappingKeySpec
na solicitação seja RSA_2048
.
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringEquals": { "kms:WrappingKeySpec": "RSA_2048" } } }
Consulte também
Chaves de condição do AWS KMS para o AWS Nitro Enclaves
O AWS Nitro Enclaves é um recurso do Amazon EC2 que permite criar ambientes computacionais isolados, chamados de enclaves, para proteger e processar dados altamente sigilosos. O AWS KMS fornece chaves de condição para dar suporte ao AWS Nitro Enclaves. Essas chaves de condições funcionam somente quando uma solicitação de uma operação do AWS KMS é proveniente de um enclave.
Quando você chama as APIs kms-decrypt
, kms-generate-data-key
ou kms-generate-random
do SDK do AWS Nitro Enclaves
As seguintes chaves de condição permitem limitar as permissões para essas operações com base no conteúdo do documento de atestado assinado. Antes de permitir uma operação, o AWS KMS compara o documento de atestado do enclave com os valores nessas chaves de condição do AWS KMS.
kms:RecipientAttestation:ImageSha384
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
A chave de condição kms:RecipientAttestation:ImageSha384
permite solicitações kms-decrypt
, kms-generate-data-key
e kms-generate-random
de um enclave somente quando o hash de imagem do documento de atestado assinado na solicitação corresponde ao valor na chave de condição. O valor ImageSha384
corresponde a PCR[0] no documento de atestado. Essa chave de condição é eficaz somente quando você chama as APIs do SDK do AWS Nitro Enclaves a partir de um enclave.
Essa chave de condição é válida em declarações de políticas de chaves e declarações de políticas do IAM, mesmo que não apareça no console do IAM ou na Referência de autorização de serviço do IAM.
Por exemplo, a declaração de política de chaves a seguir permite que a função data-processing
use a chave do KMS para as operações kms-decrypt
(Decrypt), kms-generate-data-key
(GenerateDataKey) e kms-generate-random
(GenerateRandom). A chave de condição kms:RecipientAttestation:ImageSha384
permite as operações somente quando o valor de hash da imagem (PCR[0]) do documento de atestado na solicitação corresponde ao valor de hash da imagem na condição.
Se a solicitação não incluir um documento de atestado, a permissão será negada porque essa condição não está atendida.
{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateRandom" ], "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:ImageSha384": "9fedcba8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef1abcdef0abcdef1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef99" } } }
kms:RecipientAttestation:PCR<PCR_ID>
Chaves de condição do AWS KMS | Tipo de condição | Tipo de valor | Operações de API | Tipo de política |
---|---|---|---|---|
|
String |
Valor único |
|
Políticas de chaves e políticas do IAM |
A chave de condição kms:RecipientAttestation:PCR<PCR_ID>
permite solicitações kms-decrypt
, kms-generate-data-key
ekms-generate-random
de um enclave somente quando os registros de configuração de plataforma (PCRs) do documento de atestado assinado na solicitação correspondem aos PCRs na chave de condição. Essa chave de condição é eficaz somente quando você chama as APIs do SDK do AWS Nitro Enclaves a partir de um enclave.
Essa chave de condição é válida em declarações de políticas de chaves e declarações de políticas do IAM, mesmo que não apareça no console do IAM ou na Referência de autorização de serviço do IAM.
Para especificar um valor de PCR, use o seguinte formato. Concatene o ID do PCR com o nome da chave da condição. O valor so PCR deve ser uma string hexadecimal minúscula de até 96 bytes.
"kms:RecipientAttestation:PCR
PCR_ID
": "PCR_value
"
Por exemplo, a seguinte chave de condição especifica um valor específico para PCR[1], que corresponde ao hash do kernel usado para o enclave e o processo de bootstrap.
kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"
Por exemplo, a instrução de política de chaves a seguir permite que a função data-processing
use a chave do KMS para a operação kms-decrypt
(Descriptografar) nas operações .
A chave de condição kms:RecipientAttestation:PCR
nessa instrução permite a operação somente quando o valor PCR1 no documento de atestado assinado na solicitação corresponde ao valor kms:RecipientAttestation:PCR1
na condição. Use a política aStringEqualsIgnoreCase
para exigir uma comparação sem distinção entre maiúsculas e minúsculas dos valores de PCR.
Se a solicitação não incluir um documento de atestado, a permissão será negada porque essa condição não está atendida.
{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": "kms:Decrypt", "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:PCR1": "0x1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87" } } }