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
- Declarar um recurso de usuário do IAM
- Declarar um recurso de chave de acesso do IAM
- Declarar um recurso de grupo do IAM
- Adicionar usuários a um grupo
- Declarar uma política do IAM
- Declarar uma política do bucket do Amazon S3
- Declarar uma política de tópico do Amazon SNS
- Declarar uma política do Amazon SQS
- Exemplos de modelos de função do IAM
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 Controle o acesso ao CloudFormation com o AWS Identity and Access Management.
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.
Importante
As ações da política do Amazon SNS que são declaradas no recurso AWS::IAM::Policy diferem das ações da política do tópico do Amazon SNS que são declaradas no recurso AWS::SNS::TopicPolicy. Por exemplo, as ações de políticas 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 saber mais sobre ações de políticas válidas do Amazon SNS que é possível utilizar 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 da política do Amazon SNS que são declaradas no recurso AWS::IAM::Policy diferem das ações da política do tópico do Amazon SNS que são declaradas no recurso AWS::SNS::TopicPolicy. Por exemplo, as ações de políticas 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 saber mais sobre ações de políticas válidas do Amazon SNS que é possível utilizar 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
aws-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 sobre os perfis do IAM, consulte Trabalhando com perfis, 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 de AutoScaling
Neste exemplo, o perfil de instância é referenciado pela propriedade IamInstanceProfile
de um grupo de uma configuração de execução do grupo do 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