Trechos de modelo do AWS Identity and Access Management - AWS CloudFormation

Trechos de modelo do AWS Identity and Access Management

Esta seção contém trechos de modelos do AWS Identity and Access Management.

Importante

Ao criar ou atualizar uma pilha usando um modelo que contém recursos do IAM, confirme o uso de recursos do IAM. Para obter mais informações sobre o uso de recursos do IAM em modelos, consulte Controlar o acesso com o AWS Identity and Access Management.

Declarar um recurso de usuário do IAM

Este snippet mostra como declarar um recurso AWS::IAM::User para criar um usuário do IAM. O usuário é declarado com o caminho ("/") e um perfil de login com a senha (myP@ssW0rd).

O documento de política chamado giveaccesstoqueueonly oferece ao usuário permissão para executar todas as ações do Amazon SQS no myqueue do recurso de fila do Amazon SQS e nega o acesso a todos os outros recursos de fila do Amazon SQS. A função Fn::GetAtt obtém o atributo Arn do AWS::SQS::Queue do recurso myqueue.

O documento de política chamado giveaccesstotopiconly é adicionado ao usuário para que ele tenha permissão para executar todas as ações Amazon SNS no recurso mytopic do tópico do Amazon SNS e negar acesso a todos os outros recursos do Amazon SNS. A função Ref obtém o Nome de região da Amazon (ARN) do mytopic do recurso AWS::SNS::Topic.

JSON

"myuser" : { "Type" : "AWS::IAM::User", "Properties" : { "Path" : "/", "LoginProfile" : { "Password" : "myP@ssW0rd" }, "Policies" : [ { "PolicyName" : "giveaccesstoqueueonly", "PolicyDocument" : { "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "sqs:*" ], "Resource" : [ { "Fn::GetAtt" : [ "myqueue", "Arn" ] } ] }, { "Effect" : "Deny", "Action" : [ "sqs:*" ], "NotResource" : [ { "Fn::GetAtt" : [ "myqueue", "Arn" ] } ] } ] } }, { "PolicyName" : "giveaccesstotopiconly", "PolicyDocument" : { "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "sns:*" ], "Resource" : [ { "Ref" : "mytopic" } ] }, { "Effect" : "Deny", "Action" : [ "sns:*" ], "NotResource" : [ { "Ref" : "mytopic" } ] } ] } } ] } }

YAML

myuser: Type: AWS::IAM::User Properties: Path: "/" LoginProfile: Password: myP@ssW0rd Policies: - PolicyName: giveaccesstoqueueonly PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - sqs:* Resource: - !GetAtt myqueue.Arn - Effect: Deny Action: - sqs:* NotResource: - !GetAtt myqueue.Arn - PolicyName: giveaccesstotopiconly PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - sns:* Resource: - !Ref mytopic - Effect: Deny Action: - sns:* NotResource: - !Ref mytopic

Declarar um recurso de chave de acesso do IAM

Este trecho mostra um recurso AWS::IAM::AccessKey. O recurso myaccesskey cria uma chave de acesso e a atribui a um usuário do IAM que é declarado como um recurso AWS::IAM::User no modelo.

JSON

"myaccesskey" : { "Type" : "AWS::IAM::AccessKey", "Properties" : { "UserName" : { "Ref" : "myuser" } } }

YAML

myaccesskey: Type: AWS::IAM::AccessKey Properties: UserName: !Ref myuser

É possível obter a chave secreta para um recurso AWS::IAM::AccessKey usando a função Fn::GetAtt. O único momento em que você pode obter a chave secreta para uma chave de acesso da AWS é quando ela é criada. Uma forma de recuperar a chave secreta é colocá-la em um valor Output. Você pode obter a chave de acesso usando a função Ref. As seguintes declarações do valor Output obtêm a chave de acesso e a chave secreta para myaccesskey.

JSON

"AccessKeyformyaccesskey" : { "Value" : { "Ref" : "myaccesskey" } }, "SecretKeyformyaccesskey" : { "Value" : { "Fn::GetAtt" : [ "myaccesskey", "SecretAccessKey" ] } }

YAML

AccessKeyformyaccesskey: Value: !Ref myaccesskey SecretKeyformyaccesskey: Value: !GetAtt myaccesskey.SecretAccessKey

Você também pode passar a chave de acesso do AWS e a chave secreta para uma instância do Amazon EC2 ou um grupo do Auto Scaling definido no modelo. A seguinte declaração AWS::EC2::Instance usa a propriedade UserData para passar a chave de acesso e a chave secreta para o recurso myaccesskey.

JSON

"myinstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "AvailabilityZone" : "us-east-1a", "ImageId" : "ami-0ff8a91507f77f867", "UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", [ "ACCESS_KEY=", { "Ref" : "myaccesskey" }, "&", "SECRET_KEY=", { "Fn::GetAtt" : [ "myaccesskey", "SecretAccessKey" ] } ] ] } } } }

YAML

myinstance: Type: AWS::EC2::Instance Properties: AvailabilityZone: "us-east-1a" ImageId: ami-0ff8a91507f77f867 UserData: Fn::Base64: !Sub "ACCESS_KEY=${myaccesskey}&SECRET_KEY=${myaccesskey.SecretAccessKey}"

Declarar um recurso de grupo do IAM

Este trecho mostra um recurso AWS::IAM::Group. O grupo tem um caminho ("/myapplication/"). O documento de política chamado myapppolicy é adicionado ao grupo para permitir que os usuários do grupo executem todas as ações do Amazon SQS no recurso de fila myqueue do Amazon SQS e negar todos os outros recursos do Amazon SQS, exceto myqueue.

Para atribuir uma política a um recurso, o IAM exige o nome do recurso da Amazon (ARN) para o recurso. No trecho, a função Fn::GetAtt obtém o Nome de recurso da Amazon (ARN) da fila do recurso AWS::SQS::Queue.

JSON

"mygroup" : { "Type" : "AWS::IAM::Group", "Properties" : { "Path" : "/myapplication/", "Policies" : [ { "PolicyName" : "myapppolicy", "PolicyDocument" : { "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "sqs:*" ], "Resource" : [ { "Fn::GetAtt" : [ "myqueue", "Arn" ] } ] }, { "Effect" : "Deny", "Action" : [ "sqs:*" ], "NotResource" : [ { "Fn::GetAtt" : [ "myqueue", "Arn" ] } ] } ] } } ] } }

YAML

mygroup: Type: AWS::IAM::Group Properties: Path: "/myapplication/" Policies: - PolicyName: myapppolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - sqs:* Resource: !GetAtt myqueue.Arn - Effect: Deny Action: - sqs:* NotResource: !GetAtt myqueue.Arn

Adicionar usuários a um grupo

O recurso AWS::IAM::UserToGroupAddition adiciona os usuários a um grupo. No trecho a seguir, o recurso addUserToGroup adiciona os seguintes usuários a um grupo existente chamado myexistinggroup2: o existinguser1 do usuário existente e o myuser do usuário que é declarado como um recurso AWS::IAM::User no modelo.

JSON

"addUserToGroup" : { "Type" : "AWS::IAM::UserToGroupAddition", "Properties" : { "GroupName" : "myexistinggroup2", "Users" : [ "existinguser1", { "Ref" : "myuser" } ] } }

YAML

addUserToGroup: Type: AWS::IAM::UserToGroupAddition Properties: GroupName: myexistinggroup2 Users: - existinguser1 - !Ref myuser

Declarar uma política do IAM

Este trecho mostra como criar uma política e aplicá-la a vários grupos usando um recurso AWS::IAM::Policy chamado mypolicy. O recurso mypolicy contém uma propriedade PolicyDocument que permite as ações GetObject, PutObject e PutObjectAcl sobre os objetos no bucket do S3 representado pelo ARN arn:aws:s3:::myAWSBucket. O recurso mypolicy aplica a política a um grupo existente chamado myexistinggroup1 e a um grupo mygroup que é declarado no modelo como um recurso AWS::IAM::Group. Este exemplo mostra como aplicar uma política a um grupo usando a propriedade Groups; no entanto, você também pode usar a propriedade Users para adicionar um documento de política a uma lista de usuários.

Importante

As ações de política do Amazon SNS que são declaradas no recurso AWS::IAM::Policy se diferem das ações de política do tópico do Amazon SNS que são declaradas no recursoAWS::SNS::TopicPolicy. Por exemplo, as ações de política sns:Unsubscribe e sns:SetSubscriptionAttributes são válidas para o recurso AWS::IAM::Policy, mas são inválidas para o recurso AWS::SNS::TopicPolicy. Para obter mais informações sobre as ações de política do Amazon SNS válidas que você pode usar com o recurso AWS::IAM::Policy, consulte Informações especiais para políticas do Amazon SNS no Guia do desenvolvedor do Amazon Simple Notification Service.

JSON

"mypolicy" : { "Type" : "AWS::IAM::Policy", "Properties" : { "PolicyName" : "mygrouppolicy", "PolicyDocument" : { "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "s3:GetObject" , "s3:PutObject" , "s3:PutObjectAcl" ], "Resource" : "arn:aws:s3:::myAWSBucket/*" } ] }, "Groups" : [ "myexistinggroup1", { "Ref" : "mygroup" } ] } }

YAML

mypolicy: Type: AWS::IAM::Policy Properties: PolicyName: mygrouppolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - s3:GetObject - s3:PutObject - s3:PutObjectAcl Resource: arn:aws:s3:::myAWSBucket/* Groups: - myexistinggroup1 - !Ref mygroup

Declarar uma política do bucket do Amazon S3

Este trecho mostra como criar uma política e aplicá-la a um bucket do Amazon S3 usando o recurso AWS::S3::BucketPolicy. O recurso mybucketpolicy declara um documento de política que permite que o usuário user1 do IAM execute a ação GetObject em todos os objetos no bucket do S3 aos quais essa política se aplica. No trecho, a função Fn::GetAtt obtém o Nome de região da Amazon (ARN) do recurso user1. O recurso mybucketpolicy aplica a política ao mybucket do recurso AWS::S3::BucketPolicy. A função Ref obtém o nome do bucket do recurso mybucket.

JSON

"mybucketpolicy" : { "Type" : "AWS::S3::BucketPolicy", "Properties" : { "PolicyDocument" : { "Id" : "MyPolicy", "Version": "2012-10-17", "Statement" : [ { "Sid" : "ReadAccess", "Action" : [ "s3:GetObject" ], "Effect" : "Allow", "Resource" : { "Fn::Join" : [ "", [ "arn:aws:s3:::", { "Ref" : "mybucket" } , "/*" ] ] }, "Principal" : { "AWS" : { "Fn::GetAtt" : [ "user1", "Arn" ] } } } ] }, "Bucket" : { "Ref" : "mybucket" } } }

YAML

mybucketpolicy: Type: AWS::S3::BucketPolicy Properties: PolicyDocument: Id: MyPolicy Version: '2012-10-17' Statement: - Sid: ReadAccess Action: - s3:GetObject Effect: Allow Resource: !Sub "arn:aws:s3:::${mybucket}/*" Principal: AWS: !GetAtt user1.Arn Bucket: !Ref mybucket

Declarar uma política de tópico do Amazon SNS

Este trecho mostra como criar uma política e aplicá-la a um tópico do Amazon SNS usando o recurso AWS::SNS::TopicPolicy. O recurso mysnspolicy contém uma propriedade PolicyDocument que permite que o recurso AWS::IAM::User myuser execute a ação Publish em um AWS::SNS::Topic do recurso mytopic. No trecho, a função Fn::GetAtt obtém o Nome de região da Amazon (ARN) para o recurso myuser e a função Ref obtém o Nome de região da Amazon (ARN) para o recurso mytopic.

Importante

As ações de política do Amazon SNS que são declaradas no recurso AWS::IAM::Policy se diferem das ações de política do tópico do Amazon SNS que são declaradas no recursoAWS::SNS::TopicPolicy. Por exemplo, as ações de política sns:Unsubscribe e sns:SetSubscriptionAttributes são válidas para o recurso AWS::IAM::Policy, mas são inválidas para o recurso AWS::SNS::TopicPolicy. Para obter mais informações sobre as ações de política do Amazon SNS válidas que você pode usar com o recurso AWS::IAM::Policy, consulte Informações especiais para políticas do Amazon SNS no Guia do desenvolvedor do Amazon Simple Notification Service.

JSON

"mysnspolicy" : { "Type" : "AWS::SNS::TopicPolicy", "Properties" : { "PolicyDocument" : { "Id" : "MyTopicPolicy", "Version" : "2012-10-17", "Statement" : [ { "Sid" : "My-statement-id", "Effect" : "Allow", "Principal" : { "AWS" : { "Fn::GetAtt" : [ "myuser", "Arn" ] } }, "Action" : "sns:Publish", "Resource" : "*" } ] }, "Topics" : [ { "Ref" : "mytopic" } ] } }

YAML

mysnspolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: My-statement-id Effect: Allow Principal: AWS: !GetAtt myuser.Arn Action: sns:Publish Resource: "*" Topics: - !Ref mytopic

Declarar uma política do Amazon SQS

Este trecho mostra como criar uma política e aplicá-la a uma fila do Amazon SQS usando o recurso AWS::SQS::QueuePolicy. A propriedade PolicyDocument permite que o myapp do usuário existente (especificado pelo Nome de região da Amazon (ARN) dele) execute a ação SendMessage em uma fila existente, que é especificada pelo seu URL, e um myqueue do recurso AWS::SQS::Queue. A função Ref obtém o URL para o recurso myqueue.

JSON

"mysqspolicy" : { "Type" : "AWS::SQS::QueuePolicy", "Properties" : { "PolicyDocument" : { "Id" : "MyQueuePolicy", "Version" : "2012-10-17", "Statement" : [ { "Sid" : "Allow-User-SendMessage", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::123456789012:user/myapp" }, "Action" : [ "sqs:SendMessage" ], "Resource" : "*" } ] }, "Queues" : [ "https://sqs.us-east-2.amazonaws.com/123456789012/myexistingqueue", { "Ref" : "myqueue" } ] } }

YAML

mysqspolicy: Type: AWS::SQS::QueuePolicy Properties: PolicyDocument: Id: MyQueuePolicy Version: '2012-10-17' Statement: - Sid: Allow-User-SendMessage Effect: Allow Principal: AWS: arn:aws:iam::123456789012:user/myapp Action: - sqs:SendMessage Resource: "*" Queues: - https://sqs.us-east-2.amazonaws.com/123456789012/myexistingqueue - !Ref myqueue

Exemplos de modelos de função do IAM

Esta seção fornece exemplos de modelos do CloudFormation para funções do IAM para instâncias do EC2.

Para obter mais informações sobre as funções do IAM, consulte Trabalhar com funções no Guia do usuário do AWS Identity and Access Management.

Função do IAM com o EC2

Neste exemplo, o perfil de instância é referenciado pela propriedade IamInstanceProfile da instância EC2. Tanto a instância quanto a função de política referenciam a política AWS::IAM::Role.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "myEC2Instance": { "Type": "AWS::EC2::Instance", "Version": "2009-05-15", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "m1.small", "Monitoring": "true", "DisableApiTermination": "false", "IamInstanceProfile": { "Ref": "RootInstanceProfile" } } }, "RootRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ec2.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }, "Path": "/" } }, "RolePolicies": { "Type": "AWS::IAM::Policy", "Properties": { "PolicyName": "root", "PolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }, "Roles": [ { "Ref": "RootRole" } ] } }, "RootInstanceProfile": { "Type": "AWS::IAM::InstanceProfile", "Properties": { "Path": "/", "Roles": [ { "Ref": "RootRole" } ] } } } }

YAML

AWSTemplateFormatVersion: '2010-09-09' Resources: myEC2Instance: Type: AWS::EC2::Instance Version: '2009-05-15' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: m1.small Monitoring: 'true' DisableApiTermination: 'false' IamInstanceProfile: !Ref RootInstanceProfile RootRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - ec2.amazonaws.com Action: - sts:AssumeRole Path: "/" RolePolicies: Type: AWS::IAM::Policy Properties: PolicyName: root PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: "*" Resource: "*" Roles: - !Ref RootRole RootInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Path: "/" Roles: - !Ref RootRole

Função do IAM com o grupo do AutoScaling

Neste exemplo, o perfil de instância é referenciado pela propriedade IamInstanceProfile de uma configuração de execução do grupo do AutoScaling.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "myLCOne": { "Type": "AWS::AutoScaling::LaunchConfiguration", "Version": "2009-05-15", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "m1.small", "InstanceMonitoring": "true", "IamInstanceProfile": { "Ref": "RootInstanceProfile" } } }, "myASGrpOne": { "Type": "AWS::AutoScaling::AutoScalingGroup", "Version": "2009-05-15", "Properties": { "AvailabilityZones": [ "us-east-1a" ], "LaunchConfigurationName": { "Ref": "myLCOne" }, "MinSize": "0", "MaxSize": "0", "HealthCheckType": "EC2", "HealthCheckGracePeriod": "120" } }, "RootRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ec2.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }, "Path": "/" } }, "RolePolicies": { "Type": "AWS::IAM::Policy", "Properties": { "PolicyName": "root", "PolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }, "Roles": [ { "Ref": "RootRole" } ] } }, "RootInstanceProfile": { "Type": "AWS::IAM::InstanceProfile", "Properties": { "Path": "/", "Roles": [ { "Ref": "RootRole" } ] } } } }

YAML

AWSTemplateFormatVersion: '2010-09-09' Resources: myLCOne: Type: AWS::AutoScaling::LaunchConfiguration Version: '2009-05-15' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: m1.small InstanceMonitoring: 'true' IamInstanceProfile: !Ref RootInstanceProfile myASGrpOne: Type: AWS::AutoScaling::AutoScalingGroup Version: '2009-05-15' Properties: AvailabilityZones: - "us-east-1a" LaunchConfigurationName: !Ref myLCOne MinSize: '0' MaxSize: '0' HealthCheckType: EC2 HealthCheckGracePeriod: '120' RootRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - ec2.amazonaws.com Action: - sts:AssumeRole Path: "/" RolePolicies: Type: AWS::IAM::Policy Properties: PolicyName: root PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: "*" Resource: "*" Roles: - !Ref RootRole RootInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Path: "/" Roles: - !Ref RootRole