AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

管理 Elastic Beanstalk 服务角色

要管理和监控您的环境,AWS Elastic Beanstalk 将代表您对环境的资源执行操作。Elastic Beanstalk 需要特定权限才能执行这些操作,而且它将代入 AWS Identity and Access Management (IAM) 服务角色来获取这些权限。

Elastic Beanstalk 在其代入服务角色时需要使用临时安全凭证。要获取这些凭证,Elastic Beanstalk 将请求发送到一个全局终端节点上的 AWS Security Token Service (AWS STS)。有关更多信息,请参阅 IAM 用户指南 中的临时安全凭证

在 Elastic Beanstalk 控制台中启动环境时,该控制台将创建一个名为 aws-elasticbeanstalk-service-role 的默认服务角色,并将具有默认权限的托管策略附加到该角色。

Elastic Beanstalk 提供一个用于增强型运行状况监控的托管策略和一个具有托管平台更新所需的附加权限的托管策略。此控制台将这两种策略同时分配给默认服务角色。遵循托管服务角色策略。

托管服务角色策略

  • AWSElasticBeanstalkEnhancedHealth – 向 Elastic Beanstalk 授予监控实例和环境运行状况的权限。

    { "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": [ "*" ] } ] }
  • AWSElasticBeanstalkService – 向 Elastic Beanstalk 授予代表您更新环境以执行托管平台更新的权限。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudformationOperationsOnElasticBeanstalkStacks", "Effect": "Allow", "Action": [ "cloudformation:*" ], "Resource": [ "arn:aws-cn:cloudformation:*:*:stack/awseb-*", "arn:aws-cn:cloudformation:*:*:stack/eb-*" ] }, { "Sid": "AllowS3OperationsOnElasticBeanstalkBuckets", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws-cn:s3:::elasticbeanstalk-*", "arn:aws-cn:s3:::elasticbeanstalk-*/*" ] }, { "Sid": "AllowOperations", "Effect": "Allow", "Action": [ "autoscaling:AttachInstances", "autoscaling:CreateAutoScalingGroup", "autoscaling:CreateLaunchConfiguration", "autoscaling:DeleteLaunchConfiguration", "autoscaling:DeleteAutoScalingGroup", "autoscaling:DeleteScheduledAction", "autoscaling:DescribeAccountLimits", "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeAutoScalingInstances", "autoscaling:DescribeLaunchConfigurations", "autoscaling:DescribeLoadBalancers", "autoscaling:DescribeNotificationConfigurations", "autoscaling:DescribeScalingActivities", "autoscaling:DescribeScheduledActions", "autoscaling:DetachInstances", "autoscaling:PutScheduledUpdateGroupAction", "autoscaling:ResumeProcesses", "autoscaling:SetDesiredCapacity", "autoscaling:SuspendProcesses", "autoscaling:TerminateInstanceInAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup", "cloudwatch:PutMetricAlarm", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:CreateSecurityGroup", "ec2:DeleteSecurityGroup", "ec2:DescribeAccountAttributes", "ec2:DescribeImages", "ec2:DescribeInstances", "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:TerminateInstances", "ecs:CreateCluster", "ecs:DeleteCluster", "ecs:DescribeClusters", "ecs:RegisterTaskDefinition", "elasticbeanstalk:*", "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer", "elasticloadbalancing:ConfigureHealthCheck", "elasticloadbalancing:CreateLoadBalancer", "elasticloadbalancing:DeleteLoadBalancer", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", "elasticloadbalancing:DescribeInstanceHealth", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeTargetHealth", "elasticloadbalancing:RegisterInstancesWithLoadBalancer", "iam:ListRoles", "iam:PassRole", "logs:CreateLogGroup", "logs:PutRetentionPolicy", "rds:DescribeDBInstances", "rds:DescribeOrderableDBInstanceOptions", "s3:CopyObject", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectMetadata", "s3:ListBucket", "s3:listBuckets", "s3:ListObjects", "sns:CreateTopic", "sns:GetTopicAttributes", "sns:ListSubscriptionsByTopic", "sns:Subscribe", "sqs:GetQueueAttributes", "sqs:GetQueueUrl" ], "Resource": [ "*" ] } ] }

要允许 Elastic Beanstalk 代入 aws-elasticbeanstalk-service-role 角色,此服务角色将 Elastic Beanstalk 指定为信任关系策略中的可信实体。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "elasticbeanstalk.amazonaws.com.cn" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "elasticbeanstalk" } } } ] }

当您使用 Elastic Beanstalk 命令行界面 (EB CLI) 的 eb create 命令启动环境但未通过 --service-role 选项指定服务角色时,Elastic Beanstalk 将创建默认服务角色 aws-elasticbeanstalk-service-role。如果默认服务角色已存在,Elastic Beanstalk 会将其用于新环境。

如果您使用 Elastic Beanstalk API 的 CreateEnvironment 操作来创建环境,请使用 aws:elasticbeanstalk:environment 命名空间中的 ServiceRole 配置选项指定服务角色。有关将增强型运行状况监视用于 Elastic Beanstalk API 的详细信息,请参阅将增强型运行状况报告与 AWS Elastic Beanstalk API 结合使用

当您使用 Elastic Beanstalk API 创建环境并且未指定服务角色时,Elastic Beanstalk 将为您的账户创建服务相关角色(如果还没有角色),并将其用于新环境。服务相关角色是由 Elastic Beanstalk 预定义的独特类型的服务角色,它具有服务代表您调用其他 AWS 服务所需的所有权限。服务相关角色与您的账户关联。Elastic Beanstalk 将创建一次,然后在创建其他环境时重用。您也可以使用 IAM 提前创建账户的服务相关角色。当您的账户具有服务相关角色时,您可以使用它通过 Elastic Beanstalk API、Elastic Beanstalk 控制台或 EB CLI 创建环境。有关将服务相关角色与 Elastic Beanstalk 环境结合使用的详细信息,请参阅对 Elastic Beanstalk 使用服务相关角色

注意

在您创建环境时,如果 Elastic Beanstalk 尝试为您的账户创建服务相关角色,您必须具有 iam:CreateServiceLinkedRole 权限。如果您没有此权限,环境创建将失败,您会看到说明问题的消息。

验证默认服务角色的权限

您的默认服务角色授予的权限不是固定的,具体取决于其创建时间、您上次启动环境的时间以及您使用的客户端。您可以在 IAM 控制台中验证由默认服务角色授予的权限。

验证默认服务角色的权限

  1. 在 IAM 控制台中,打开角色页面

  2. 选择 aws-elasticbeanstalk-service-role

  3. 权限选项卡中,审核附加到角色的策略列表。

  4. 要查看策略授予的权限,请选择相应的策略。

更新过期的默认服务角色

如果默认服务角色缺少必需的权限,您可以通过在 Elastic Beanstalk 环境管理控制台中创建新环境来更新它。

或者,可以手动向默认服务角色添加托管策略。

向默认服务角色添加托管策略

  1. 在 IAM 控制台中,打开角色页面

  2. 选择 aws-elasticbeanstalk-service-role

  3. 权限选项卡上,选择 Attach policies (附加策略)

  4. 键入 AWSElasticBeanstalk 以筛选策略。

  5. 选择下列策略,然后选择附加策略

    • AWSElasticBeanstalkEnhancedHealth

    • AWSElasticBeanstalkService

向默认服务角色添加权限

如果您的应用程序包含引用 AWS 资源 (默认服务角色不包含该资源的权限) 的配置文件,则 Elastic Beanstalk 在托管更新期间处理配置文件时,可能需要附加权限来解析这些引用。如果缺少权限,则更新将失败,并且 Elastic Beanstalk 将返回一条消息来指明所需的权限。在 IAM 控制台中将附加服务的权限添加到默认服务角色。

向默认服务角色添加附加策略

  1. 在 IAM 控制台中,打开角色页面

  2. 选择 aws-elasticbeanstalk-service-role

  3. 权限选项卡上,选择 Attach policies (附加策略)

  4. 选择适用于应用程序使用的附加服务的托管策略。例如,AmazonAPIGatewayAdministratorAmazonElasticFileSystemFullAccess

  5. 选择 Attach policy

创建服务角色

如果您无法使用默认服务角色,请创建一个服务角色。

创建服务角色

  1. 在 IAM 控制台中,打开角色页面

  2. 选择 Create role (创建角色)

  3. AWS 服务下,选择 AWS Elastic Beanstalk,然后选择您的使用案例。

  4. 选择 Next: Permissions (下一步: 权限)

  5. 附加 AWSElasticBeanstalkServiceAWSElasticBeanstalkEnhancedHealth 托管的策略以及提供应用程序所需权限的任何其他策略。

  6. 选择下一步: 标签

  7. (可选)将标签添加到角色。

  8. 选择 Next: Review

  9. 输入角色的名称。

  10. 选择 Create role (创建角色)

环境创建向导中或使用 eb create 命令上的 --service-role 选项创建环境时,您可以应用您的自定义服务角色。