Minha entidade do AWS Identity and Access Management (AWS IAM) tem permissões para uma instância do Amazon Elastic Compute Cloud (Amazon EC2). Tentei iniciar a instância, mas ela mudou do estado Pendente para Interrompida.
Resolução
Determinar a causa do estado Interrompida da sua instância do EC2
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Se você anexou um volume do Amazon Elastic Block Store (Amazon EBS) à sua instância do EC2, verifique a criptografia do volume. Se você criptografou o volume do EBS com uma chave do AWS Key Management Service (AWS KMS), pode haver um problema de permissão. A entidade principal do IAM que chama a ação da API StartInstances deve ter permissões kms:CreateGrant para criar uma concessão para o Amazon EC2. A concessão permite que o Amazon EC2 decifre a chave de dados do volume com sua chave do AWS KMS.
Os volumes do EBS enviam uma chamada de API GenerateDataKeyWithoutPlaintext para o AWS KMS, que cria uma nova chave de dados e a criptografa na chave do AWS KMS. O AWS KMS envia a chave de dados criptografada para o volume do EBS. Em seguida, o volume anexa a chave de dados à instância. A chave de dados está presente na mesma conta da AWS que a instância e a chave do AWS KMS.
Para determinar por que a instância está em um estado Interrompida, execute o comando describe-instances da AWS CLI:
aws ec2 describe-instances --instance-id your-instance-id --query "Reservations[*].Instances[*].StateReason"
Observação: substitua your-instance-id pelo ID da sua instância.
Exemplo de saída:
[
[
{
"Message": "Client.InternalError: Client error on launch",
"Code": "Client.InternalError"
}
]
]
O erro anterior pode significar que você criptografou o volume raiz ou volumes anexados adicionais. Você não tem permissão para acessar a chave do AWS KMS para decodificação.
Também é possível filtrar eventos do AWS CloudTrail pelo nome do evento CreateGrant.
Exemplo de saída:
"errorMessage": "User: arn:aws:iam::123456789012:user/test is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:eu-west-1:123456789012:key/8e3426b8-87b4-434c-ae74-8e63dadf354a"
O erro anterior significa que a entidade principal do IAM não tem a permissão CreateGrant para o Amazon EC2 descriptografar a chave de dados. Portanto, a instância não pode ser iniciada.
Observação: se você usar uma chave gerenciada pela AWS, esse erro só ocorrerá se houver uma negação explícita nas políticas de IAM ou na política de controle de serviços (SCP) da entidade principal. As chaves gerenciadas pela AWS não exigem permissões adicionais do IAM para uso.
Identificar o tipo de chave do AWS KMS
Conclua as etapas a seguir:
- Abra o console do Amazon EC2.
- No painel de navegação, selecione Instâncias.
- Selecione o ID da instância e, em seguida, Armazenamento.
- Em ID do volume, selecione o ID do volume criptografado.
- Em ID da chave KMS, copie o ID da chave do AWS KMS.
- Abra o console do AWS KMS na mesma região da AWS.
- No painel de navegação, selecione Chaves gerenciadas pelo cliente. Em seguida, pesquise o ID da chave do AWS KMS na etapa 4.
- Selecione o ID da chave do AWS KMS.
- Em Configuração geral, em Descrição, observe o tipo de chave do AWS KMS.
Anexar uma política do IAM
Anexe uma política do IAM à entidade principal do IAM semelhante ao exemplo a seguir:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:CreateGrant"
],
"Resource": [
"arn:aws:kms:region:123456789012:key/ExampleKey"
],
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}
]
}
A chave de condição kms:GrantIsForAWSResource garante que a entidade principal do IAM só crie concessões para a chave do AWS KMS com recursos da AWS. Essa política não permite que a entidade principal do IAM crie subsídios para outra entidade principal do IAM. Para restringir o acesso ao Amazon EC2, use a chave de condição kms:ViaService.
Você deve ativar as permissões do IAM que você adiciona à entidade principal do IAM por meio da política de chaves da sua conta, conforme mostrado no exemplo a seguir:
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::123456789012:root"},
"Action": "kms:*",
"Resource": "*"
}
Também é possível adicionar a entidade principal do IAM na política de chaves para permitir a ação da API CreateGrant.
Se sua chave do AWS KMS e a entidade principal do IAM estiverem na mesma conta, será possível incluir explicitamente sua entidade principal na política de chaves. Você não precisa de permissões do IAM para acessar a chave do AWS KMS.
Para conceder permissões explícitas por meio da política de chaves, adicione a seguinte declaração à sua política de chaves:
{
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/Role_Name"
},
"Effect": "Allow",
"Action": [
"kms:CreateGrant"
],
"Resource": [
"*"
],
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}
É uma prática recomendada conceder o privilégio mínimo às permissões necessárias para realizar uma tarefa.
Se você usa grupos do Amazon EC2 Auto Scaling para criar suas instâncias, consulte Required AWS KMS key policy for use with encrypted volumes (Política de chaves obrigatórias do AWS KMS para uso com volumes criptografados).
Informações relacionadas
Criptografia do Amazon EBS
A instância é encerrada imediatamente