AWS Identity and Access Management extraits de modèles - AWS CloudFormation

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

AWS Identity and Access Management extraits de modèles

Cette section contient des extraits AWS Identity and Access Management de modèles.

Important

Lorsque vous créez ou mettez à jour une pile à l'aide d'un modèle contenant des ressources IAM, vous devez confirmer l'utilisation des fonctionnalités IAM. Pour de plus amples informations, veuillez consulter Confirmation des ressources IAM dans les modèles CloudFormation.

Déclaration d'une ressource d'utilisateur IAM

Cet extrait de code présente comment déclarer une ressource AWS::IAM::User pour créer un utilisateur IAM. L'utilisateur est déclaré avec le chemin ("/") et un profil de connexion utilisant le mot de passe (myP@ssW0rd).

Le document de politique intitulé giveaccesstoqueueonly accorde à l'utilisateur l'autorisation d'effectuer toutes les actions Amazon SQS au niveau de la ressource de file d'attente Amazon SQS myqueue, et refuse l'accès à toutes les autres ressources de file d'attente Amazon SQS. La fonction Fn::GetAtt obtient l'attribut Arn de la AWS::SQS::Queueressourcemyqueue.

Le document de politique intitulé giveaccesstotopiconly est ajouté à l'utilisateur pour l'autoriser à effectuer toutes les actions Amazon SNS au niveau de la ressource de rubrique Amazon SNS mytopic, et refuser l'accès à toutes les autres ressources Amazon SNS. La fonction Ref obtient l'ARN de la AWS::SNS::Topic ressource 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

Déclaration d'une ressource de clé d'accès IAM

Cet extrait illustre une ressource AWS::IAM::AccessKey. La ressource myaccesskey crée une clé d'accès et l'attribue à un utilisateur IAM qui est déclaré en tant que ressource AWS::IAM::User dans le modèle.

JSON

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

YAML

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

Vous pouvez obtenir la clé secrète d'une ressource AWS::IAM::AccessKey à l'aide de la fonction Fn::GetAtt. L'un des moyens de récupérer la clé secrète est de la placer dans une valeur Output. Vous pouvez obtenir la clé d'accès à l'aide de la fonction Ref. Les déclarations de valeurs Output suivantes obtiennent la clé d'accès et la clé secrète pour myaccesskey.

JSON

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

YAML

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

Vous pouvez également transmettre la clé AWS d'accès et la clé secrète à une EC2 instance Amazon ou à un groupe Auto Scaling défini dans le modèle. La déclaration AWS::EC2::Instance suivante utilise la propriété UserData pour transmettre la clé d'accès et la clé secrète pour la ressource 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}"

Déclaration d'une ressource de groupe IAM

Cet extrait illustre une ressource AWS::IAM::Group. Le groupe a un chemin ("/myapplication/"). Le document de politique intitulé myapppolicy est ajouté au groupe pour autoriser les utilisateurs du groupe à effectuer toutes les actions Amazon SQS au niveau de la ressource de file d'attente Amazon SQS myqueue, et refuser l'accès à toutes les autres ressources Amazon SQS à l'exception de myqueue.

Pour attribuer une politique à une ressource, IAM nécessite l'Amazon Resource Name (ARN) de la ressource. Dans l'extrait, la fonction Fn::GetAtt obtient l'ARN de la file d'attente de la ressource 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

Ajout d'utilisateurs à un groupe

La ressource AWS::IAM::UserToGroupAddition ajoute des utilisateurs à un groupe. Dans l'extrait suivant, la ressource addUserToGroup ajoute les utilisateurs suivants à un groupe existant nommé myexistinggroup2 : l'utilisateur existant existinguser1 et l'utilisateur myuser qui est déclaré comme une ressource AWS::IAM::User dans le modèle.

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

Déclaration d'une politique IAM

Cet extrait de code montre comment créer une politique et l'appliquer à plusieurs groupes à l'aide d'une ressource AWS::IAM::Policy nommée mypolicy. La ressource mypolicy contient une propriété PolicyDocument qui autorise les actions GetObject, PutObject et PutObjectAcl sur les objets du compartiment S3 représenté par l'ARN arn:aws:s3:::myAWSBucket. La ressource mypolicy applique la politique à un groupe existant nommé myexistinggroup1 et à un groupe mygroup déclaré dans le modèle en tant que ressource AWS::IAM::Group. Cet exemple montre comment appliquer une politique à un groupe à l'aide de la propriété Groups. Toutefois, vous pouvez aussi utiliser la propriété Users pour ajouter un document de politique à une liste d'utilisateurs.

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

Déclaration d'une politique de compartiment Amazon S3

Cet extrait de code montre comment créer une politique et l'appliquer à un compartiment Amazon S3 à l'aide de la ressource AWS::S3::BucketPolicy. La ressource mybucketpolicy déclare un document de politique qui autorise l'utilisateur IAM user1 à effectuer l'action GetObject sur tous les objets du compartiment S3 auquel cette politique est appliquée. Dans l'extrait, la fonction Fn::GetAtt obtient l'ARN de la ressource user1. La ressource mybucketpolicy applique la politique à la ressource AWS::S3::BucketPolicy intitulée mybucket. La fonction Ref récupère le nom de compartiment de la ressource 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

Déclaration d'une politique de rubrique Amazon SNS

Cet extrait de code montre comment créer une politique et l'appliquer à une rubrique Amazon SNS à l'aide de la ressource AWS::SNS::TopicPolicy. La ressource mysnspolicy contient une propriété PolicyDocument qui permet à la ressource AWS::IAM::User intitulée myuser d'effectuer l'action Publish sur une ressource AWS::SNS::Topic intitulée mytopic. Dans cet extrait, la fonction Fn::GetAtt obtient l'ARN de la ressource myuser, tandis que la fonction Ref obtient l'ARN de la ressource 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

Déclaration d'une politique Amazon SQS

Cet extrait de code montre comment créer une politique et l'appliquer à une file d'attente Amazon SQS à l'aide de la ressource AWS::SQS::QueuePolicy. La propriété PolicyDocument permet à l'utilisateur existant myapp (spécifié par son ARN) d'effectuer l'action SendMessage sur une file d'attente existante, qui est spécifiée par son URL, et sur une ressource AWS::SQS::Queue intitulée myqueue. La fonction Ref obtient l'URL de la ressource 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

Exemples de modèle pour les rôles IAM

Cette section fournit des exemples de CloudFormation modèles de rôles IAM pour les EC2 instances.

Pour plus d'informations, consultez la section Rôles IAM pour Amazon EC2 dans le guide de l' EC2 utilisateur Amazon.

Rôle IAM auprès de EC2

Dans cet exemple, le profil d'instance est référencé par la IamInstanceProfile propriété de l' EC2 instance. La politique de l'instance et la politique du rôle référencent toutes les deux la ressource 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

Rôle IAM au sein du groupe Auto Scaling

Dans cet exemple, le profil d'instance est référencé par la IamInstanceProfile propriété d'une configuration de lancement 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