Fragmentos de plantillas de AWS Identity and Access Management - AWS CloudFormation

Fragmentos de plantillas de AWS Identity and Access Management

Esta sección contiene fragmentos de la plantilla AWS Identity and Access Management.

importante

Al crear o actualizar una pila utilizando una plantilla que contenga recursos de IAM, debe reconocer el uso de las capacidades de IAM. Para obtener más información, consulte Reconocimiento de recursos de IAM en plantillas de CloudFormation.

Declaración de recurso de un usuario de IAM

Este fragmento muestra cómo declarar un recurso AWS::IAM::User para crear un usuario de IAM. El usuario está declarado con la ruta ("/") y un perfil de inicio de sesión con la contraseña (myP@ssW0rd).

El documento de políticas denominado giveaccesstoqueueonly ofrece al usuario permiso para realizar todas las acciones de Amazon SQS en el recurso de cola de Amazon SQS myqueue y deniega el acceso a todos los demás recursos de la cola de Amazon SQS. La función Fn::GetAtt obtiene el atributo Arn del recurso AWS::SQS::Queue myqueue.

El documento de políticas denominado giveaccesstotopiconly se añade al usuario para darle permiso para realizar todas las acciones de Amazon SNS en el recurso de tema de Amazon SNS mytopic y para denegar el acceso a todos los demás recursos de cola de Amazon SNS. La función Ref obtiene el ARN del recurso AWS::SNS::Topic mytopic.

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

Declaración de recurso de una clave de acceso IAM

Este fragmento muestra un recurso AWS::IAM::AccessKey. El recurso myaccesskey crea una clave de acceso y la asigna a un usuario de IAM que se declare como un recurso AWS::IAM::User en la plantilla.

JSON

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

YAML

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

Puede obtener la clave secreta de un recurso AWS::IAM::AccessKey utilizando la función Fn::GetAtt. Una forma de recuperar la clave secreta es ponerla en un valor Output. Puede obtener la clave de acceso utilizando la función Ref. Las siguientes declaraciones de valor Output obtiene la clave de acceso y la clave secreta de myaccesskey.

JSON

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

YAML

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

También puede pasar la clave de acceso y la clave secreta de AWS a una instancia de Amazon EC2 o un grupo de escalado automático definidos en la plantilla. La siguiente declaración AWS::EC2::Instance utiliza la propiedad UserData para pasar la clave de acceso y su clave secreta para el 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}"

Declaración de recurso de un grupo de IAM

Este fragmento muestra un recurso AWS::IAM::Group. El grupo tiene una ruta ("/myapplication/"). El documento de políticas denominado myapppolicy se añade al grupo para permitir a los usuarios del grupo realizar todas las acciones de Amazon SQS en el recurso de cola de Amazon SQS y para denegar el acceso a todos los demás recursos de Amazon SQS excepto myqueue.

Para asignar una política a un recurso, IAM requiere el nombre de recurso de Amazon (ARN) para el recurso. En el fragmento, la función Fn::GetAtt obtiene el ARN de la cola del 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

Añadir usuarios a un grupo

El recurso AWS::IAM::UserToGroupAddition añade usuarios un grupo. En el siguiente fragmento, el recurso addUserToGroup añade los siguientes usuarios a un grupo existente denominado myexistinggroup2: el usuario existente existinguser1 y el usuario myuser que se declara como recurso AWS::IAM::User en la plantilla.

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

Declaración de una política de IAM

Este fragmento muestra cómo crear una política y aplicarla a varios grupos con un recurso AWS::IAM::Policy denominado mypolicy. El recurso mypolicy contiene una propiedad PolicyDocument que permite acciones GetObject, PutObject y PutObjectAcl en los objetos del bucket de S3 representadas por el ARN arn:aws:s3:::myAWSBucket. El recurso mypolicy aplica la política a un grupo existente denominado myexistinggroup1 y un grupo mygroup declarado en la plantilla como recurso AWS::IAM::Group. Este ejemplo muestra cómo aplicar una política a un grupo con la propiedad Groups; sin embargo, también puede usar la propiedad Users para añadir un documento de políticas a una lista de usuarios.

importante

Las acciones de políticas de Amazon SNS que se declaran en el recurso AWS::IAM::Policy difieren de las acciones de políticas de temas de Amazon SNS que se declaran en el recurso AWS::SNS::TopicPolicy. Por ejemplo, las acciones de política sns:Unsubscribe y sns:SetSubscriptionAttributes son válidas para AWS::IAM::Policy, pero no son válidas para el recurso AWS::SNS::TopicPolicy. Para obtener más información acerca de las acciones de las políticas de Amazon SNS válidas que puede usar con el recurso AWS::IAM::Policy, consulte Special information for Amazon SNS policies (Información especial para políticas de Amazon SNS) en la Guía para desarrolladores de 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

Declaración de una política de bucket de Amazon S3

Este fragmento de código muestra cómo crear una política y aplicarla a un bucket de Amazon S3 usando el recurso AWS::S3::BucketPolicy. El recurso mybucketpolicy declara un documento de políticas que permite al usuario user1 de IAM realizar la acción GetObject en todos los objetos del bucket de S3 para que se aplique esta política. En el fragmento, la función Fn::GetAtt obtiene el ARN del recurso user1. El recurso mybucketpolicy aplica la política al recurso AWS::S3::BucketPolicy mybucket. La función Ref obtiene el nombre del bucket del 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

Declaración de una política de tema de Amazon SNS

Este fragmento de código muestra cómo crear una política y aplicarla a un tema de Amazon SNS usando el recurso AWS::SNS::TopicPolicy. El recurso mysnspolicy contiene una propiedad PolicyDocument que permite al recurso AWS::IAM::User myuser realizar la acción Publish sobre un recurso AWS::SNS::Topic mytopic. En el fragmento, la función Fn::GetAtt obtiene el ARN del recurso myuser y la función Ref obtiene el ARN para el recurso mytopic.

importante

Las acciones de políticas de Amazon SNS que se declaran en el recurso AWS::IAM::Policy difieren de las acciones de políticas de temas de Amazon SNS que se declaran en el recurso AWS::SNS::TopicPolicy. Por ejemplo, las acciones de política sns:Unsubscribe y sns:SetSubscriptionAttributes son válidas para AWS::IAM::Policy, pero no son válidas para el recurso AWS::SNS::TopicPolicy. Para obtener más información acerca de las acciones de las políticas de Amazon SNS válidas que puede usar con el recurso AWS::IAM::Policy, consulte Special information for Amazon SNS policies (Información especial para políticas de Amazon SNS) en la Guía para desarrolladores de 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

Declaración de una política de Amazon SQS

Este fragmento de código muestra cómo crear una política y aplicarla a una cola de Amazon SQS usando el recurso AWS::SQS::QueuePolicy. La propiedad PolicyDocument permite al usuario existente myapp (especificado por su ARN) realizar la acción SendMessage en una cola existente, que especifican su URL y un recurso AWS::SQS::Queue myqueue. La función Ref obtiene el ARN del 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

Ejemplos de plantillas de rol de IAM

Esta sección proporciona ejemplos de plantillas de CloudFormation para los roles de IAM de instancias de EC2.

Para obtener más información acerca de los roles de IAM, consulte Working with roles (Trabajar con roles) en la Guía del usuario de AWS Identity and Access Management.

Rol de IAM con EC2

En este ejemplo, la propiedad IamInstanceProfile de la instancia de EC2 hace referencia al perfil de instancia. Tanto la política de instancias como la política de roles hacen referencia a 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

Rol de IAM con grupo de AutoScaling

En este ejemplo, la propiedad IamInstanceProfile de la configuración de lanzamiento de un grupo de escalado automático hace referencia al perfil de instancia.

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