Gerenciar funções de serviço do Elastic Beanstalk - AWS Elastic Beanstalk

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Gerenciar funções de serviço do Elastic Beanstalk

Para gerenciar e monitorar seu ambiente, AWS Elastic Beanstalk executa ações nos recursos do ambiente em seu nome. O Elastic Beanstalk precisa de certas permissões para realizar essas ações e AWS Identity and Access Management assume funções de serviço (IAM) para obter essas permissões.

O Elastic Beanstalk precisa usar credenciais de segurança temporárias sempre que assumir uma função de serviço. Para obter essas credenciais, o Elastic Beanstalk envia uma solicitação para o AWS Security Token Service (AWS STS) em um endpoint específico da região. Para obter mais informações, consulte Credenciais de segurança temporárias no Manual do usuário do IAM.

nota

Se o AWS STS endpoint da região em que seu ambiente está localizado estiver desativado, o Elastic Beanstalk enviará a solicitação em um endpoint alternativo que não pode ser desativado. Este endpoint está associado a uma região diferente. Assim, trata-se de uma solicitação entre regiões. Para obter mais informações, consulte Ativação e desativação AWS STS em uma AWS região no Guia do usuário do IAM.

Gerenciar funções de serviço usando o console do Elastic Beanstalk e a CLI do EB

Você pode usar o console do Elastic Beanstalk e a CLI do EB para configurar funções de serviço para o seu ambiente com um conjunto suficiente de permissões. Eles criam uma função de serviço padrão e usam políticas gerenciadas nela.

Políticas gerenciadas de função de serviços

O Elastic Beanstalk fornece uma política gerenciada para o monitoramento avançado de integridade e outra com permissões adicionais necessárias para atualizações de plataforma gerenciada. O console e a CLI do EB atribuem as políticas à função de serviço padrão criada para você. Essas políticas devem ser usadas somente para esta função de serviço padrão. Elas não devem ser usadas com outros usuários ou funções em suas contas.

Esta política concede permissões ao Elastic Beanstalk para monitorar a integridade do ambiente e da instância.

{ "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": [ "*" ] } ] }

Esta política concede permissões ao Elastic Beanstalk para atualizar ambientes em seu nome a fim de realizar atualizações gerenciadas de plataforma.

Agrupamentos de permissão no nível de serviço

Esta política é agrupada em declarações com base no conjunto de permissões fornecidas.

  • ElasticBeanstalkPermissions: esse grupo de permissões destina-se a acionar as ações de serviço do Elastic Beanstalk (APIs do Elastic Beanstalk).

  • AllowPassRoleToElasticBeanstalkAndDownstreamServices - Esse grupo de permissões permite que qualquer função seja transferida para o Elastic Beanstalk e para outros serviços downstream, como o AWS CloudFormation.

  • ReadOnlyPermissions: esse grupo de permissões destina-se a coletar informações sobre o ambiente em execução.

  • *OperationPermissions: os grupos com este padrão de nomenclatura destinam-se a acionar as operações necessárias para executar atualizações na plataforma.

  • *BroadOperationPermissions: os grupos com este padrão de nomenclatura destinam-se a acionar as operações necessárias para executar atualizações na plataforma. Eles também incluem permissões amplas para oferecer suporte a ambientes herdados.

  • *TagResource— Os grupos com esse padrão de nomenclatura são para chamadas que usam as tag-on-create APIs para anexar tags em recursos que estão sendo criados em um ambiente do 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" ] } } } ] }

Para visualizar o conteúdo de uma política gerenciada, você também pode usar a página Políticas no console do IAM.

Importante

As políticas gerenciadas do Elastic Beanstalk não fornecem permissões granulares, elas concedem todas as permissões que são potencialmente necessárias para trabalhar com aplicações Elastic Beanstalk. Em alguns casos, talvez você queira restringir ainda mais as permissões de nossas políticas gerenciadas. Para ver um exemplo de um caso de uso, consulteImpedindo o acesso entre ambientes cruzados ao bucket do Amazon S3.

Nossas políticas gerenciadas também não abrangem permissões para recursos personalizados que você pode adicionar à sua solução e que não são gerenciados pelo Elastic Beanstalk. Para implementar permissões mais granulares, permissões mínimas necessárias ou permissões de recursos personalizadas, use políticas personalizadas.

Políticas gerenciadas pela obsoletas

No passado, o Elastic Beanstalk AWSElasticBeanstalkServiceapoiava a política de função de serviço gerenciado. Esta política foi substituída por AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy. Talvez você ainda consiga ver e usar a política anterior no console do IAM.

Para ver o conteúdo da política gerenciada, consulte AWSElasticBeanstalkServiceo Guia de referência de políticas AWS gerenciadas.

No entanto, recomendamos que você faça a transição para o uso da nova política gerenciada (AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy). Adicione políticas personalizadas para conceder permissões a recursos personalizados, se tiver alguma.

Usar o console do Elastic Beanstalk

Ao executar um ambiente no console do Elastic Beanstalk, o console cria uma função de serviço padrão chamada aws-elasticbeanstalk-service-role e anexa políticas gerenciadas com permissões padrão a essa função de serviço.

Para permitir que o Elastic Beanstalk assuma a função aws-elasticbeanstalk-service-role, a função de serviço especifica o Elastic Beanstalk como uma entidade confiável na política de relacionamento de confiança.

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

Ao habilitar atualizações gerenciadas de plataforma para o ambiente, o Elastic Beanstalk assume uma função de serviço separada para executar atualizações gerenciadas. Por padrão, o console do Elastic Beanstalk usa a mesma função de serviço gerada, aws-elasticbeanstalk-service-role, para a função de serviço de atualizações gerenciadas. Se você alterar a função de serviço padrão, o console definirá a função de serviço de atualizações gerenciadas para usar a função vinculada ao serviço de atualizações gerenciadas, AWSServiceRoleForElasticBeanstalkManagedUpdates. Para obter mais informações sobre funções vinculadas ao serviço, consulte Usar funções vinculadas ao serviço.

nota

Em função de problemas de permissão, o serviço do Elastic Beanstalk nem sempre consegue criar essa função vinculada ao serviço para você com sucesso. Portanto, o console tenta criá-lo explicitamente. Para garantir que sua conta tenha essa função vinculada ao serviço, crie um ambiente pelo menos uma vez usando o console e configure as atualizações gerenciadas para serem habilitadas antes da criação do ambiente.

Uso da EB CLI

Se você executar um ambiente usando o comando eb create da Interface de linhas de comando do Elastic Beanstalk (CLI do EB) e não especificar uma função de serviço por meio da opção --service-role, o Elastic Beanstalk cria uma função de serviço padrão aws-elasticbeanstalk-service-role. Se a função de serviço padrão já existir, o Elastic Beanstalk a usará para o novo ambiente. Nessas situações, o console do Elastic Beanstalk também executa ações semelhantes.

Diferente de como é no console, você não pode especificar uma função de serviço de atualizações gerenciadas usando uma opção de comando da CLI do EB. Se você habilitar atualizações gerenciadas para o seu ambiente, deverá definir a função de serviço de atualizações gerenciadas nas opções de configuração. O exemplo a seguir habilita atualizações gerenciadas e usa a função de serviço padrão como uma função de serviço de atualizações gerenciadas.

exemplo .ebextensions/ .config managed-platform-update
option_settings: aws:elasticbeanstalk:managedactions: ManagedActionsEnabled: true PreferredStartTime: "Tue:09:00" ServiceRoleForManagedUpdates: "aws-elasticbeanstalk-service-role" aws:elasticbeanstalk:managedactions:platformupdate: UpdateLevel: patch InstanceRefreshEnabled: true

Gerenciar funções de serviço usando a API do Elastic Beanstalk

Ao usar a ação CreateEnvironment da API do Elastic Beanstalk para criar um ambiente, especifique uma função de serviço usando a opção de configuração ServiceRole no namespace aws:elasticbeanstalk:environment. Para obter mais informações sobre como usar o monitoramento avançado de integridade com a API do Elastic Beanstalk, consulte Usar relatórios de integridade aprimorada com a API do Elastic Beanstalk.

Além disso, se você habilitar as atualizações gerenciadas de plataforma para o ambiente, poderá especificar uma função de serviço de atualizações gerenciadas usando a opção ServiceRoleForManagedUpdates do namespace aws:elasticbeanstalk:managedactions.

Usar funções vinculadas ao serviço

Uma função vinculada ao serviço é um tipo exclusivo de função de serviço predefinida pelo Elastic Beanstalk para incluir todas as permissões que o serviço exige para chamar outros serviços em seu nome. AWS A função vinculada a serviço é associada à sua conta. O Elastic Beanstalk cria essa função uma única vez e depois a reutiliza ao criar ambientes adicionais. Para obter mais informações sobre o uso de funções vinculadas a serviços com ambientes do Elastic Beanstalk, consulte Usar funções vinculadas ao serviço para o Elastic Beanstalk.

Se você criar um ambiente usando a API do Elastic Beanstalk e não especificar uma função de serviço, o Elastic Beanstalk cria uma função vinculada ao serviço de monitoramento para a sua conta, se ainda não houver uma. O Elastic Beanstalk usa essa função para o novo ambiente. Você também pode usar o IAM para criar uma função vinculada ao serviço de monitoramento para a sua conta com antecedência. Depois que a sua conta tiver essa função, você pode usá-la para criar um ambiente usando a API do Elastic Beanstalk, o console do Elastic Beanstalk ou a CLI do EB.

Se você habilitar atualizações de plataforma gerenciadas para o ambiente e especificar AWSServiceRoleForElasticBeanstalkManagedUpdates como o valor da opção ServiceRoleForManagedUpdates do namespace aws:elasticbeanstalk:managedactions, o Elastic Beanstalk criará uma função vinculada ao serviço de atualizações gerenciadas para a conta, se ainda não houver uma. O Elastic Beanstalk usa a função para executar atualizações gerenciadas para o novo ambiente.

nota

Quando o Elastic Beanstalk tenta criar funções vinculadas ao serviço de monitoramento e atualizações gerenciadas para sua conta quando um ambiente é criado, é necessário ter a permissão iam:CreateServiceLinkedRole. Se você não tiver essa permissão, haverá falhas na criação do ambiente e uma mensagem explicando o problema será exibida.

Como alternativa, outro usuário com permissão para criar funções vinculadas ao serviço pode usar o IAM para criá-las com antecedência. Com esse método, você não precisa da permissão iam:CreateServiceLinkedRole para criar o seu ambiente.

Como verificar as permissões de funções de serviço padrão

As permissões concedidas pela sua função de serviço padrão variam com base na sua data de criação, na última vez que você executou um ambiente e em qual cliente você usou. No console do IAM, você pode verificar as permissões concedidas pela função de serviço padrão.

Para verificar as permissões da função de serviço padrão
  1. No console do IAM, abra a página Roles (Funções).

  2. Escolha aws-elasticbeanstalk-service-role.

  3. Na guia Permissions, (Permissões) revise a lista de políticas associadas à função.

  4. Para visualizar as permissões que uma política concede, selecione a política.

Atualização de uma função de serviço out-of-date padrão

Se a função de serviço padrão não tiver as permissões necessárias, você poderá atualizá-la criando um novo ambiente no console de gerenciamento de ambiente do Elastic Beanstalk.

Como alternativa, você pode adicionar manualmente as políticas gerenciadas à função de serviço padrão.

Para adicionar políticas gerenciadas à função de serviço padrão
  1. No console do IAM, abra a página Roles (Funções).

  2. Escolha aws-elasticbeanstalk-service-role.

  3. Na guia Permissions (Permissões), escolha Attach policies (Anexar políticas).

  4. Insira AWSElasticBeanstalk para filtrar as políticas.

  5. Selecione as seguintes políticas e selecione Attach policy (Associar política):

    • AWSElasticBeanstalkEnhancedHealth

    • AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

Adicionar permissões à função de serviço padrão

Se seu aplicativo incluir arquivos de configuração que se referem a AWS recursos cujas permissões não estão incluídas na função de serviço padrão, o Elastic Beanstalk pode precisar de permissões adicionais. Tais permissões extras são necessárias para resolver essas referências quando elas processam os arquivos de configuração durante uma atualização gerenciada. Em caso de ausência das permissões, a atualização falha e o Elastic Beanstalk retorna uma mensagem indicando quais permissões ele precisa. Siga estas etapas para adicionar permissões para serviços adicionais à função de serviço padrão no console do IAM.

Para adicionar outras políticas à função de serviço padrão
  1. No console do IAM, abra a página Roles (Funções).

  2. Escolha aws-elasticbeanstalk-service-role.

  3. Na guia Permissions (Permissões), escolha Attach policies (Anexar políticas).

  4. Selecione a política gerenciada para os serviços adicionais que o seu aplicativo utiliza. Por exemplo, o AmazonAPIGatewayAdministrator ou o AmazonElasticFileSystemFullAccess.

  5. Escolha Anexar política.

Criar uma função de serviço

Se você não pode usar a função de serviço padrão, crie uma função de serviço.

Para criar um perfil de serviço
  1. No console do IAM, abra a página Roles (Funções).

  2. Selecione Criar função.

  3. Em Produto da AWS , escolha AWS Elastic Beanstalk, e selecione o caso de uso.

  4. Selecione Next: Permissions (Próximo: permissões).

  5. Associe as políticas gerenciadas AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy e AWSElasticBeanstalkEnhancedHealth e quaisquer políticas adicionais que fornecem as permissões das quais seu aplicativo precisa.

  6. Escolha Próximo: etiquetas.

  7. (Opcional) Adicione tags à função.

  8. Selecione Next: Review (Próximo: revisar).

  9. Insira um nome para a função.

  10. Selecione Criar função.

Aplique a sua função de serviço personalizada ao criar um ambiente usando o assistente de criação de ambiente ou com a opção --service-role para o comando eb create.