Ir para o conteúdo

Como resolvo o erro que recebo quando uso o AWS CloudFormation para criar uma chave do AWS KMS?

4 minuto de leitura
0

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:

  1. Abra o console do CloudFormation.
  2. Use o recurso AWS::KMS::Key para criar a chave do AWS KMS.
  3. Escolha um usuário ou perfil do IAM que seja possível usar para gerenciar sua chave.
  4. Inclua uma entidade principal administrativa nas instruções Allow com a ação kms:PutKeyPolicy.
  5. 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

AWS OFICIALAtualizada há 6 meses