Fragmentos de plantillas de AWS Identity and Access Management
Esta sección contiene fragmentos de la plantilla AWS Identity and Access Management.
Temas
- Declaración de recurso de un usuario de IAM
- Declaración de recurso de una clave de acceso IAM
- Declaración de recurso de un grupo de IAM
- Añadir usuarios a un grupo
- Declaración de una política de IAM
- Declaración de una política de bucket de Amazon S3
- Declaración de una política de tema de Amazon SNS
- Declaración de una política de Amazon SQS
- Ejemplos de plantillas de rol de IAM
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-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
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