Inventário dinâmico Ansible da AWS: './ec2.py --list' não autorizado

4

Estou tentando usar o ./ec2.py --list --refresh-cache do Ansible para listar minhas instâncias do AWS EC2.

Por meio da documentação, passei por esta lista de verificação:

  • AWS (docs via Controle do acesso aos recursos do Amazon EC2 da Amazon & Códigos de erro
    • Crie um usuário do IAM e um grupo do IAM correspondente
    • Associou esse usuário a esse grupo
    • Adicionou uma política muito aberta ao Grupo IAM *
  • CLI (docs via Inventário dinâmico da Ansible )
    • Instale pip e boto
    • Crie um arquivo ~/.boto incluindo aws_access_key_id e aws_secret_access_key que recebi das credenciais de acesso do usuário do AWS IAM
    • Instalou ec2.py e ec2.ini no mesmo caminho e deixou os dois arquivos intactos
    • Executar ./ec2.py --list --refresh-cache

* Minha política:

{
  "Statement": [
    {
      "Sid": "Stmt1427001800780",
      "Action": "*",
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

Eu fiz isso e esperava poder listar as instâncias do EC2 por meio de ec2.py , que basicamente direciona por boto , mas na verdade viu Error connecting to AWS backend. You are not authorized to perform this operation . No entanto, posso ssh diretamente na minha instância do EC2 via ssh ubuntu@[ip] .

Estou realmente batendo minha cabeça contra a parede aqui. O que estou fazendo errado?

EDIT: adicionando algumas informações novas conforme sugestão da @ EEAA

Quando uso pprint.pprint(e) na resposta da Amazon:

EC2ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this operation.</Message></Error></Errors><RequestID>b985d559-c410-4462-8b10-e0819fd81f12</RequestID></Response>

Meu ~/.boto está configurado da seguinte forma:

[Credentials]
aws_access_key_id = removed
aws_secret_access_key = removed
    
por Morgan Delaney 22.03.2015 / 06:27

5 respostas

7

Eu estava recebendo 'Proibido' como a resposta para './ec2.py --list'. Parece um erro quando não está usando o RDS e uma solicitação de consulta para descrever recursos do RDS é feita (como é o padrão com este plug-in). Apenas desative o pedido em ec2.ini assim:

    rds = False
    
por 09.06.2015 / 13:53
6

Se não estiver usando o ElasticCache, você também precisa configurá-lo para False. Então descomente

elasticache = False
    
por 27.07.2015 / 08:58
0

Descobri que era necessário anexar usuários e grupos do IAM à política AmazonEC2FullAccess (ou qualquer outra política com uma ação ec2:Describe* , para permitir que as instâncias fossem listadas no Ansible.

É claro que as outras respostas sobre a configuração dos sinalizadores elasticcache e rds config para false também foram necessárias, não obtendo as seguintes respostas: ERROR: "Forbidden", while: getting RDS instances ou ERROR: "Forbidden", while: getting ElastiCache clusters .

    
por 15.08.2016 / 18:15
0

Você pode omitir isso, criando o arquivo ec2.ini com:

[ec2]
elasticache = False

e executando com: EC2_INI_PATH=ec2.ini ./ec2.py --list

Com base em: link

    
por 09.03.2018 / 23:17
0

Apenas resolvi este problema exato. No meu caso, o usuário Ansible AIM foi criado com permissões de administrador completas dentro da zona única da AWS. Eu escolhi a zona não utilizada anteriormente para este experimento:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "ec2:*",
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "ec2:Region": "us-east-2"
                }
            }
        }
    ]
}

Além de desabilitar RDS e elasticache (como descrito nas outras respostas aqui), também limitei o ec2.ini a uma única zona:

regions = us-east-2

Esta foi a última peça do quebra-cabeça "acesso proibido".

    
por 03.04.2018 / 06:20