Rôle de service Elastic Beanstalk - AWS Elastic Beanstalk

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.

Rôle de service Elastic Beanstalk

Un rôle de service correspond au rôle IAM exercé par Elastic Beanstalk lorsqu'il appelle d'autres services en votre nom. Par exemple, Elastic Beanstalk utilise une fonction du service lorsqu'il appelle les API Amazon Elastic Compute Cloud (Amazon EC2), Elastic Load Balancing et Amazon EC2 Auto Scaling pour recueillir des informations. La fonction du service utilisée par Elastic Beanstalk est celle que vous avez spécifiée lorsque vous créez l'environnement Elastic Beanstalk.

Il y a deux politiques gérées attachée à la fonction du service. Ces politiques fournissent les autorisations qui permettent à Elastic Beanstalk d'accéder aux ressources AWS requises pour créer et gérer vos environnements. Elastic Beanstalk fournit une politique gérée pour la surveillance améliorée de l'état, un support Amazon SQS de niveau de travail et une autre qui comporte les autorisations supplémentaires requises pour les mises à jour gérées de la plateforme.

La politique accorde toutes les autorisations requises par Elastic Beanstalk pour surveiller l'état de l'environnement. Cette stratégie inclut également des actions Amazon SQS qui permettent à Elastic Beanstalk de surveiller l'activité de file d'attente pour les environnements de travail.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticloadbalancing:DescribeInstanceHealth", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeTargetHealth", "ec2:DescribeInstances", "ec2:DescribeInstanceStatus", "ec2:GetConsoleOutput", "ec2:AssociateAddress", "ec2:DescribeAddresses", "ec2:DescribeSecurityGroups", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeAutoScalingInstances", "autoscaling:DescribeScalingActivities", "autoscaling:DescribeNotificationConfigurations", "sns:Publish" ], "Resource": [ "*" ] } ] }

Cette politique octroie des autorisations à Elastic Beanstalk pour mettre à jour les environnements en votre nom afin d'effectuer des mises à jour de plateforme gérées.

Groupements d'autorisations de niveau service

Cette politique est groupée en instructions basées sur le jeu d'autorisations fourni.

  • ElasticBeanstalkPermissions — Ce groupe d'autorisations sert à appeler les actions de service Elastic Beanstalk (API Elastic Beanstalk).

  • AllowPassRoleToElasticBeanstalkAndDownstreamServices – Ce groupe d'autorisations permet de transmettre n'importe quel rôle à Elastic Beanstalk et à d'autres services aval comme AWS CloudFormation.

  • ReadOnlyPermissions — Ce groupe d'autorisations sert à collecter des informations sur l'environnement en cours d'exécution.

  • *OperationPermissions — Les groupes avec ce schéma de nommage servent à appeler les opérations nécessaires pour effectuer les mises à jour de la plateforme.

  • *BroadOperationPermissions — Les groupes avec ce schéma de nommage servent à appeler les opérations nécessaires pour effectuer les mises à jour de la plateforme. Ils incluent également des autorisations étendues pour la prise en charge d'environnements hérités.

  • *TagResource – Les groupes dotés de ce modèle de dénomination sont destinés aux appels qui utilisent les API tag-on-create pour associer des balises à des ressources créées dans un environnement Elastic Beanstalk.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ElasticBeanstalkPermissions", "Effect": "Allow", "Action": [ "elasticbeanstalk:*" ], "Resource": "*" }, { "Sid": "AllowPassRoleToElasticBeanstalkAndDownstreamServices", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/*", "Condition": { "StringEquals": { "iam:PassedToService": [ "elasticbeanstalk.amazonaws.com", "ec2.amazonaws.com", "ec2.amazonaws.com.cn", "autoscaling.amazonaws.com", "elasticloadbalancing.amazonaws.com", "ecs.amazonaws.com", "cloudformation.amazonaws.com" ] } } }, { "Sid": "ReadOnlyPermissions", "Effect": "Allow", "Action": [ "autoscaling:DescribeAccountLimits", "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeAutoScalingInstances", "autoscaling:DescribeLaunchConfigurations", "autoscaling:DescribeLoadBalancers", "autoscaling:DescribeNotificationConfigurations", "autoscaling:DescribeScalingActivities", "autoscaling:DescribeScheduledActions", "ec2:DescribeAccountAttributes", "ec2:DescribeAddresses", "ec2:DescribeAvailabilityZones", "ec2:DescribeImages", "ec2:DescribeInstanceAttribute", "ec2:DescribeInstances", "ec2:DescribeKeyPairs", "ec2:DescribeLaunchTemplates", "ec2:DescribeLaunchTemplateVersions", "ec2:DescribeSecurityGroups", "ec2:DescribeSnapshots", "ec2:DescribeSpotInstanceRequests", "ec2:DescribeSubnets", "ec2:DescribeVpcClassicLink", "ec2:DescribeVpcs", "elasticloadbalancing:DescribeInstanceHealth", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetHealth", "logs:DescribeLogGroups", "rds:DescribeDBEngineVersions", "rds:DescribeDBInstances", "rds:DescribeOrderableDBInstanceOptions", "sns:ListSubscriptionsByTopic" ], "Resource": [ "*" ] }, { "Sid": "EC2BroadOperationPermissions", "Effect": "Allow", "Action": [ "ec2:AllocateAddress", "ec2:AssociateAddress", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:CreateLaunchTemplate", "ec2:CreateLaunchTemplateVersion", "ec2:CreateSecurityGroup", "ec2:DeleteLaunchTemplate", "ec2:DeleteLaunchTemplateVersions", "ec2:DeleteSecurityGroup", "ec2:DisassociateAddress", "ec2:ReleaseAddress", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress" ], "Resource": "*" }, { "Sid": "EC2RunInstancesOperationPermissions", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:*:*:launch-template/*" } } }, { "Sid": "EC2TerminateInstancesOperationPermissions", "Effect": "Allow", "Action": [ "ec2:TerminateInstances" ], "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringLike": { "ec2:ResourceTag/aws:cloudformation:stack-id": [ "arn:aws:cloudformation:*:*:stack/awseb-e-*", "arn:aws:cloudformation:*:*:stack/eb-*" ] } } }, { "Sid": "ECSBroadOperationPermissions", "Effect": "Allow", "Action": [ "ecs:CreateCluster", "ecs:DescribeClusters", "ecs:RegisterTaskDefinition" ], "Resource": "*" }, { "Sid": "ECSDeleteClusterOperationPermissions", "Effect": "Allow", "Action": "ecs:DeleteCluster", "Resource": "arn:aws:ecs:*:*:cluster/awseb-*" }, { "Sid": "ASGOperationPermissions", "Effect": "Allow", "Action": [ "autoscaling:AttachInstances", "autoscaling:CreateAutoScalingGroup", "autoscaling:CreateLaunchConfiguration", "autoscaling:CreateOrUpdateTags", "autoscaling:DeleteLaunchConfiguration", "autoscaling:DeleteAutoScalingGroup", "autoscaling:DeleteScheduledAction", "autoscaling:DetachInstances", "autoscaling:DeletePolicy", "autoscaling:PutScalingPolicy", "autoscaling:PutScheduledUpdateGroupAction", "autoscaling:PutNotificationConfiguration", "autoscaling:ResumeProcesses", "autoscaling:SetDesiredCapacity", "autoscaling:SuspendProcesses", "autoscaling:TerminateInstanceInAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": [ "arn:aws:autoscaling:*:*:launchConfiguration:*:launchConfigurationName/awseb-e-*", "arn:aws:autoscaling:*:*:launchConfiguration:*:launchConfigurationName/eb-*", "arn:aws:autoscaling:*:*:autoScalingGroup:*:autoScalingGroupName/awseb-e-*", "arn:aws:autoscaling:*:*:autoScalingGroup:*:autoScalingGroupName/eb-*" ] }, { "Sid": "CFNOperationPermissions", "Effect": "Allow", "Action": [ "cloudformation:*" ], "Resource": [ "arn:aws:cloudformation:*:*:stack/awseb-*", "arn:aws:cloudformation:*:*:stack/eb-*" ] }, { "Sid": "ELBOperationPermissions", "Effect": "Allow", "Action": [ "elasticloadbalancing:AddTags", "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer", "elasticloadbalancing:ConfigureHealthCheck", "elasticloadbalancing:CreateLoadBalancer", "elasticloadbalancing:DeleteLoadBalancer", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", "elasticloadbalancing:DeregisterTargets", "elasticloadbalancing:RegisterInstancesWithLoadBalancer", "elasticloadbalancing:RegisterTargets" ], "Resource": [ "arn:aws:elasticloadbalancing:*:*:targetgroup/awseb-*", "arn:aws:elasticloadbalancing:*:*:targetgroup/eb-*", "arn:aws:elasticloadbalancing:*:*:loadbalancer/awseb-*", "arn:aws:elasticloadbalancing:*:*:loadbalancer/eb-*", "arn:aws:elasticloadbalancing:*:*:loadbalancer/*/awseb-*/*", "arn:aws:elasticloadbalancing:*:*:loadbalancer/*/eb-*/*" ] }, { "Sid": "CWLogsOperationPermissions", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:DeleteLogGroup", "logs:PutRetentionPolicy" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/elasticbeanstalk/*" }, { "Sid": "S3ObjectOperationPermissions", "Effect": "Allow", "Action": [ "s3:DeleteObject", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectVersionAcl" ], "Resource": "arn:aws:s3:::elasticbeanstalk-*/*" }, { "Sid": "S3BucketOperationPermissions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetBucketPolicy", "s3:ListBucket", "s3:PutBucketPolicy" ], "Resource": "arn:aws:s3:::elasticbeanstalk-*" }, { "Sid": "SNSOperationPermissions", "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:GetTopicAttributes", "sns:SetTopicAttributes", "sns:Subscribe" ], "Resource": "arn:aws:sns:*:*:ElasticBeanstalkNotifications-*" }, { "Sid": "SQSOperationPermissions", "Effect": "Allow", "Action": [ "sqs:GetQueueAttributes", "sqs:GetQueueUrl" ], "Resource": [ "arn:aws:sqs:*:*:awseb-e-*", "arn:aws:sqs:*:*:eb-*" ] }, { "Sid": "CWPutMetricAlarmOperationPermissions", "Effect": "Allow", "Action": [ "cloudwatch:PutMetricAlarm" ], "Resource": [ "arn:aws:cloudwatch:*:*:alarm:awseb-*", "arn:aws:cloudwatch:*:*:alarm:eb-*" ] }, { "Sid": "AllowECSTagResource", "Effect": "Allow", "Action": [ "ecs:TagResource" ], "Resource": "*", "Condition": { "StringEquals": { "ecs:CreateAction": [ "CreateCluster", "RegisterTaskDefinition" ] } } } ] }

Vous pouvez créer un environnement Elastic Beanstalk en utilisant l'une des approches suivantes. Chaque section décrit la manière dont l'approche gère la fonction du service.

Console Elastic Beanstalk

Si vous créez un environnement en utilisant la console Elastic Beanstalk, ce dernier vous invite à créer une fonction du service nommée aws-elasticbeanstalk-service-role. Lorsqu'il est créé via Elastic Beanstalk, cette fonction inclut une politique de confiance qui permet à Elastic Beanstalk d'assumer la fonction du service. Les deux politiques gérées décrites plus haut dans cette rubrique sont également associées à la fonction.

Interface de ligne de commande Elastic Beanstalk (EB CLI)

Vous pouvez créer un environnement en utilisant la commande eb create de l'interface de ligne de commande Elastic Beanstalk (EB CLI). Si vous ne spécifiez pas de fonction du service via l'option --service-role. Elastic Beanstalk crée la même fonction du service par défaut aws-elasticbeanstalk-service-role. Si le rôle de service par défaut existe déjà, Elastic Beanstalk l'utilise pour le nouvel environnement. Lorsqu'il est créé via Elastic Beanstalk, cette fonction inclut une politique de confiance qui permet à Elastic Beanstalk d'assumer la fonction du service. Les deux politiques gérées décrites plus haut dans cette rubrique sont également associées au rôle.

API Elastic Beanstalk

Vous pouvez créer un environnement en utilisant l'action CreateEnvironment de l'API Elastic Beanstalk. Si vous ne spécifiez pas de fonction du service, Elastic Beanstalk crée un rôle lié au service de surveillance. Il s'agit d'un type de fonction du service unique prédéfini par Elastic Beanstalk pour inclure toutes les autorisations dont le service a besoin pour appeler d'autres Services AWS en votre nom. Le rôle lié à un service est associé à votre compte. Elastic Beanstalk le crée une seule fois, et le réutilise lors de la création d'environnements supplémentaires. Vous pouvez également utiliser IAM pour créer à l'avance le rôle lié au service de surveillance de votre compte. Lorsque votre compte dispose d'un rôle lié à un service de surveillance, vous pouvez l'utiliser pour créer un environnement à l'aide de la console ou de l'API Elastic Beanstalk, ou bien via l'interface de ligne de commande EB. Pour obtenir des instructions sur l'utilisation des rôles liés à un service avec les environnements Elastic Beanstalk, veuillez consulter Utilisation des rôles liés à un service pour Elastic Beanstalk.

Pour de plus amples informations sur les rôles de service, veuillez consulter Gestion des rôles de service Elastic Beanstalk.