Como especificar uma função do IAM para uma instância do Amazon EC2 sendo iniciada por meio da AWS CLI?

18

Estou usando o comando "aws ec2 run-instances" (da interface de linha de comando (CLI) da AWS ) para lançar uma instância do Amazon EC2 . Desejo definir uma função do IAM para a instância do EC2 Estou lançando. A função do IAM está configurada e posso usá-la com sucesso ao iniciar uma instância na interface da Web da AWS. Mas quando tento fazer isso usando esse comando e a opção "--iam-instance-profile", ele falhou. Fazer "aws ec2 run-instances help" mostra os campos Arn = e Name = para o valor. Quando eu tento olhar para o Arn usando "aws iam lista-instância-perfis", esta mensagem de erro:

A client error (AccessDenied) occurred: User: arn:aws:sts::xxxxxxxxxxxx:assumed-role/shell/i-15c2766d is not authorized to perform: iam:ListInstanceProfiles on resource: arn:aws:iam::xxxxxxxxxxxx:instance-profile/

(onde xxxxxxxxxxxx é o meu número de conta de 12 dígitos da AWS)

Eu procurei a string Arn pela interface do usuário da web e usei isso via "--iam-instance-profile Arn = arn: aws: iam :: xxxxxxxxxxxx: instance-profile / shell" no comando run-instances e que falhou com:

A client error (UnauthorizedOperation) occurred: You are not authorized to perform this operation.

Se eu deixar completamente de fora a opção "--iam-instance-profile", a instância será iniciada, mas não terá a configuração de função do IAM de que preciso. Portanto, a permissão parece ter algo a ver com o uso de "--iam-instance-profile" ou com o acesso a dados do IAM. Repeti várias vezes em caso de falhas na AWS (acontecem algumas vezes) e sem sucesso.

Suspeitei que talvez haja uma restrição de que uma instância com uma função do IAM não tenha permissão para iniciar uma instância com uma função mais poderosa do IAM. Mas, neste caso, a instância em que estou executando o comando tem a mesma função do IAM que estou tentando usar. chamado "shell" (embora eu também tentei usar outro, sem sorte).

  • Está definindo uma função do IAM que nem sequer é permitida em uma instância (por meio de Credenciais de função do IAM)?

  • Existe alguma permissão maior de função do IAM necessária para usar as funções do IAM, do que é necessário apenas para iniciar uma instância simples?

  • É "--iam-instance-profile" a maneira apropriada de especificar um IAM papel?

  • Eu preciso usar um subconjunto da string Arn ou formatá-la de alguma outra forma?

  • É possível configurar uma função do IAM que possa desempenhar qualquer função do IAM acessos (talvez um "Super Root IAM" ... criando este nome)?

FYI, tudo envolve o Linux em execução nas instâncias. Além disso, estou executando tudo isso em uma instância porque não consegui instalar essas ferramentas na minha área de trabalho. Isso e eu não queremos colocar minhas credenciais de usuário do IAM em nenhum armazenamento da AWS, conforme recomendado pela AWS aqui .

depois de respondido:

Não mencionei a permissão de instância de inicialização de "PowerUserAccess" (vs. "AdministratorAccess") porque não sabia que o acesso adicional era necessário no momento em que a pergunta foi feita. Presumi que o papel do IAM fosse "informação" associada ao lançamento. Mas é realmente mais que isso. É uma concessão de permissão.

    
por Skaperen 12.10.2013 / 04:06

2 respostas

20

Atualizar

Mike Pope publicou um artigo interessante sobre Conceder permissão para iniciar instâncias do EC2 com funções do IAM (permissão do PassRole) na segurança da AWS Blog , que explica o assunto do ponto de vista da AWS.

Resposta inicial

A resposta de Skaperen está parcialmente correta (+1), mas um pouco imprecisa / enganosa da seguinte forma (a explicação parece um pouco muito complexo para um comentário, daí esta resposta separada):

To launch an EC2 instance with an IAM role requires administrative access to the IAM facility.

Isso está correto e aponta para o problema subjacente, mas as permissões administrativas necessárias são bastante limitadas, então a seguinte conclusão ...

Because IAM roles grant permissions, there is clearly a security issue to be addressed. You would not want IAM roles being a means to allow permission escalation.

... é um pouco enganador, na medida em que o possível problema de segurança pode ser tratado adequadamente. O assunto é abordado em Concessão de aplicativos que são executados no acesso de instâncias do Amazon EC2 aos recursos da AWS :

You can use IAM roles to manage credentials for applications that run on Amazon EC2 instances. When you use roles, you don't have to distribute AWS credentials to Amazon EC2 instances. Instead, you can create a role with the permissions that applications will need when they run on Amazon EC2 and make calls to other AWS resources. When developers launch an Amazon EC2 instance, they can specify the role you created to associate with the instance. Applications that run on the instance can then use the role credentials to sign requests.

Agora, dentro do caso de uso em mãos, os desenvolvedores mencionados [que] iniciam uma instância do Amazon EC2 são, na verdade, instâncias do EC2, o que parece gerar o problema de segurança que Skaperen descreveu. Isso não é realmente o caso, embora conforme ilustrado pela política de amostra na seção Permissões necessárias para usar funções com o Amazon EC2 :

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:ListInstanceProfiles",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"ec2:*",
      "Resource":"*"
    }]
}

Portanto, iam:PassRole é, de fato, a única permissão do IAM necessária e, embora tecnicamente de natureza administrativa, isso não é muito abrangente - é claro, a política de amostra acima ainda permite escalar permissões por meio de listagem e em por sua vez, passando qualquer função disponível, mas isso pode ser evitado especificando apenas as funções desejadas / seguras de passar para o caso de uso em questão - isso é descrito na seção Restringindo Quais Funções Podem Ser Passadas para as Instâncias do Amazon EC2 PassRole) :

You can use the PassRole permission to prevent users from passing a role to Amazon EC2 that has more permissions than the user has already been granted, and then running applications under the elevated privileges for that role. In the role policy, allow the PassRole action and specify a resource (such as arn:aws:iam::111122223333:role/ec2Roles/*) to indicate that only a specific role or set of roles can be passed to an Amazon EC2 instance.

A respectiva política de amostra ilustra exatamente o caso de uso disponível, por exemplo, concede permissão para iniciar uma instância com uma função usando a API do Amazon EC2 :

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect":"Allow",
      "Action":"ec2:RunInstances",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"arn:aws:iam::123456789012:role/Get-pics"
    }]
}
    
por 23.10.2013 / 17:20
1

Para iniciar uma instância do EC2 com uma função do IAM, é necessário acesso administrativo ao recurso do IAM. Isso se aplica mesmo que a nova instância tenha exatamente o mesmo papel da instância que está executando o lançamento. A instância que eu estava lançando tinha a permissão "PowerUserAccess", que permitia o lançamento de uma instância, mas não o acesso à função do IAM. Depois de avançar a permissão na instância de inicialização para "AdministratorAccess", funcionou.

Como os papéis do IAM concedem permissões, há claramente um problema de segurança a ser resolvido. Você não deseja que os papéis do IAM sejam um meio de permitir o escalonamento de permissões. Mas isso também significa que, para conceder qualquer função do IAM, a instância de inicialização deve ter "AdministratorAccess" ou estar usando chaves de acesso / segredo de usuário (com essa permissão) de dentro da instância (não recomendada), o que permitiria a atribuição de qualquer função do IAM.

Ser capaz de iniciar uma instância com a mesma permissão (a mesma função do IAM) mantida pela instância que está fazendo o lançamento seria útil, mas o EC2 ou o IAM não tem esse nível de granularidade ou não tem os meios para verifique com segurança isso.

    
por 14.10.2013 / 01:53