

# Permisos de flota de spot
<a name="spot-fleet-prerequisites"></a>

Si los usuarios van a crear o administrar una flota de spot, tiene que concederles los permisos necesarios.

Si utiliza la consola de Amazon EC2 para crear una flota de spot, se crean dos roles vinculados a servicios denominados `AWSServiceRoleForEC2SpotFleet` y `AWSServiceRoleForEC2Spot` y un rol denominado `aws-ec2-spot-fleet-tagging-role` que otorgan a la flota de spot los permisos para solicitar, iniciar, terminar y etiquetar recursos en su nombre. Si utiliza la AWS CLI o una API, debe asegurarse de que existen estos roles.

Siga las instrucciones siguientes para conceder los permisos necesarios y crear los roles.

**Topics**
+ [Concesión de permisos a los usuarios para la flota de spot](#spot-fleet-iam-users)
+ [Rol vinculado a servicios de flota de spot](#service-linked-roles-spot-fleet-requests)
+ [Rol vinculado a un servicio para instancias de spot](#service-linked-roles-spot-instances)
+ [Rol de IAM para etiquetar una flota de spot](#spot-fleet-service-linked-role)

## Concesión de permisos a los usuarios para la flota de spot
<a name="spot-fleet-iam-users"></a>

Si los usuarios van a crear o administrar una flota de spot, asegúrese de concederles los permisos necesarios.

**Para crear una política para la flota de spot**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, seleccione **Policies (Políticas)**, **Create policy (Crear política)**.

1. En la página **Crear política** elija **JSON** y reemplace el texto por el siguiente.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:RunInstances",
                   "ec2:CreateTags",
                   "ec2:RequestSpotFleet",
                   "ec2:ModifySpotFleetRequest",
                   "ec2:CancelSpotFleetRequests",
                   "ec2:DescribeSpotFleetRequests",
                   "ec2:DescribeSpotFleetInstances",
                   "ec2:DescribeSpotFleetRequestHistory"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::*:role/aws-ec2-spot-fleet-tagging-role"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iam:CreateServiceLinkedRole",
                   "iam:ListRoles",
                   "iam:ListInstanceProfiles"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

   La política de ejemplo anterior concede a un usuario los permisos necesarios para la mayoría de los casos de uso de la flota de spot. Para limitar las acciones del usuario a unas determinadas acciones de la API, especifique dichas acciones de la API en su lugar.

   **API de IAM y EC2 requeridas**

   Las siguientes API deben incluirse en la política:
   + `ec2:RunInstances`: se necesita para iniciar instancias en una flota de spot
   + `ec2:CreateTags`: se necesita para etiquetar la solicitud, las instancias o los volúmenes de la flota de spot
   + `iam:PassRole`: se necesita para especificar el rol de la flota de spot
   + `iam:CreateServiceLinkedRole`: se necesita para crear el rol vinculado a servicios
   + `iam:ListRoles`: se necesita para enumerar los roles de IAM existentes
   + `iam:ListInstanceProfiles`: se necesita para enumerar los perfiles de instancia existentes
**importante**  
Si especifica un rol para el perfil de instancia de IAM en la especificación de inicialización o en la plantilla de inicialización, debe conceder al usuario el permiso para pasar el rol al servicio. Para ello, incluya `"arn:aws:iam::*:role/IamInstanceProfile-role"` como recurso en la política de IAM para la acción `iam:PassRole`. Para obtener más información, consulte [Concesión de permisos a un usuario para transferir un rol a un servicio de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) en la *Guía del usuario de IAM*.

   **API de flota de spot**

   Agregue las siguientes acciones de API de flota de spot a su política, según sea necesario:
   + `ec2:RequestSpotFleet`
   + `ec2:ModifySpotFleetRequest`
   + `ec2:CancelSpotFleetRequests`
   + `ec2:DescribeSpotFleetRequests`
   + `ec2:DescribeSpotFleetInstances`
   + `ec2:DescribeSpotFleetRequestHistory`

   **API de IAM opcionales**

   (Opcional) Para permitir a un usuario crear roles o perfiles de instancia mediante la consola de IAM, debe agregar las siguientes acciones a la política:
   + `iam:AddRoleToInstanceProfile`
   + `iam:AttachRolePolicy`
   + `iam:CreateInstanceProfile`
   + `iam:CreateRole`
   + `iam:GetRole`
   + `iam:ListPolicies`

1. Elija **Review policy**.

1. En la página **Revisar política**, escriba un nombre y descripción de política y, a continuación, elija **Crear política**.

1. Para dar acceso, agregue permisos a los usuarios, grupos o roles:
   + Usuarios y grupos en AWS IAM Identity Center:

     Cree un conjunto de permisos. Siga las instrucciones de [Creación de un conjunto de permisos](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html) en la *Guía del usuario de AWS IAM Identity Center*.
   + Usuarios gestionados en IAM a través de un proveedor de identidades:

     Cree un rol para la federación de identidades. Siga las instrucciones descritas en [Creación de un rol para un proveedor de identidad de terceros (federación)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) en la *Guía del usuario de IAM*.
   + Usuarios de IAM:
     + Cree un rol que el usuario pueda aceptar. Siga las instrucciones descritas en [Creación de un rol para un usuario de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) en la *Guía del usuario de IAM*.
     + (No recomendado) Adjunte una política directamente a un usuario o agregue un usuario a un grupo de usuarios. Siga las instrucciones descritas en [Adición de permisos a un usuario (consola)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) de la *Guía del usuario de IAM*.

## Rol vinculado a servicios de flota de spot
<a name="service-linked-roles-spot-fleet-requests"></a>

Amazon EC2 utiliza roles vinculados a un servicio para los permisos que necesita para llamar a otros servicios de AWS en su nombre. Un rol vinculado a un servicio es un tipo único de rol de IAM que está vinculado directamente a un servicio de AWS. Los roles vinculados a servicios ofrecen una manera segura de delegar permisos a los servicios de AWS, ya que solo los servicios vinculados pueden asumir roles vinculados a servicios. Para obtener más información, consulte [Roles vinculados al servicio](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create-service-linked-role.html) en la *Guía del usuario de IAM*.

Amazon EC2 usa el rol vinculado a un servicio denominado **AWSServiceRoleForEC2SpotFleet** para iniciar y administrar instancias en su nombre.

**importante**  
Si especifica una [AMI cifrada](AMIEncryption.md) o una instantánea de Amazon EBS cifrada en su flota de spot, debe conceder permiso al rol **AWSServiceRoleForEC2SpotFleet** para utilizar la CMK a fin de que Amazon EC2 pueda iniciar instancias en su nombre. Para obtener más información, consulte [Conceder acceso a CMK para su uso con AMI cifradas e instantáneas de EBS](#spot-fleet-service-linked-roles-access-to-cmks).

### Permisos concedidos por AWSServiceRoleForEC2SpotFleet
<a name="service-linked-role-permissions-granted-by-AWSServiceRoleForEC2SpotFleet"></a>

El rol **AWSServiceRoleForEC2SpotFleet** concede permiso a la flota de spot para solicitar, iniciar, terminar y etiquetar instancias en su nombre. Amazon EC2 utiliza este rol vinculado al servicio para completar las siguientes acciones:
+ `ec2:RequestSpotInstances`: solicitar instancias de spot
+ `ec2:RunInstances`: para iniciar las instancias
+ `ec2:TerminateInstances`: para terminar las instancias
+ `ec2:DescribeImages`: para describir imágenes de Amazon Machine (AMI) para las instancias
+ `ec2:DescribeInstanceStatus`: para describir el estado de las instancias
+ `ec2:DescribeSubnets`: describen las subredes de las instancias
+ `ec2:CreateTags`: agrega etiquetas a la solicitud, las instancias y los volúmenes de la flota de spot
+ `elasticloadbalancing:RegisterInstancesWithLoadBalancer`: para agregar las instancias especificadas al equilibrador de carga especificado
+ `elasticloadbalancing:RegisterTargets`: para registrar los destinos especificados con el grupo de destino especificado

### Creación del rol vinculado a servicio
<a name="service-linked-role-creating-for-spot-fleet"></a>

En la mayoría de los casos, no es necesario crear manualmente roles vinculados a servicios. Amazon EC2 crea el rol vinculado a un servicio **AWSServiceRoleForEC2SpotFleet** la primera vez que se crea una flota de spot con la consola. 

Si tenía una solicitud de flota de spot activa antes de octubre de 2017, cuando Amazon EC2 comenzó a respaldar este rol vinculado a un servicio, Amazon EC2 creó el rol **AWSServiceRoleForEC2SpotFleet** en su cuenta de AWS. Para obtener más información, consulte [Un nuevo rol ha aparecido en la cuenta de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared) en la *Guía del usuario de IAM*.

Si utiliza la AWS CLI o una API para crear una flota de spot, primero debe asegurarse de que este rol existe.

**Creación del rol AWSServiceRoleForEC2SpotFleet para la flota de spot mediante la consola**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Seleccione **Roles** en el panel de navegación.

1. Elija **Creación de rol**.

1. En la página **Seleccionar entidad de confianza**, haga lo siguiente:

   1. En **Tipo de entidad de confianza**, elija **Servicio de AWS**.

   1. En la sección **Caso de uso**, en **Servicio o caso de uso**, elija **EC2**.

   1. En **Caso de uso**, elija **EC2 - Flota de spot**.
**nota**  
El caso de uso **EC2 - Flota de spot** creará automáticamente una política con los permisos de IAM necesarios y sugerirá **AWSEC2SpotFleetServiceRolePolicy** como nombre del rol.

   1. Elija **Siguiente**.

1. En la página **Agregar permisos**, elija **Siguiente**.

1. En la página **Nombrar, revisar y crear**, elija **Crear rol**.

**Creación del rol AWSServiceRoleForEC2SpotFleet para la flota de spot mediante la AWS CLI**  
Utilice el comando [create-service-linked-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-service-linked-role.html) de la siguiente manera.

```
aws iam create-service-linked-role --aws-service-name spotfleet.amazonaws.com
```

Si ya no tiene que utilizar la flota de spot, le recomendamos que elimine el rol **AWSServiceRoleForEC2SpotFleet**. Después de eliminar este rol de su cuenta, Amazon EC2 volverá a crearlo si solicita una flota de spot mediante la consola. Para obtener más información, consulte [Eliminación de un rol vinculado a servicios](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html#id_roles_manage_delete_slr) en la *Guía del usuario de IAM*.

### Conceder acceso a CMK para su uso con AMI cifradas e instantáneas de EBS
<a name="spot-fleet-service-linked-roles-access-to-cmks"></a>

Si especifica una [AMI cifrada](AMIEncryption.md) o una instantánea de Amazon EBS cifrada en su solicitud de flota de spot y usa una clave administrada por el cliente para el cifrado, debe conceder permiso al rol **AWSServiceRoleForEC2SpotFleet** para que use la CMK a fin de que Amazon EC2 pueda iniciar instancias en su nombre. Para ello, debe añadir una concesión a la CMK, como se muestra en el siguiente procedimiento.

Al proporcionar permisos, las concesiones son una alternativa a las políticas de claves. Para obtener más información, consulte [Uso de concesiones](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html) y [Uso de políticas de claves en AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) en la *Guía para desarrolladores de AWS Key Management Service*.

**Para conceder permisos al rol AWSServiceRoleForEC2SpotFleet para que use la CMK**
+ Use el comando [create-grant](https://docs.aws.amazon.com/cli/latest/reference/kms/create-grant.html) para añadir una concesión a la CMK y para especificar la entidad principal (el rol vinculado a un servicio **AWSServiceRoleForEC2SpotFleet**) que recibe permiso para realizar las operaciones que permite la concesión.cin La CMK se especifica con el parámetro `key-id` y el ARN de la CMK. La entidad principal se especifica con el parámetro `grantee-principal` y el ARN del rol vinculado a un servicio **AWSServiceRoleForEC2SpotFleet**.

  ```
  aws kms create-grant \
      --region us-east-1 \
      --key-id arn:aws:kms:us-east-1:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab \
      --grantee-principal arn:aws:iam::111122223333:role/aws-service-role/spotfleet.amazonaws.com/AWSServiceRoleForEC2SpotFleet \
      --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"
  ```

## Rol vinculado a un servicio para instancias de spot
<a name="service-linked-roles-spot-instances"></a>

Amazon EC2 usa el rol vinculado a un servicio denominado **AWSServiceRoleForEC2Spot** para iniciar y administrar instancias de spot en su nombre. Para obtener más información, consulte [Rol vinculado al servicio para solicitudes de instancias de spot](service-linked-roles-spot-instance-requests.md).

## Rol de IAM para etiquetar una flota de spot
<a name="spot-fleet-service-linked-role"></a>

El rol de IAM `aws-ec2-spot-fleet-tagging-role` concede el permiso de flota de spot para etiquetar la solicitud, las instancias y los volúmenes de la flota de spot. Para obtener más información, consulte [Etiquetado de una solicitud de flota de spot nueva o existente y las instancias y los volúmenes que inicia](tag-spot-fleet.md).

**importante**  
Si decide etiquetar las instancias de la flota y mantener la capacidad de destino (la solicitud de flota de spot es de tipo `maintain`), las diferencias de los permisos que se configuran para el usuario e `IamFleetRole` pueden provocar un comportamiento de etiquetado incoherente de las instancias de la flota. Si el `IamFleetRole` no incluye el permiso `CreateTags`, es posible que algunas de las instancias iniciadas por la flota no estén etiquetadas. Mientras trabajamos para corregir esta incoherencia, para asegurarnos de que todas las instancias iniciadas por la flota estén etiquetadas, recomendamos que utilice el rol `aws-ec2-spot-fleet-tagging-role` para el `IamFleetRole`. Como alternativa, para utilizar un rol existente, asocie la política administrada `AmazonEC2SpotFleetTaggingRole` de AWS al rol existente. De lo contrario, debe agregar manualmente el permiso `CreateTags` a la política existente.

**Para crear el rol de IAM para etiquetar una flota de spot**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Seleccione **Roles** en el panel de navegación.

1. Elija **Creación de rol**.

1. En la página **Seleccionar entidad de confianza**, en **Tipo de entidad de confianza**, elija **Servicio de AWS**.

1. En **Caso de uso**, en **Casos de uso para otros servicios de AWS**, elija **EC2** y, a continuación, **EC2: etiquetado de flota de spot**.

1. Elija **Siguiente**.

1. En la página **Agregar permisos**, elija **Siguiente**.

1. En la página **Name, review, and create** (Nombrar, revisar y crear), en **Role name** (Nombre del rol), ingrese un nombre para el rol (por ejemplo, **aws-ec2-spot-fleet-tagging-role**).

1. Revise la información de la página, y luego elija **Create role** (Crear rol).

### Prevención de la sustitución confusa entre servicios
<a name="cross-service-confused-deputy-prevention"></a>

El [problema de la sustitución confusa](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) es un problema de seguridad en el que una entidad que no tiene permiso para realizar una acción puede obligar a una entidad con más privilegios a realizar la acción. Se recomienda utilizar las claves de contexto de condición global [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) y [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) en la política de confianza `aws-ec2-spot-fleet-tagging-role` con el fin de limitar los permisos que la flota de spot concede a otro servicio para el recurso.

**Para agregar las claves de condición aws:SourceArn y aws:SourceAccount a la política de confianza `aws-ec2-spot-fleet-tagging-role`**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Seleccione **Roles** en el panel de navegación.

1. Busque el `aws-ec2-spot-fleet-tagging-role` que haya creado anteriormente y elija el enlace (no la casilla de verificación).

1. En **Resumen**, elija la pestaña **Relaciones de confianza**, y luego **Editar política de confianza**.

1. En la instrucción JSON, agregue un elemento `Condition` que contenga las claves de contexto de condición global `aws:SourceAccount` y `aws:SourceArn` para evitar el [problema del suplente confuso](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) de la siguiente manera:

   ```
   "Condition": {
         "ArnLike": {
           "aws:SourceArn": "arn:aws:ec2:us-east-1:111122223333:spot-fleet-request/sfr-*"
         },
         "StringEquals": {
           "aws:SourceAccount": "111122223333"
         }
   ```
**nota**  
Si el valor `aws:SourceArn` contiene el ID de la cuenta y utiliza ambas claves de contexto de condición global, el valor `aws:SourceAccount` y la cuenta del valor `aws:SourceArn` deben utilizar el mismo ID de cuenta cuando se empleen en la misma instrucción de política.

   La política de confianza final será como sigue:

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": {
       "Sid": "ConfusedDeputyPreventionExamplePolicy",
       "Effect": "Allow",
       "Principal": {
         "Service": "spotfleet.amazonaws.com"
       },
       "Action": "sts:AssumeRole",
       "Condition": {
         "ArnLike": {
           "aws:SourceArn": "arn:aws:ec2:us-east-1:111122223333:spot-fleet-request/sfr-*"
         },
         "StringEquals": {
           "aws:SourceAccount": "111122223333"
         }
       }
     }
   }
   ```

------

1. Elija **Actualizar política**.

La siguiente tabla proporciona los valores potenciales de `aws:SourceArn` para limitar el alcance de `aws-ec2-spot-fleet-tagging-role` en distintos grados de especificidad.


****  

| Operación de la API | Servicio llamado | Ámbito | `aws:SourceArn` | 
| --- | --- | --- | --- | 
| RequestSpotFleet | AWS STS (AssumeRole) | Limite la capacidad de AssumeRole en aws-ec2-spot-fleet-tagging-role a las solicitudes de flota de spot en la cuenta especificada. | arn:aws:ec2:\$1:123456789012:spot-fleet-request/sfr-\$1 | 
| RequestSpotFleet | AWS STS (AssumeRole) | Limite la capacidad de AssumeRole en aws-ec2-spot-fleet-tagging-role a las solicitudes de flota de spot en la cuenta especificada y en la región especificada. Tenga en cuenta que este rol no se podrá utilizar en otras regiones. | arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-\$1 | 
| RequestSpotFleet | AWS STS (AssumeRole) | Limite la capacidad de AssumeRole en aws-ec2-spot-fleet-tagging-role solo a las acciones que afecten a la flota sfr-11111111-1111-1111-1111-111111111111. Tenga en cuenta que es posible que este rol no se pueda utilizar para otras flotas de spot. Además, este rol no se puede utilizar para iniciar ninguna nueva flota de spot a través de request-spot-fleet. | arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-11111111-1111-1111-1111-111111111111 | 