Trechos de modelo do AWS Identity and Access Management
Esta seção contém trechos de modelos do AWS Identity and Access Management.
Tópicos
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, consulte Confirmar recursos do IAM em modelos do CloudFormation.
Declarar um recurso de usuário do IAM
Este trecho 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 para 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. 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 e a chave secreta da AWS 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 de recurso da Amazon (ARN). 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 para 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.
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.
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-2aws-region.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.aws-region.amazonaws.com/123456789012/myexistingqueue - !Ref myqueue
Exemplos de modelos de função do IAM
Esta seção fornece exemplos de modelos do CloudFormation para perfis do IAM para instâncias do EC2.
Para obter mais informações, consulte Perfis do IAM para o Amazon EC2 no Guia do usuário do Amazon EC2.
Função do IAM com o EC2
Neste exemplo, o perfil de instância é referenciado pela propriedade IamInstanceProfile da instância do 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
Perfil do IAM com grupo do Auto Scaling
Neste exemplo, o perfil de instância é referenciado pela propriedade IamInstanceProfile de um grupo de uma configuração de execução do Amazon EC2 Auto Scaling.
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