Administración de roles de servicio de Elastic Beanstalk - AWS Elastic Beanstalk

Administración de roles de servicio de Elastic Beanstalk

Para administrar y monitorear su entorno, AWS Elastic Beanstalk realiza acciones en los recursos del entorno en su nombre. Elastic Beanstalk necesita ciertos permisos para realizar estas acciones y para obtenerlos asume funciones de servicio AWS Identity and Access Management (IAM).

Elastic Beanstalk debe utilizar las credenciales de seguridad temporales cada vez que asume un rol de servicio. Para obtener estas credenciales, Elastic Beanstalk envía una solicitud a AWS Security Token Service (AWS STS) en un punto de enlace específico de la región. Para obtener más información, consulte Credenciales de seguridad temporales en la guía del usuario de IAM.

nota

Si el punto de enlace de AWS STS de la región donde se ubica su entorno está desactivado, Elastic Beanstalk envía la solicitud en un punto de enlace alternativo que no se puede desactivar. Este punto de enlace está asociado a una región diferente. Por lo tanto, la solicitud es una solicitud entre regiones. Para obtener más información, consulte Activación y desactivación de AWS STS en una región de AWS en la Guía del usuario de IAM.

Administración de roles de servicio mediante la consola de Elastic Beanstalk y la CLI de EB

Puede usar la consola de Elastic Beanstalk y la CLI de EB a fin de facilitar la configuración de roles de servicio para su entorno con un conjunto suficiente de permisos. Crean un rol de servicio predeterminado y usan políticas administradas en él.

Políticas de rol de servicio administradas

Elastic Beanstalk proporciona una política administrada para el monitoreo del estado mejorado y otra con los permisos adicionales necesarios para las actualizaciones de plataforma administradas. La consola y la CLI de EB asignan ambas políticas al rol de servicio predeterminado que crean para usted. Solo se deben utilizar estas políticas para este rol de servicio predeterminado. No deben usarse con otros usuarios o roles de sus cuentas.

Esta política concede permisos a Elastic Beanstalk para supervisar el estado de las instancias y del entorno.

{ "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 permisos a Elastic Beanstalk para actualizar los entornos en su nombre para realizar actualizaciones de plataformas administradas.

Agrupaciones de permisos de nivel de servicio

Esta política se agrupa en instrucciones basadas en el conjunto de permisos proporcionados.

  • ElasticBeanstalkPermissions: este grupo de permisos es para llamar a las acciones del servicio Elastic Beanstalk (API de Elastic Beanstalk).

  • AllowPassRoleToElasticBeanstalkAndDownstreamServices: este grupo de permisos permite que cualquier rol se transfiera a Elastic Beanstalk y a otros servicios descendentes como AWS CloudFormation.

  • ReadOnlyPermissions: este grupo de permisos sirve para recopilar información sobre el entorno en ejecución.

  • *OperationPermissions: los grupos con este patrón de nomenclatura son para llamar a las operaciones necesarias a fin de llevar a cabo actualizaciones de plataforma.

  • *BroadOperationPermissions: los grupos con este patrón de nomenclatura son para llamar a las operaciones necesarias a fin de llevar a cabo actualizaciones de plataforma. También incluyen amplios permisos para admitir entornos heredados.

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

Para ver el contenido de una política administrada, también puede utilizar la página Policies (Políticas) de la consola de IAM.

nota

En el pasado, Elastic Beanstalk era compatible con la política de rol de servicio administrado AWSElasticBeanstalkService. Esta política ha sido reemplazada por AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy. Es posible que aún pueda ver y utilizar la política anterior en la consola de IAM. Sin embargo, se recomienda realizar la transición con la nueva política administrada (AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy). Agregue políticas personalizadas para conceder permisos a recursos personalizados, si tiene alguna.

Usar la consola de Elastic Beanstalk

Cuando lanza un entorno en la consola de Elastic Beanstalk, la consola crea un rol de servicio predeterminado denominado aws-elasticbeanstalk-service-role y le asigna políticas administradas con permisos predeterminados.

Para permitir que Elastic Beanstalk asuma el rol aws-elasticbeanstalk-service-role, el rol de servicio especifica Elastic Beanstalk como entidad de confianza en la directiva de relación de confianza.

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

Cuando habilita actualizaciones de plataforma administradas en su entorno, Elastic Beanstalk asume un rol de servicio de actualizaciones administradas independiente para realizar actualizaciones administradas. De forma predeterminada, la consola de Elastic Beanstalk utiliza el mismo rol de servicio generado, aws-elasticbeanstalk-service-role, para el rol de servicio de actualizaciones administradas. Si cambia el rol de servicio predeterminado, la consola establece el rol de servicio de actualizaciones administradas para que utilice el rol vinculado al servicio de actualizaciones administradas AWSServiceRoleForElasticBeanstalkManagedUpdates. Para obtener más información acerca de las funciones vinculadas a servicios, consulte Uso de roles vinculados a servicios.

nota

Debido a problemas de permisos, el servicio Elastic Beanstalk no siempre crea este rol vinculado a un servicio correctamente. Por lo tanto, la consola intenta crearlo de forma explícita. Para asegurarse que su cuenta tiene este rol vinculado al servicio, cree un entorno como mínimo una vez mediante la consola y configure las actualizaciones administradas para que se habiliten antes de crear el entorno.

Uso de la CLI de EB

Si lanza un entorno mediante el comando eb create de la interfaz de línea de comandos de Elastic Beanstalk (CLI de EB) y no especifica un rol de servicio a través de la opción --service-role, Elastic Beanstalk crea el rol de servicio predeterminado aws-elasticbeanstalk-service-role. Si el rol de servicio predeterminado ya existe, Elastic Beanstalk lo utiliza para el entorno nuevo. La consola de Elastic Beanstalk también realiza acciones similares en estas situaciones.

A diferencia de la consola, no puede especificar un rol de servicio de actualizaciones administradas cuando usa una opción de comando de la CLI de EB. Si habilita las actualizaciones administradas en el entorno, debe establecer el rol de servicio de actualizaciones administradas mediante las opciones de configuración. En el siguiente ejemplo se habilitan las actualizaciones administradas y se utiliza el rol de servicio predeterminado como rol de servicio de actualizaciones administradas.

ejemplo .ebextensions/managed-platform-update.config

option_settings: aws:elasticbeanstalk:managedactions: ManagedActionsEnabled: true PreferredStartTime: "Tue:09:00" ServiceRoleForManagedUpdates: "aws-elasticbeanstalk-service-role" aws:elasticbeanstalk:managedactions:platformupdate: UpdateLevel: patch InstanceRefreshEnabled: true

Administración de roles de servicio mediante la API de Elastic Beanstalk

Cuando utiliza la acción CreateEnvironment de la API de Elastic Beanstalk para crear un entorno, especifique un rol de servicio mediante la opción de configuración ServiceRole del espacio de nombres aws:elasticbeanstalk:environment. Para obtener más información sobre el uso del monitoreo mejorado del estado con la API de Elastic Beanstalk, consulte Uso de informes de estado mejorados con la API de Elastic Beanstalk.

Además, si habilita las actualizaciones de plataformas administradas en su entorno, puede especificar un rol de servicio de actualizaciones administradas mediante la opción ServiceRoleForManagedUpdates del espacio de nombres aws:elasticbeanstalk:managedactions.

Uso de roles vinculados a servicios

Un rol vinculado a servicios es un tipo único de rol de servicio predefinido por Elastic Beanstalk y que incluye todos los permisos que el servicio requiere para llamar a otros servicios de AWS en su nombre. El rol vinculado al servicio está asociado a su cuenta. Elastic Beanstalk lo crea una vez y, a continuación, vuelve a utilizarlo al crear entornos adicionales. Para obtener más información sobre el uso de roles vinculados a servicios con entornos de Elastic Beanstalk, consulte Uso de roles vinculados a servicios para Elastic Beanstalk.

Si crea un entorno mediante la API de Elastic Beanstalk y no especifica un rol de servicio, Elastic Beanstalk crea un rol vinculado al servicio de monitoreo para su cuenta, si todavía no existe. Elastic Beanstalk utiliza este rol para el entorno nuevo. También puede utilizar IAM para crear un rol vinculado al servicio de monitoreo de la cuenta con antelación. Una vez que su cuenta tenga este rol, puede usarla para crear un entorno mediante la API de Elastic Beanstalk, la consola de Elastic Beanstalk o la CLI de EB.

Si habilita las actualizaciones de plataforma administradas para el entorno y especifica AWSServiceRoleForElasticBeanstalkManagedUpdates como valor para la opción ServiceRoleForManagedUpdates del espacio de nombres aws:elasticbeanstalk:managedactions, Elastic Beanstalk crea un rol vinculado a servicios de actualizaciones administradas para su cuenta, si todavía no existe. Elastic Beanstalk utiliza el a fin de realizar actualizaciones administradas para el entorno nuevo.

nota

Cuando Elastic Beanstalk intenta crear roles vinculados al servicio de actualizaciones administradas y de monitorización para su cuenta al crear un entorno, debe tener el permiso iam:CreateServiceLinkedRole. Si no tiene este permiso, se produce un error en la creación del entorno y aparece un mensaje que explica el problema.

Como alternativa, otro usuario con permiso para crear roles vinculados a servicios puede utilizar IAM para crear el rol vinculado al servicio con antelación. Con este método, no necesita el permiso iam:CreateServiceLinkedRole para crear su entorno.

Verificación de los permisos del rol de servicio predeterminado

Los permisos concedidos por el rol de servicio predeterminado pueden variar en función de cuándo se crearon, la última vez que se lanzó un entorno y el cliente que se utilizó. En la consola de IAM, puede verificar los permisos concedidos por el rol de servicio predeterminado.

Para verificar los permisos del rol de servicio predeterminado

  1. En la consola de IAM, abra la página Roles.

  2. Seleccione aws-elasticbeanstalk-service-role.

  3. Revise la lista de políticas asociadas al rol en la pestaña Permissions (Permisos).

  4. Para ver los permisos que concede una política, elija la política.

Actualización de un rol de servicio predeterminado obsoleto

Si al rol de servicio predeterminado le faltan los permisos necesarios, puede actualizarlo creando un nuevo entorno en la consola de administración del entorno de Elastic Beanstalk.

También puede agregar las políticas administradas al rol de servicio predeterminado de forma manual.

Para añadir políticas administradas al rol de servicio predeterminado

  1. En la consola de IAM, abra la página Roles.

  2. Seleccione aws-elasticbeanstalk-service-role.

  3. En la pestaña Permisos, elija Attach policies (Asociar políticas).

  4. Escriba AWSElasticBeanstalk para filtrar las políticas.

  5. Seleccione las siguientes políticas y, después, elija Attach policy (Asociar política):

    • AWSElasticBeanstalkEnhancedHealth

    • AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

Añadir permisos al rol de servicio predeterminado

Si su aplicación incluye archivos de configuración que hacen referencia a recursos de AWS cuyos permisos no están incluidos en el rol de servicio predeterminado, Elastic Beanstalk podría necesitar permisos adicionales. Estos permisos adicionales son necesarios para resolver estas referencias cuando procesa los archivos de configuración durante una actualización administrada. Si faltan permisos, la actualización produce un error y Elastic Beanstalk devuelve un mensaje que indica el permiso que se necesita. Siga estos pasos a fin de agregar permisos para servicios adicionales al rol de servicio predeterminado en la consola de IAM.

Para añadir políticas adicionales al rol de servicio predeterminado

  1. En la consola de IAM, abra la página Roles.

  2. Seleccione aws-elasticbeanstalk-service-role.

  3. En la pestaña Permisos, elija Attach policies (Asociar políticas).

  4. Seleccione la política administrada que se aplicará a los demás servicios que utilice la aplicación. Por ejemplo, AmazonAPIGatewayAdministrator o AmazonElasticFileSystemFullAccess.

  5. Elija Attach policy.

Creación de un rol de servicio

Si no puede utilizar el rol de servicio predeterminado, cree un rol de servicio.

Para crear un rol de servicio

  1. En la consola de IAM, abra la página Roles.

  2. Elija Create role (crear rol).

  3. En AWS service (Servicio de), elija AWS Elastic Beanstalk y, a continuación, seleccione su caso de uso.

  4. Elija Next: Permissions.

  5. Asocie las políticas administradas AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy y AWSElasticBeanstalkEnhancedHealth y cualquier otra política que proporcione permisos que necesite su aplicación.

  6. Elija Next: Tags (Siguiente: Etiquetas).

  7. (Opcional) Añada etiquetas al rol.

  8. Elija Next: Review.

  9. Escriba un nombre para el rol.

  10. Elija Create role.

Aplique el rol de servicio personalizado cuando cree un entorno con el asistente de creación del entorno o la opción --service-role del comando eb create.