Quando eu crio uma chave do AWS Key Management Service (AWS KMS) e defino uma política de chave do AWS KMS por meio do AWS CloudFormation, a criação da chave falha.
Breve descrição
Ao tentar criar e definir uma chave, é possível receber a seguinte mensagem de erro:
"The new key policy will not allow you to update the key policy in the future."
A entidade principal que você especificou na política de chave deve ter as permissões necessárias para realizar as operações de API CreateKey e PutKeyPolicy.
Importante: certifique-se de que a política de chave que você criar permita que uma entidade principal apropriada do AWS Identity and Access Management (AWS IAM) administre a chave do AWS KMS.
Resolução
Observação: quando você cria uma pilha do CloudFormation, ele assume um perfil do IAM para realizar a operação de API CreateStack. O CloudFormation também usa o perfil para criar os recursos que você especificou no modelo do CloudFormation.
Crie uma chave do AWS KMS
Conclua as etapas a seguir:
- Abra o console do CloudFormation.
- Use o recurso AWS::KMS::Key para criar a chave do AWS KMS.
- Escolha um usuário ou perfil do IAM que seja possível usar para gerenciar sua chave.
- Inclua uma entidade principal administrativa nas instruções Allow com a ação kms:PutKeyPolicy.
- Use o parâmetro de recurso BypassPolicyLockoutSafetyCheck.
No exemplo a seguir, o perfil KeyAdmin pode modificar a política de chave quando a política está no seguinte formato:
{ "Type": "AWS::KMS::Key",
"Properties": {
"Description": "A sample key",
"KeyPolicy": {
"Version": "2012-10-17",
"Id": "key-default-1",
"Statement": [
{
"Sid": "Allow access for Key Administrators",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/KeyAdmin"
},
"Action": [
"kms:Create*",
"kms:Describe*",
"kms:Enable*",
"kms:List*",
"kms:Put*",
"kms:Update*",
"kms:Revoke*",
"kms:Disable*",
"kms:Get*",
"kms:Delete*",
"kms:ScheduleKeyDeletion",
"kms:CancelKeyDeletion"
],
"Resource": "*"
},
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/KeyUser"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
}
]
}
}
}
Importante: se uma entidade principal válida não for especificada na sua política, o parâmetro BypassPolicyLockoutSafetyCheck pode gerar uma chave não gerenciável. Certifique-se de usar uma entidade principal válida em suas políticas.
Defina o administrador de chave da entidade principal
Para definir o administrador de chave da entidade principal a partir do provedor de identidade federado, use o nome do recurso da Amazon (ARN) da sessão do perfil. Também é possível usar a sessão de assumir perfil de um usuário administrativo específico do seu provedor de identidade externo como a entidade principal do gerenciamento de chaves.
Exemplo de declaração de política:
"Principal": { "AWS": "arn:aws:sts::123456789012:assumed-role/FederatedAccess/FederatedUsername" }
Observação: substitua FederatedAccess pelo seu perfil do IAM e FederatedUsername pelo seu nome de usuário.
Ao usar o perfil de serviço do CloudFormation para criar a pilha, defina a entidade principal como o ARN do perfil de serviço.
Exemplo de declaração de política:
"Principal": { "AWS": "arn:aws:iam::123456789012:role/ServiceRoleName" }
Observação: substitua ServiceRoleName pelo seu perfil de serviço.
Para definir o usuário-raiz da conta da AWS como administrador de chave da entidade principal, inclua a seguinte declaração em sua política:
"Principal": { "AWS": "arn:aws:iam::123456789012:root" }
Observação: quando você define o administrador de chave da entidade principal como o ARN raiz, qualquer entidade principal na conta com permissões de IAM suficientes pode modificar a chave.
Quando há uma entidade principal com a permissão kms:PutKeyPolicy na política de chave, é possível usar o CloudFormation para criar sua chave do AWS KMS. Defina a propriedade BypassPolicyLockoutSafetyCheck como true no modelo do CloudFormation.
Exemplo de modelo:
myKMSKey: Type: 'AWS::KMS::Key'
Properties:
Description: This key is managed by the KeyAdmin role
BypassPolicyLockoutSafetyCheck: true
KeyPolicy:
Version: 2012-10-17
Id: key-policy-1
Statement:
- Sid: Allow access for Key Administrators
Effect: Allow
Principal:
AWS: 'arn:aws:iam::123456789012:role/KeyAdmin'
Action:
- 'kms:Create*'
- 'kms:Describe*'
- 'kms:Enable*'
- 'kms:List*'
- 'kms:Put*'
- 'kms:Update*'
- 'kms:Revoke*'
- 'kms:Disable*'
- 'kms:Get*'
- 'kms:Delete*'
- 'kms:ScheduleKeyDeletion'
- 'kms:CancelKeyDeletion'
Resource: '*'
- Sid: Allow use of the key
Effect: Allow
Principal:
AWS: 'arn:aws:iam::123456789012:role/KeyUser'
Action:
- 'kms:DescribeKey'
- 'kms:Encrypt'
- 'kms:Decrypt'
- 'kms:ReEncrypt*'
- 'kms:GenerateDataKey'
- 'kms:GenerateDataKeyWithoutPlaintext'
Resource: '*'
EnableKeyRotation: true
PendingWindowInDays: 30
Informações relacionadas
AWS Key Management Service
Acesso e permissões de chave do KMS