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"
}]
}