Controle o acesso ao CloudFormation com o AWS Identity and Access Management
Com o AWS Identity and Access Management (IAM), você pode criar usuários do IAM e controlar seu acesso a recursos específicos da sua Conta da AWS. Usando o IAM, você pode controlar o que os usuários podem fazer com o CloudFormation, por exemplo, se podem visualizar modelos de pilhas, criar pilhas ou excluir pilhas.
Além das ações específicas do CloudFormation, você pode gerenciar quais serviços e recursos da AWS estão disponíveis para cada usuário. Assim, você pode controlar quais recursos os usuários podem acessar ao usar o CloudFormation. Por exemplo, você pode especificar quais usuários podem criar instâncias Amazon EC2, encerrar instâncias de banco de dados ou atualizar VPCs. As mesmas permissões serão aplicadas sempre que eles usam o CloudFormation para executar essas ações.
Use as informações das seções a seguir para controlar quem pode acessar o CloudFormation. Também exploraremos como autorizar a criação de recursos do IAM em modelos, como dar às aplicações executadas nas instâncias do EC2 as permissões necessárias e como usar credenciais de segurança temporárias para aumentar a segurança em seu ambiente AWS.
Definir políticas baseadas em identidade do IAM para o CloudFormation
Para dar acesso ao CloudFormation, você precisa criar e atribuir políticas do IAM que concedam às identidades do IAM (como usuários ou perfis) permissão para chamar as ações de API necessárias.
Com as políticas baseadas em identidade do IAM, é possível especificar ações ou recursos permitidos ou negados, bem como as condições sob as quais as ações são permitidas ou negadas. O CloudFormation é compatível com ações, recursos e chaves de condição específicos.
Se você é novato no IAM, comece por se familiarizar com os elementos de uma política JSON do IAM. Para obter mais informações, consulte Referência de elemento de política JSON do IAM no Guia do usuário do IAM. Para aprender a criar políticas do IAM, faça o tutorial Criar e anexar sua primeira política gerenciada pelo cliente na documentação do IAM.
Tópicos
Ações de política para o CloudFormation
No elemento Action
da instrução da política do IAM, você pode especificar qualquer ação de API oferecida pelo CloudFormation. O nome da ação deve começar com o prefixo cloudformation:
em minúsculas. Por exemplo: cloudformation:CreateStack
, cloudformation:CreateChangeSet
e cloudformation:UpdateStack
.
Para especificar várias ações em uma única declaração, separe-as com vírgulas, da seguinte maneira:
"Action": [ "cloudformation:
action1
", "cloudformation:action2
" ]
Também é possível especificar várias ações usando asteriscos. Por exemplo, é possível especificar todas as ações cujos nomes comecem com a palavra Get
, da seguinte maneira:
"Action": "cloudformation:Get*"
Para ver uma lista completa das ações associadas ao prefixo de serviço cloudformation
, consulte Actions, resources, and condition keys for AWS CloudFormation e Actions, resources, and condition keys for AWS API Cloud Control na Service Authorization Reference.
Exemplos
O exemplo a seguir mostra uma política de permissões que concede permissões para visualizar pilhas do CloudFormation.
exemplo 1: um exemplo de política que concede permissões para visualizar pilhas
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":[ "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResource", "cloudformation:DescribeStackResources" ], "Resource":"*" }] }
Os usuários que criam ou excluem pilhas precisam ter permissões adicionais de acordo com seus modelos de pilha. Por exemplo, se o modelo descrever uma fila do Amazon SQS, os usuários deverão ter permissões para as ações do CloudFormation e do Amazon SQS, conforme mostrado no exemplo de política a seguir.
exemplo 2: um exemplo de política que permite as ações de criar e visualizar pilhas, e todas as ações do Amazon SQS
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":[ "sqs:*", "cloudformation:CreateStack", "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResources", "cloudformation:GetTemplate", "cloudformation:ValidateTemplate" ], "Resource":"*" }] }
Ações específicas do console para o CloudFormation
Os usuários que usam o console do CloudFormation precisam ter permissões adicionais, além das necessárias para usar as APIs da AWS Command Line Interface ou do CloudFormation. Essas permissões adicionais são compatíveis com atributos específicos do console, como uploads de modelos em buckets do Amazon S3 e listas suspensas para tipos de parâmetros específicos da AWS.
Para todas as ações listadas abaixo, conceda permissões a todos os recursos, sem limitá-las a pilhas ou buckets específicos.
A ação a seguir é usada apenas pelo console do CloudFormation e não é documentada na referência de APIs. A ação permite que os usuários façam upload de modelos para buckets do Amazon S3.
-
cloudformation:CreateUploadBucket
Para carregar modelos, os usuários também precisam ter as seguintes permissões do Amazon S3:
-
s3:PutObject
-
s3:ListBucket
-
s3:GetObject
-
s3:CreateBucket
Para ver os valores nas listas suspensas de parâmetros para modelos com tipos de parâmetros específicos da AWS, os usuários precisam ter permissões para fazer as chamadas de API describe correspondentes. Por exemplo, as seguintes permissões são necessárias quando esses tipos de parâmetros são usados no modelo:
-
ec2:DescribeKeyPairs
: requerida para o tipo de parâmetroAWS::EC2::KeyPair::KeyName
. -
ec2:DescribeSecurityGroups
: requerida para o tipo de parâmetroAWS::EC2::SecurityGroup::Id
. -
ec2:DescribeSubnets
: requerida para o tipo de parâmetroAWS::EC2::Subnet::Id
. -
ec2:DescribeVpcs
: requerida para o tipo de parâmetroAWS::EC2::VPC::Id
.
Para obter mais informações sobre os tipos de parâmetros específicos da AWS, consulte Especificar recursos existentes no runtime com tipos de parâmetros fornecidos pelo CloudFormation.
Recursos de política do CloudFormation
Em uma instrução de política do IAM, o elemento Resource
especifica o objeto ou os objetos abrangidos pela instrução. No CloudFormation, cada instrução de política do IAM se aplica aos recursos que você especifica usando os nomes dos recursos da Amazon (ARNs). O formato do ARN específico depende do recurso.
Para obter uma lista dos tipos de recursos do CloudFormation e seus ARNs, consulte Resource types defined by AWS CloudFormation na Service Authorization Reference. Para saber com quais ações você pode especificar o ARN de cada atributo, consulte Actions defined by AWS CloudFormation.
Você pode especificar ações para uma pilha específica, como mostra o exemplo de política a seguir. Quando fornecer um ARN, substitua o
pelas informações específicas do recurso. placeholder
text
exemplo 1: um exemplo de política que nega as ações de excluir e atualizar pilha para a pilha especificada
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Deny", "Action":[ "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource":"arn:aws:cloudformation:
region
:account-id
:stack/MyProductionStack
/*" }] }
A política acima usa um caractere curinga no fim do nome da pilha para que as ações de excluir e atualizar pilha sejam negadas tanto com o ID da pilha completo (como arn:aws:cloudformation:
) e tanto com o nome da pilha (como region
:account-id
:stack/MyProductionStack
/abc9dbf0-43c2-11e3-a6e8-50fa526be49c
).MyProductionStack
Para permitir que transformações AWS::Serverless
criem um conjunto de alterações, a política deve incluir a permissão ao nível do recurso arn:aws:cloudformation:
, como mostrado na política a seguir.region
:aws:transform/Serverless-2016-10-31
exemplo 2: um exemplo de política que permite a ação de criar um conjunto de alterações para a transformação especificada
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "cloudformation:CreateChangeSet" ], "Resource": "arn:aws:cloudformation:
region
:aws:transform/Serverless-2016-10-31" }] }
Chaves de condição de política do CloudFormation
Em uma instrução de política do IAM, você tem a opção de especificar as condições que controlam quando uma política entra em vigor. Por exemplo, você pode definir uma política que permita que os usuários do criem uma pilha apenas quando especificarem uma determinada URL modelo. Você pode definir condições específicas do CloudFormation e condições gerais da AWS, como DateLessThan
, que determinam quando uma política deixa de vigorar. Para obter mais informações e uma lista de condições gerais da AWS, consulte Condição na Referência a elementos de políticas do IAM, no Guia do usuário do IAM.
nota
Não use a condição aws:SourceIp
em toda a AWS. O CloudFormation provisiona recursos usando seu próprio endereço IP, e não o endereço IP da solicitação de origem. Por exemplo, quando você cria uma pilha, o CloudFormation faz solicitações do seu endereço IP para executar uma instância do Amazon EC2 ou para criar um bucket do Amazon S3, e não do endereço IP da chamada CreateStack
ou do comando create-stack.
A lista a seguir descreve as condições específicas do CloudFormation. Essas condições são aplicadas apenas quando os usuários criam ou atualizam pilhas:
cloudformation:ChangeSetName
-
O nome de um conjunto de alterações do CloudFormation que você deseja associar a uma política. Use essa condição para controlar quais conjuntos de alterações os usuários do podem executar ou excluir.
cloudformation:ImportResourceTypes
-
Os tipos de recursos do modelo que você deseja associar a uma política, como
AWS::EC2::Instance
. Use essa condição para controlar com quais tipos de recursos os usuários do podem trabalhar quando importarem recursos para uma pilha. Essa condição é verificada em relação aos tipos de recursos que os usuários declaram no parâmetroResourcesToImport
, que atualmente tem suporte apenas para solicitações da AWS CLI e da API. Ao usar esse parâmetro, especifique todos os tipos de recursos que deseja que os usuários controlem durante as operações de importação. Para obter mais informações sobre o parâmetroResourcesToImport
, consulte a ação CreateChangeSet na Referência de APIs do AWS CloudFormation.Para obter uma lista de
ResourcesToImport
possíveis, consulte Suporte a tipos de recursos.Use a convenção de nomenclatura de recursos de três partes para especificar com quais tipos de recursos os usuários podem trabalhar, de todos os recursos de uma organização até um tipo de recurso individual.
organization
::*-
Especifique todos os tipos de recursos de uma determinada organização.
organization
::
::*service_name
-
Especifique todos os tipos de recurso do serviço especificado dentro de uma determinada organização.
organization
::
::service_name
resource_type
-
Especifique um tipo de recurso específico.
Por exemplo:
AWS::*
-
Especifique todos os tipos de recursos da AWS compatíveis.
AWS::
service_name
::*-
Especifique todos os recursos com suporte a um produto da AWS específico.
AWS::
service_name
::resource_type
-
Especifique um tipo de recurso da AWS específico, como
AWS::EC2::Instance
(todas as instâncias do EC2).
cloudformation:ResourceTypes
-
Os tipos de recursos modelo, como
AWS::EC2::Instance
, que você deseja associar a uma política. Use essa condição para controlar com quais tipos de recursos os usuários do podem trabalhar ao criar ou atualizar uma pilha. Essa condição é verificada em relação aos tipos de recursos que os usuários declaram no parâmetroResourceTypes
, que atualmente tem suporte apenas para solicitações da AWS CLI e da API. Ao usar esse parâmetro, os usuários devem especificar todos os tipos de recursos que estão em seu modelo. Para obter mais informações sobre o parâmetroResourceTypes
, consulte a ação CreateStack na Referência de APIs do AWS CloudFormation.Para obter uma lista de tipos de recursos, consulte Referência de tipos de propriedades e recursos da AWS.
Use a convenção de nomenclatura de recursos de três partes para especificar com quais tipos de recursos os usuários podem trabalhar, de todos os recursos de uma organização até um tipo de recurso individual.
organization
::*-
Especifique todos os tipos de recursos de uma determinada organização.
organization
::
::*service_name
-
Especifique todos os tipos de recurso do serviço especificado dentro de uma determinada organização.
organization
::
::service_name
resource_type
-
Especifique um tipo de recurso específico.
Por exemplo:
AWS::*
-
Especifique todos os tipos de recursos da AWS compatíveis.
AWS::
service_name
::*-
Especifique todos os recursos com suporte a um produto da AWS específico.
AWS::
service_name
::resource_type
-
Especifique um tipo de recurso da AWS específico, como
AWS::EC2::Instance
(todas as instâncias do EC2). Alexa::ASK::*
-
Especifique todos os tipos de recurso no Kit de habilidades do Alexa.
Alexa::ASK::Skill
-
Especifique o tipo de recurso Alexa::ASK::Skill individual.
Custom::*
-
Especifique todos os recursos personalizados.
Para ter mais informações, consulte Crie uma lógica de provisionamento personalizada com recursos personalizados.
Custom::
resource_type
-
Especifique um tipo de recurso personalizado específico.
Para ter mais informações, consulte Crie uma lógica de provisionamento personalizada com recursos personalizados.
cloudformation:RoleARN
-
O Nome de recurso da Amazon (ARN) de uma função de serviço do IAM que você deseja associar a uma política. Use essa condição para controlar qual serviço os usuários do podem usar ao trabalhar com pilhas ou conjuntos de alterações.
cloudformation:StackPolicyUrl
-
O URL de uma política de pilha Amazon S3 que você deseja associar a uma política. Use essa condição para controlar quais políticas de pilha os usuários do podem associar a uma pilha durante uma ação de criação ou atualização de pilha. Para obter mais informações sobre políticas de pilhas, consulte Impedir atualizações nos recursos de pilha.
nota
Para garantir que os usuários possam apenas criar ou atualizar pilhas com as políticas de pilhas que você carregou, defina o bucket do S3 como somente leitura para esses usuários.
cloudformation:TemplateUrl
-
O URL de um modelo do Amazon S3 que você deseja associar a uma política. Use essa condição para controlar quais modelos os usuários do podem usar ao criar ou atualizar pilhas.
nota
Para garantir que os usuários possam apenas criar ou atualizar pilhas com os modelos que você carregou, defina o bucket do S3 como somente leitura para esses usuários.
nota
As seguintes condições específicas de CloudFormation se aplicam aos parâmetros da API com o mesmo nome:
-
cloudformation:ChangeSetName
-
cloudformation:RoleARN
-
cloudformation:StackPolicyUrl
-
cloudformation:TemplateUrl
Por exemplo,
cloudformation:TemplateUrl
só se aplica ao parâmetroTemplateUrl
para as APIsCreateStack
,UpdateStack
eCreateChangeSet
. -
Para obter exemplos de políticas do IAM que usam chaves de condição, consulte Exemplos de políticas baseadas em identidade do IAM para o CloudFormation.
Confirmar recursos do IAM em modelos do CloudFormation
Antes que você possa criar uma pilha, o CloudFormation deve validar seu modelo. Durante a validação, o CloudFormation verifica os recursos do IAM que seu modelo pode criar. Os recursos do IAM, como um usuário com acesso completo, podem acessar e modificar qualquer recurso na sua Conta da AWS. Portanto, sugerimos que você examine as permissões associadas a cada recurso do IAM antes de prosseguir, para não criar recursos acidentalmente com permissões escalonadas. Para garantir que fez isso, você deve confirmar que o modelo contém esses recursos, fornecendo ao CloudFormation as capacidades especificadas antes de criar a pilha.
Você pode confirmar as capacidades dos modelos do CloudFormation usando o console do CloudFormation, a AWS Command Line Interface (AWS CLI) ou a API:
-
No console do CloudFormation, na página Configurar opções da pilha dos assistentes de criação ou de atualização de pilhas, escolha Eu reconheço que este modelo pode criar recursos do IAM.
-
Na AWS CLI, ao usar os comandos create-stack e update-stack, especifique o valor
CAPABILITY_IAM
ouCAPABILITY_NAMED_IAM
para a opção--capabilities
. Se seu modelo incluir recursos do IAM, você poderá especificar uma dessas capacidades. Se seu modelo incluir nomes personalizados para recursos do IAM, você deverá especificarCAPABILITY_NAMED_IAM
. -
Na API, ao usar as ações CreateStack e UpdateStack, especifique
Capabilities.member.1=CAPABILITY_IAM
ouCapabilities.member.1=CAPABILITY_NAMED_IAM
. Se seu modelo incluir recursos do IAM, você poderá especificar uma dessas capacidades. Se seu modelo incluir nomes personalizados para recursos do IAM, você deverá especificarCAPABILITY_NAMED_IAM
.
Importante
Se seu modelo contiver recursos do IAM nomeados personalizados, não crie várias pilhas reutilizando o mesmo modelo. Os recursos do IAM devem ser globalmente exclusivos na sua conta. Se você usar o mesmo modelo para criar várias pilhas em diferentes regiões, suas pilhas poderão compartilhar os mesmos recursos do IAM, em vez de cada uma ter um recurso exclusivo. Recursos compartilhados entre pilhas podem ter consequências acidentais das quais não é possível se recuperar. Por exemplo, se você excluir ou atualizar recursos compartilhados do IAM em uma pilha, você modificará acidentalmente os recursos de outras pilhas.
Gerenciar credenciais para aplicações executas em instâncias do Amazon EC2
Se você tiver uma aplicação executada em uma instância do Amazon EC2 e precisar fazer solicitações a recursos da AWS, como buckets do Amazon S3 ou uma tabela do DynamoDB, essa aplicação precisará de credenciais de segurança da AWS. No entanto, a distribuição e a inserção de credenciais de segurança de longo prazo em cada instância que você executa é um desafio e um risco potencial à segurança. Em vez de usar credenciais de longo prazo, como credenciais de usuário do IAM, recomendamos que você crie uma função do IAM que seja associada a uma instância do Amazon EC2 quando a instância for iniciada. Um aplicativo pode obter credenciais de segurança temporárias na instância Amazon EC2. Você não precisa inserir credenciais de longo prazo na instância. Além disso, para facilitar o gerenciamento de credenciais, você pode especificar apenas uma única função para várias instâncias Amazon EC2. Você não precisa criar credenciais exclusivas para cada instância.
Para obter um trecho de modelo que mostra como executar uma instância com uma função, consulte Exemplos de modelos de função do IAM.
nota
As aplicações em instâncias que usam credenciais de segurança temporárias podem chamar qualquer ação do CloudFormation. No entanto, como o CloudFormation interage com muitos outros serviços da AWS, é necessário verificar se todos os serviços que você deseja usar oferecem suporte a credenciais de segurança temporárias. Para obter uma lista de serviços que aceitam credenciais de segurança temporárias, consulte os serviços da AWS que funcionam com o IAM no Guia do usuário do IAM.
Conceder acesso temporário (acesso federado)
Em alguns casos, você pode desejar conceder aos usuários sem credenciais da AWS acesso temporário à sua Conta da AWS. Em vez de criar e excluir credenciais de longo prazo sempre que você quiser conceder acesso temporário, use o AWS Security Token Service (AWS STS). Por exemplo, você pode usar funções do IAM. Em uma função do IAM, você pode criar programaticamente e distribuir muitas credenciais de segurança temporárias (que incluem uma chave de acesso, uma chave de acesso secreta e um token de segurança). Essas credenciais têm vida útil limitada e, portanto, não podem ser usadas para acessar sua Conta da AWS depois que expiram. Você também pode criar vários perfis do IAM para conceder diferentes níveis de permissões a usuários individuais. Perfis do IAM são úteis para cenários como identidades federadas e logon único.
Uma identidade federada é uma identidade distinta que você pode usar entre vários sistemas. Para usuários corporativos com um sistema de identidade estabelecido on-premises (como o LDAP ou o Active Directory), você pode tratar de toda a autenticação com seu sistema de identidade local. Quando um usuário é autenticado, você fornece credenciais de segurança temporárias a partir da função ou do usuário do IAM apropriado. Por exemplo, é possível criar um perfil administrators e um perfil developers em que os administradores têm acesso total à conta da AWS e os desenvolvedores têm permissões para trabalhar apenas com pilhas do CloudFormation. Depois que um administrador é autenticado, ele é autorizado a obter credenciais de segurança temporárias do perfil administrators. No entanto, os desenvolvedores podem obter credenciais de segurança temporárias apenas do perfil developers.
Você também pode conceder aos usuários federados acesso ao AWS Management Console. Depois que os usuários se autenticam com o sistema de identidade on-premises, você pode construir programaticamente um URL temporário que forneça acesso direto ao AWS Management Console. Quando os usuários usam o URL temporário, eles não precisam fazer login na AWS porque já foram autenticados (autenticação única). Além disso, como o URL é construído a partir das credenciais de segurança temporárias dos usuários, as permissões que estão disponíveis com essas credenciais determinam quais permissões os usuários têm no AWS Management Console.
Você pode usar várias diferentes APIs do AWS STS para gerar credenciais de segurança temporárias. Para obter mais informações sobre qual API usar, consulte Comparar credenciais do AWS STS no Guia do usuário do IAM.
Importante
Você não pode trabalhar com o IAM ao usar credenciais de segurança temporárias que foram geradas a partir da API GetFederationToken
. Em vez disso, se você precisar trabalhar com o IAM, use credenciais de segurança temporárias de uma função.
O CloudFormation interage com muitos outros serviços da AWS. Ao usar credenciais de segurança temporárias com o CloudFormation, verifique se todos os serviços que deseja usar oferecem suporte a credenciais de segurança temporárias. Para obter uma lista de serviços que aceitam credenciais de segurança temporárias, consulte os serviços da AWS que funcionam com o IAM no Guia do usuário do IAM.
Para obter mais informações, consulte os seguintes recursos relacionados no Guia do usuário do IAM: