本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Beanstalk 集群的权限
Beanstalk 集群环境不使用 Beanstalk Standard 的亚马逊弹性计算云 (Amazon EC2) 实例配置文件。您提供 Amazon EKS 为其集群和节点所需的 IAM 角色,以及 Elastic Beanstalk 用于发布环境指标、日志和跟踪的角色。您可以选择为正在运行的应用程序提供应用程序角色。Elastic Beanstalk 使用服务相关角色来运行自己的环境。
您提供的角色
Beanstalk 集群环境使用集群角色、节点角色和可观察性角色。当您在 Elastic Beanstalk 控制台中创建环境并接受默认服务访问设置时,如果您的账户中尚不存在这些设置,则控制台会为您创建所有三个设置每个角色的名称、可信服务和权限,名称在中:
-
集群角色 — 亚马逊 EKS 为 Elastic Beanstalk 创建的集群承担此角色。在
aws:elasticbeanstalk:eks命名空间的cluster-role设置中传递其 ARN。 -
节点角色 — 集群的 Amazon EC2 节点担任此角色,这必须允许它们从 Amazon ECR 提取应用程序映像。在
aws:elasticbeanstalk:eks命名空间的node-role设置中传递其 ARN。 -
可观察性角色 — 发布环境指标、日志和跟踪的组件通过 Amazon EKS Pod Identity 承担此角色。在
aws:elasticbeanstalk:eks:environment命名空间的observability-role设置中传递其 ARN。
如果您在 Elastic Beanstalk 控制台之外创建这些角色,我们强烈建议您完全按照中的说明创建它们。每个角色的名称、可信服务和权限然后,在创建环境时,将每个角色 ARN 传递到其配置选项中。有关有效的示例,请参阅Beanstalk 集群入门。
如果您为 Elastic Beanstalk 提供构建到容器镜像中的源代码,则还需要提供镜像构建角色。 Amazon CodeBuild 假设它在你的账户中运行构建。此角色属于应用程序版本构建,而不是运行环境。请参阅为 Beanstalk 集群环境构建容器镜像。
您还可以提供可选的应用程序角色,运行中的应用程序使用该角色来调用 Amazon 服务。请参阅应用程序权限。
重要
使用下表中的角色名称。控制台按名称选择现有角色,因此它不会选择您使用其他名称创建的角色,而必须自己选择该角色。名称对于集群重用也很重要:Elastic Beanstalk 在其创建的集群中注册集群、节点和可观测性角色,同一子网集上的后续环境必须提供相同的三个角色。Elastic Beanstalk 拒绝角色不同的环境,而不是将其放置在另一个集群上。请参阅环境分组。
每个角色信任不同的服务并拥有自己的权限:
| 角色 | 角色名称 | 值得信赖的服务 | Amazon 托管策略 |
|---|---|---|---|
| 集群 角色 | aws-elasticbeanstalk-eks-cluster-role |
eks.amazonaws.com |
AmazonEKSClusterPolicy, AmazonEKSNetworkingPolicy,
AmazonEKSComputePolicy, AmazonEKSBlockStoragePolicy,
AmazonEKSLoadBalancingPolicy, AWSElasticBeanstalkEKSTagging |
| 节点角色 | aws-elasticbeanstalk-eks-node-role |
ec2.amazonaws.com |
AmazonEKSWorkerNodeMinimalPolicy,
AmazonEC2ContainerRegistryPullOnly,
AmazonSSMManagedInstanceCore |
| 可观测性角色 | aws-elasticbeanstalk-eks-observability-role |
pods.eks.amazonaws.com |
CloudWatchAgentServerPolicy,
AWSElasticBeanstalkEKSObservability |
| 映像生成角色 | aws-elasticbeanstalk-eks-image-build-role |
codebuild.amazonaws.com |
AWSElasticBeanstalkEKSImageBuild |
| 应用程序角色(可选) | 你选择名字 | pods.eks.amazonaws.com |
无。您仅授予应用程序所需的权限。请参阅配置应用程序角色。 |
提供集群、节点和可观测性角色
-
如果您在 Elastic Beanstalk 控制台中创建环境,则无需准备任何内容。控制台使用上表中的名称按名称查找这三个角色,在您的账户中已经存在时选择它们,当它们不存在时创建它们。它只匹配角色名称,而不是完整的 ARN,而且由于 IAM 角色名称在账户中是唯一的,因此角色所在的路径不会影响匹配。
-
如果您使用 Amazon CLI 或 API,请先创建这三个角色。两个客户都不会为你创建它们。在上表中为每个角色指定名称和可信服务,并附上列出的策略。角色必须与环境位于同一个 Amazon 账户中。
-
创建环境时,在
cluster-rolenode-role、和observability-role设置中提供所有三个 ARN。明确提供可观测性角色而不是依赖默认角色,这样子网集上的每个环境都会注册相同的角色。 -
如果您的应用程序调用 Amazon 服务,请按中所述配置可选应用程序角色配置应用程序角色。
子网集单独选择集群,因此,当您需要具有不同基础架构角色的单独集群时,请使用不同的子网集。您无法更改现有 Beanstalk 集群环境的子网或集群、节点和可观测性角色。请参阅环境分组。可选应用程序角色特定于环境,可能因环境而异;请参阅配置应用程序角色。
创建环境的权限
由于您将这些角色交给 Elastic Beanstalk,因此创建环境的委托人需要权限才能传递这些角色。Elastic Beanstalk 会在配置任何内容之前对此进行验证,因此请向该委托人授予以下权限:
-
iam:GetRole以及iam:PassRole你传递的每个角色:集群、节点和可观测性角色,以及应用程序角色和映像构建角色(如果你使用它们)。iam:PassRole使用iam:PassedToService条件键进行范围。它的值是接收角色的服务:eks.amazonaws.com集群角色、节点角色、ec2.amazonaws.com可观察性和应用程序角色、pods.eks.amazonaws.com映像构建角色,codebuild.amazonaws.com以及elasticbeanstalk.amazonaws.com因为 Elastic Beanstalk 代表您传递这些角色。 -
iam:CreateServiceLinkedRole,这是账户中的第一个 Beanstalk 集群环境所需要的,这样 Elastic Beanstalk 和 Amazon EKS 才能创建其服务相关角色。使用条件键对其进行限定范围,iam:AWSServiceName条件键的值为elasticbeanstalk.amazonaws.com和eks.amazonaws.com。
以下政策支持所有这些。将账户 ID 替换为您自己的账户 ID,使用您的应用程序角色的名称,并移除您未传递的任何角色。显示的角色名称是上表中的角色名称,由控制台创建和选择。
与按名称选择角色的控制台不同,策略根据角色的完整 ARN 来匹配角色,因此每个Resource条目都必须包含该角色的 IAM 路径。控制台创建的角色所在的位置/service-role/,如下所示。如果你以其他方式创建了一个角色,它可能没有路径,在这种情况下,它的 ARN 是arn:aws:iam::。要读取角色的 ARN,请运行111122223333:role/role-nameaws iam get-role --role-name
。role-name --query Role.Arn --output text
{ "Version": "2012-10-17", "Statement": [ { "Sid": "InspectTheRoles", "Effect": "Allow", "Action": "iam:GetRole", "Resource": [ "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-cluster-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-node-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-observability-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-image-build-role", "arn:aws:iam::111122223333:role/my-application-role" ] }, { "Sid": "PassTheRolesToBeanstalk", "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-cluster-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-node-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-observability-role", "arn:aws:iam::111122223333:role/service-role/aws-elasticbeanstalk-eks-image-build-role", "arn:aws:iam::111122223333:role/my-application-role" ], "Condition": { "StringEquals": { "iam:PassedToService": [ "eks.amazonaws.com", "ec2.amazonaws.com", "pods.eks.amazonaws.com", "codebuild.amazonaws.com", "elasticbeanstalk.amazonaws.com" ] } } }, { "Sid": "CreateServiceLinkedRolesOnFirstEnvironment", "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::111122223333:role/aws-service-role/*", "Condition": { "StringEquals": { "iam:AWSServiceName": [ "elasticbeanstalk.amazonaws.com", "eks.amazonaws.com" ] } } } ] }
iam:GetRole在自己的语句中,因为iam:PassedToService条件密钥仅存在于PassRole请求中。将其应用于同一语句iam:GetRole中将完全阻止该权限的授予。
此政策仅涵盖角色传递。它不授予创建应用程序和环境所需的 Elastic Beanstalk 操作。
如果没有这些权限,CreateEnvironment则会失败,因为命名了它无法执行的操作AccessDenied时出现错误。有关更多信息,请参阅授予委托人将角色传递给 Amazon 服务的权限和CreateEnvironment。
Elastic Beanstalk 管理的角色
Elastic Beanstalk 通过在您的账户中创建的AWSServiceRoleForElasticBeanstalk服务相关角色来运营 Beanstalk 集群环境。您不能创建、配置或传递此角色。亚马逊 EKS 同样使用自己的服务相关角色。AWSServiceRoleForAmazonEKS有关 Elastic Beanstalk 如何使用服务相关角色,请参阅。将服务相关角色用于 Elastic Beanstalk
确认环境使用的角色
环境进入Ready状态后,阅读其已解析的配置:
$ aws elasticbeanstalk describe-configuration-settings \
--application-name my-app \
--environment-name my-cluster-env \
--query "ConfigurationSettings[0].OptionSettings[?OptionName=='cluster-role' || OptionName=='node-role' || OptionName=='observability-role'].[Namespace,OptionName,Value]" \
--output table
确认集群、节点和可观测性角色条目包含创建期间提供的 ARN。如果环境使用应用程序角色,请运行凭据身份签入配置应用程序角色并确认返回的 ARN 可以识别所选角色。对于基于源代码的应用程序版本,请等待版本报告PROCESSED;该状态确认 Amazon CodeBuild 可以使用构建角色并完成映像构建。请参阅为 Beanstalk 集群环境构建容器镜像。
应用程序权限
当正在运行的应用程序必须调用 Amazon 服务时,使用应用程序角色。在创建环境之前配置角色,并仅授予应用程序所需的权限。应用程序通过亚马逊 EKS Pod 身份而不是通过亚马逊 EC2 实例配置文件接收角色。
在aws:elasticbeanstalk:eks:environment命名空间的application-role设置中传递角色的 ARN,或者在创建环境时在 Elastic Beanstalk 控制台中选择该角色。
应用程序角色也是读取第三方可观测性后端凭据的角色。如果您将任何可观测性后端设置为custom,请授予应用程序角色secretsmanager:GetSecretValue和secretsmanager:DescribeSecret命名的 Secrets Manager 密钥。custom-credentials请参阅向第三方后端发送可观测性数据。
配置应用程序角色
在创建环境之前创建应用程序角色。仅向角色授予应用程序所需的操作和资源。为亚马逊 EKS Pod 身份配置其信任策略,包括sts:TagSession为pods.eks.amazonaws.com服务主体配置sts:AssumeRole和信任策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
-
使用前面的信任策略创建角色。
-
附加基于身份的政策,仅授予应用程序所需的服务操作和资源。
-
在 Elastic Beanstalk 控制台中,启动环境创建工作流程并扩展服务访问权限。
-
在 “应用程序角色-可选” 下选择角色。完成剩余的环境配置,然后创建环境。
使用 Amazon CLI 或 API,改为在
create-environment请求中添加application-role选项来选择角色:--option-settings \ Namespace=aws:elasticbeanstalk:eks:environment,OptionName=application-role,Value=arn:aws:iam::111122223333:role/my-application-role -
部署应用程序后,从应用程序调用所需的 Amazon 服务。要独立于服务策略验证凭据身份,请致电 Amazon STS
GetCallerIdentity并确认返回的 ARN 可识别所选应用程序角色。
如果应用程序收到AccessDenied,请确认您在环境创建期间选择了预期角色,其信任策略是否允许 Amazon EKS Pod Identity,以及其基于身份的政策是否允许所请求的操作和资源。更正信任或权限政策,重复凭证身份检查和应用程序服务调用。如果选择了错误的角色,请使用预期角色创建替代环境,而不是向错误的角色添加应用程序权限。当环境需要不同的访问权限时,使用不同的应用程序角色。不要向群集或节点角色授予应用程序权限。
诊断角色故障
从环境的 Elastic Beanstalk 事件开始。设置operation_start为请求失败前夕记录的时间戳:
$ operation_start='timestamp-recorded-before-the-request'
$ aws elasticbeanstalk describe-events \
--environment-name my-cluster-env \
--severity ERROR \
--start-time "$operation_start" \
--max-items 20
- 环境创建拒绝了基础设施的角色
-
确认该角色在环境账户中,其信任策略和附加策略符合当前的 Amazon EKS 自动模式指南,且其 ARN 已完成。如果请求的子网集已经有注册的集群,请使用其注册的群集和节点角色。操作错误表明请求值和注册值存在冲突。更正请求并再次创建环境。您无法在现有环境中替换这些角色。
- 无法检索应用程序映像
-
验证节点角色是否具有已记录的 Amazon ECR 检索权限和信任政策。还要验证图像 URI 和任何限制访问的存储库策略。更正角色或存储库策略,然后再次部署应用程序版本。
- 源代码生成报告
FAILED -
验证应用程序版本构建配置中的编译角色并检查编译诊断。在创建新的应用程序版本之前,更正角色信任或权限策略。请参阅为 Beanstalk 集群环境构建容器镜像。
- 正在运行的应用程序接收
AccessDenied -
使用应用程序角色签入。配置应用程序角色首先确认凭据身份,然后将应用程序日志和 CloudTrail 事件中被拒绝的操作和资源与角色策略进行比较。