Control del acceso a CloudFormation con AWS Identity and Access Management - AWS CloudFormation

Control del acceso a CloudFormation con AWS Identity and Access Management

Con AWS Identity and Access Management (IAM), puede crear usuarios de IAM para controlar quién tiene acceso a recursos específicos en su Cuenta de AWS. Cuando utiliza IAM, puede controlar lo que los usuarios pueden hacer con CloudFormation; por ejemplo, si pueden ver las plantillas de pila, crear pilas o eliminar pilas.

Además de acciones específicas de CloudFormation, puede administrar qué servicios y recursos de AWS están disponibles para cada usuario. De esa manera, puede controlar a qué recursos pueden obtener acceso los usuarios cuando utilizan CloudFormation. Por ejemplo, puede especificar qué usuarios pueden crear instancias Amazon EC2, terminar instancias de base de datos o actualizar VPC. Estos mismos permisos se aplican siempre que utilizan CloudFormation para realizar esas acciones.

Utilice la información de las siguientes secciones para controlar quién puede acceder a CloudFormation. También analizaremos cómo autorizar la creación de recursos de IAM en plantillas, conceder a las aplicaciones que se ejecutan en instancias EC2 los permisos que necesitan y utilizar credenciales de seguridad temporales para mejorar la seguridad en su entorno de AWS.

Definición de políticas de IAM basadas en identidad para CloudFormation

Para dar acceso a CloudFormation, debe crear y asignar políticas de IAM que den a sus identidades de IAM (como usuarios o roles) permiso para llamar a las acciones de API que necesitan.

Con las políticas basadas en identidad de IAM, puede especificar las acciones y recursos permitidos o denegados. CloudFormation admite acciones, claves de condiciones y recursos específicos.

Si es la primera vez que utiliza IAM, comience por familiarizarse con los elementos de una política JSON de IAM. Para obtener más información, consulte Referencia de los elementos de la política de JSON de IAM en la Guía del usuario de IAM. Para aprender a crear políticas de IAM, complete el tutorial Crear y asociar su primera política administrada por el cliente en la documentación de IAM.

Acciones de política para CloudFormation

En el elemento Action de la instrucción de la política de IAM, puede especificar cualquier acción de API que CloudFormation ofrezca. Debe anteponer el nombre de la acción con la cadena cloudformation: en minúsculas. Por ejemplo, cloudformation:CreateStack, cloudformation:CreateChangeSet y cloudformation:UpdateStack.

Para especificar varias acciones en una única instrucción, sepárelas con comas del siguiente modo:

"Action": [ "cloudformation:action1", "cloudformation:action2" ]

También puede utilizar caracteres comodín para especificar varias acciones. Por ejemplo, puede especificar todas las acciones cuyos nombres comiencen con la palabra Get del siguiente modo:

"Action": "cloudformation:Get*"

Para ver una lista completa de las acciones asociadas al prefijo de servicio cloudformation, consulte Actions, resources, and condition keys for AWS CloudFormation y Actions, resources, and condition keys for API de control de nube de AWS en la Referencia de autorización de servicios.

Ejemplos

A continuación se muestra un ejemplo de una política de permisos que concede permisos para ver las pilas de CloudFormation.

ejemplo 1: Una política de ejemplo que concede permisos para ver la pila
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":[ "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResource", "cloudformation:DescribeStackResources" ], "Resource":"*" }] }

Los usuarios que crean o eliminan pilas necesitan permisos adicionales en función de sus plantillas de pilas. Por ejemplo, si su plantilla describe una cola de Amazon SQS, los usuarios deben tener permisos para las acciones de CloudFormation y Amazon SQS, tal como se muestra en la siguiente política de ejemplo.

ejemplo 2: Una política de ejemplo que concede acciones de creación y visualización de pila y todas las acciones Amazon SQS
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":[ "sqs:*", "cloudformation:CreateStack", "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResources", "cloudformation:GetTemplate", "cloudformation:ValidateTemplate" ], "Resource":"*" }] }

Acciones específicas de la consola de CloudFormation

Los usuarios de la consola de CloudFormation requieren permisos adicionales ademas de los necesarios para AWS Command Line Interface o las API de CloudFormation. Estos permisos adicionales admiten características específicas de la consola, como la carga de plantillas a buckets de Amazon S3 y listas desplegables para tipos de parámetros específicos de AWS.

Para todas las acciones enumeradas a continuación, conceda permisos a todos los recursos; no los limite a pilas o buckets específicos.

La siguiente acción se utiliza únicamente por la consola de CloudFormation y no se documenta en la referencia de la API. La acción permite a los usuarios cargar plantillas para buckets de Amazon S3.

  • cloudformation:CreateUploadBucket

Cuando los usuarios cargan plantillas, también necesitan los siguientes permisos de Amazon S3:

  • s3:PutObject

  • s3:ListBucket

  • s3:GetObject

  • s3:CreateBucket

Para ver los valores en las listas desplegables de parámetros en las plantillas con tipos de parámetros específicos de AWS, los usuarios necesitan permisos para realizar las llamadas a la API correspondientes. Por ejemplo, se requieren los siguientes permisos cuando se utilizan estos tipos de parámetros en la plantilla:

  • ec2:DescribeKeyPairs: necesario para el tipo de parámetro AWS::EC2::KeyPair::KeyName.

  • ec2:DescribeSecurityGroups: necesario para el tipo de parámetro AWS::EC2::SecurityGroup::Id.

  • ec2:DescribeSubnets: necesario para el tipo de parámetro AWS::EC2::Subnet::Id.

  • ec2:DescribeVpcs: necesario para el tipo de parámetro AWS::EC2::VPC::Id.

Para obtener información acerca de los parámetros específicos de AWS, consulte Definición de recursos existentes en tiempo de ejecución con tipos de parámetros proporcionados por CloudFormation.

Recursos de políticas para CloudFormation

En una instrucción de política de IAM, el elemento Resource especifica el objeto o los objetos que abarca la instrucción. Para CloudFormation, cada declaración de política de IAM se aplica a los recursos que especifique mediante su Nombre de recurso de Amazon (ARN). El formato específico de ARN depende del recurso.

Para ver una lista completa de los tipos de recursos de CloudFormation y sus ARN, consulte Resource types defined by AWS CloudFormation en la Referencia de autorización de servicios. Para saber qué acciones puede especificar con el ARN de cada recurso, consulte Actions defined by AWS CloudFormation.

Puede especificar acciones para una pila específica, tal como se muestra en el siguiente ejemplo de política. Cuando proporcione un ARN, reemplace el placeholder text por la información específica del recurso.

ejemplo 1: Una política de ejemplo que deniegue las acciones de eliminación y actualización de pila para la pila especificada.
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Deny", "Action":[ "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource":"arn:aws:cloudformation:region:account-id:stack/MyProductionStack/*" }] }

La política anterior utiliza un comodín al final del nombre de la pila a fin de denegar la pila de eliminación y la pila de actualización en el ID de pila completo (como, por ejemplo, arn:aws:cloudformation:region:account-id:stack/MyProductionStack/abc9dbf0-43c2-11e3-a6e8-50fa526be49c) y en el nombre de la pila (como, por ejemplo, MyProductionStack).

Para permitir que las transformaciones AWS::Serverless creen un cambio, incluya el permiso en el nivel de recursos arn:aws:cloudformation:region:aws:transform/Serverless-2016-10-31, tal y como se muestra en la política siguiente.

ejemplo 2: Una política de ejemplo que permite la acción de creación de conjunto de cambios para la transformación especificada.
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "cloudformation:CreateChangeSet" ], "Resource": "arn:aws:cloudformation:region:aws:transform/Serverless-2016-10-31" }] }

Claves de condición de políticas para CloudFormation

En una declaración de política de IAM, puede especificar opcionalmente condiciones que determinan cuándo una política está en efecto. Por ejemplo, puede definir una política que permite a los usuarios de crear una pila solo cuando se especifica una URL de plantilla determinada. Puede definir las condiciones específicas de CloudFormation y las condiciones generales de AWS como, por ejemplo, DateLessThan, que especifica en qué momento una política deja de estar en vigor. Para obtener más información y una lista de las condiciones generales de AWS, consulte Condition (Condición) en la referencia de los elementos de las políticas de IAM en la Guía del usuario de IAM.

nota

No utilice la condición general aws:SourceIp de AWS. CloudFormation aprovisiona recursos utilizando su propia dirección IP, no la dirección IP de la solicitud de origen. Por ejemplo, al crear una pila, CloudFormation lleva a cabo solicitudes desde su dirección IP para lanzar una instancia de Amazon EC2 o para crear un bucket de Amazon S3, en lugar de hacerlo desde la dirección IP de la llamada a CreateStack o el comando create-stack.

En la siguiente lista se describen las condiciones específicas de CloudFormation. Las condiciones se aplican únicamente cuando los usuarios crean o actualizan pilas:

cloudformation:ChangeSetName

Nombre de conjunto de cambios de CloudFormation que desea asociar con una política. Utilice esta condición para controlar qué conjuntos de cambios pueden ejecutar o eliminar los usuarios de .

cloudformation:ImportResourceTypes

Los tipos de recursos de plantilla que quiere asociar a una política como, por ejemplo, AWS::EC2::Instance. Utilice esta condición para controlar con qué tipos de recursos pueden trabajar los usuarios de al importar recursos a una pila. Esta condición se compara con los tipos de recursos que los usuarios declaran en el parámetro ResourcesToImport, que es compatible actualmente solo para solicitudes de la AWS CLI y la API. Al utilizar este parámetro, debe especificar todos los tipos de recursos que desea que los usuarios controlen durante las operaciones de importación. Para obtener más información sobre el parámetro ResourcesToImport, consulte la acción CreateChangeSet en la Referencia de la API de AWS CloudFormation.

Para obtener una lista de posibles ResourcesToImport, consulte Tipo de recurso compatible.

Utilice la convención de nomenclatura de recursos de tres partes para especificar con qué tipos de recursos pueden trabajar los usuarios, desde todos los recursos de una organización hasta un tipo de recurso individual.

organization::*

Especifique todos los tipos de recursos para una organización determinada.

organization::service_name::*

Especifique todos los tipos de recursos para el servicio especificado dentro de una organización determinada.

organization::service_name::resource_type

Especifique un tipo de recurso específico.

Por ejemplo:

AWS::*

Especifique todos los tipos de recursos de AWS admitidos.

AWS::service_name::*

Especifique todos los recursos admitidos de un servicio de AWS específico.

AWS::service_name::resource_type

Especifique un tipo de recurso de AWS específico, como, por ejemplo, AWS::EC2::Instance (todas las instancias de EC2).

cloudformation:ResourceTypes

Los tipos de recursos de plantilla como, por ejemplo AWS::EC2::Instance, que desea asociar con una política. Utilice esta condición para controlar con qué tipo de recursos pueden trabajar los usuarios de al crear o actualizar una pila. Esta condición se compara con los tipos de recursos que los usuarios declaran en el parámetro ResourceTypes, que es compatible actualmente solo para solicitudes de la AWS CLI y la API. Cuando se utiliza este parámetro, los usuarios deben especificar todos los tipos de recursos presentes en su plantilla. Para obtener más información sobre el parámetro ResourceTypes, consulte la acción CreateStack en la Referencia de la API de AWS CloudFormation.

Para obtener una lista de los tipos de recursos, consulte Referencia de tipos de recursos y propiedades de AWS.

Utilice la convención de nomenclatura de recursos de tres partes para especificar con qué tipos de recursos pueden trabajar los usuarios, desde todos los recursos de una organización hasta un tipo de recurso individual.

organization::*

Especifique todos los tipos de recursos para una organización determinada.

organization::service_name::*

Especifique todos los tipos de recursos para el servicio especificado dentro de una organización determinada.

organization::service_name::resource_type

Especifique un tipo de recurso específico.

Por ejemplo:

AWS::*

Especifique todos los tipos de recursos de AWS admitidos.

AWS::service_name::*

Especifique todos los recursos admitidos de un servicio de AWS específico.

AWS::service_name::resource_type

Especifique un tipo de recurso de AWS específico, como, por ejemplo, AWS::EC2::Instance (todas las instancias de EC2).

Alexa::ASK::*

Especifique todos los tipos de recursos en Alexa Skill Kit.

Alexa::ASK::Skill

Especifique el tipo de recursos individual de Alexa::ASK::Skill.

Custom::*

Especifique todos los recursos personalizados.

Para obtener más información, consulte Crear una lógica de aprovisionamiento personalizada con recursos personalizados.

Custom::resource_type

Especifique un tipo de recurso personalizado específico.

Para obtener más información, consulte Crear una lógica de aprovisionamiento personalizada con recursos personalizados.

cloudformation:RoleARN

El Nombre de recurso de Amazon (ARN) de un rol de servicio de IAM que desea asociar con una política. Utilice esta condición para controlar qué rol de servicio pueden utilizar los usuarios de al trabajar con pilas o conjuntos de cambios.

cloudformation:StackPolicyUrl

Una URL de política de pila de Amazon S3 que desea asociar con una política. Utilice esta condición para controlar qué políticas de pila pueden asociar los usuarios de con una pila durante una acción de creación o actualización de la pila. Para obtener más información sobre las políticas de pila, consulte Impida actualizaciones en los recursos de la pila.

nota

Para garantizar que los usuarios solo pueden crear o actualizar pilas con las políticas de pila que ha subido, establezca el bucket de S3 en modo de lectura para dichos usuarios.

cloudformation:TemplateUrl

Una URL de plantilla de Amazon S3 que desea asociar con una política. Utilice esta condición para controlar qué plantillas pueden usar los usuarios de al crear o actualizar pilas.

nota

Para garantizar que los usuarios de solo pueden crear o actualizar pilas con las plantillas que ha subido, establezca el bucket de S3 en modo de lectura para dichos usuarios.

nota

Las siguientes condiciones específicas para CloudFormation se aplican a los parámetros API del mismo nombre:

  • cloudformation:ChangeSetName

  • cloudformation:RoleARN

  • cloudformation:StackPolicyUrl

  • cloudformation:TemplateUrl

Por ejemplo, cloudformation:TemplateUrl sólo se aplica al TemplateUrl parámetro para CreateStackUpdateStack, y CreateChangeSet las API.

Para ver ejemplos de políticas de IAM que utilizan claves de condición para controlar el acceso, consulte Ejemplos de políticas basadas en identidad de IAM para CloudFormation.

Reconocimiento de recursos de IAM en plantillas de CloudFormation

Antes de crear una pila, CloudFormation valida la plantilla. Durante la validación, CloudFormation comprueba la plantilla en busca de recursos de IAM que podría crear. Los recursos de IAM, como un usuario con acceso completo, pueden obtener acceso y modificar cualquier recurso en su cuenta de Cuenta de AWS. Por lo tanto, le sugerimos que revise los permisos asociados a cada recurso de IAM antes de continuar para no crear involuntariamente recursos con permisos escalados. Para garantizar que lo ha hecho, debe confirmar que la plantilla contiene dichos recursos, lo que concede a CloudFormation las capacidades especificadas antes de crear la pila.

Puede confirmar las capacidades de plantillas de CloudFormation a través de la consola de CloudFormation, la AWS Command Line Interface (AWS CLI) o la API:

  • En la consola de CloudFormation, en la página Configurar opciones de pila de los asistentes para crear o actualizar una pila, elija Confirmo que esta plantilla pueda crear recursos de IAM.

  • En la AWS CLI, cuando utilice los comandos create-stack y update-stack, especifique el valor CAPABILITY_IAM o CAPABILITY_NAMED_IAM para la opción --capabilities. Si la plantilla incluye recursos de IAM, puede especificar cualquiera de las dos capacidades. Si la plantilla incluye nombres personalizados para recursos de IAM, debe especificar CAPABILITY_NAMED_IAM.

  • En la API, cuando utiliza las acciones CreateStack y UpdateStack especifique Capabilities.member.1=CAPABILITY_IAM o Capabilities.member.1=CAPABILITY_NAMED_IAM. Si la plantilla incluye recursos de IAM, puede especificar cualquiera de las dos capacidades. Si la plantilla incluye nombres personalizados para recursos de IAM, debe especificar CAPABILITY_NAMED_IAM.

importante

Si la plantilla contiene recursos de IAM con nombre personalizado, no cree varias pilas reutilizando la misma plantilla. Los recursos de IAM deben ser únicos globalmente en su cuenta. Si utiliza la misma plantilla para crear varias pilas en diferentes regiones, las pilas podrían compartir los mismos recursos de IAM, en lugar de que cada una tenga uno único. Los recursos compartidos entre pilas pueden tener consecuencias imprevistas de las que podría no recuperarse. Por ejemplo, si elimina o actualiza recursos de IAM compartidos en una pila, modificará involuntariamente los recursos de otras pilas.

Administración de credenciales para aplicaciones que se ejecutan en instancias de Amazon EC2

Si tiene una aplicación que se ejecuta en una instancia de Amazon EC2 y necesita llevar a cabo solicitudes a recursos de AWS, como buckets de Amazon S3 o una tabla de DynamoDB, la aplicación necesita credenciales de seguridad de AWS. Sin embargo, distribuir e incrustar credenciales de seguridad a largo plazo en cada instancia lanzada es un reto y un posible riesgo para la seguridad. En lugar de utilizar credenciales a largo plazo, como credenciales de usuario de IAM, le recomendamos que cree un rol de IAM que esté asociado a una instancia Amazon EC2 cuando se lance la instancia. Una aplicación puede obtener credenciales de seguridad temporales para la instancia Amazon EC2. No tiene que incrustar credenciales a largo plazo en la instancia. Además, para facilitar la administración de credenciales, puede especificar tan solo un rol individual para múltiples instancias Amazon EC2, no tiene que crear credenciales exclusivas para cada instancia.

Para obtener un fragmento de código de plantilla que muestre cómo lanzar una instancia con un rol, consulte Ejemplos de plantillas de rol de IAM.

nota

Las aplicaciones en las instancias que utilizan credenciales de seguridad temporales pueden llamar a cualquier acción de CloudFormation. No obstante, debido a que CloudFormation interactúa con muchos otros servicios de AWS, debe verificar que todos los servicios que desea utilizar admiten las credenciales de seguridad temporales. Para obtener una lista de los servicios que aceptan credenciales de seguridad temporales, consulte los serviciosAWS que funcionan con IAM en laGuía del usuario de IAM.

Concesión de acceso temporal (acceso federado)

En algunos casos, es posible que desee conceder a los usuarios sin credenciales de AWS acceso temporal a su Cuenta de AWS. En lugar de crear y eliminar credenciales a largo plazo siempre que desee conceder acceso temporal, utilice AWS Security Token Service (AWS STS). Por ejemplo, puede utilizar roles de IAM. Desde un rol de IAM, puede crear mediante programación y, a continuación, distribuir muchas credenciales de seguridad temporales (que incluyen una clave de acceso, una clave de acceso secreta y un token de seguridad). Estas credenciales tienen una vida útil limitada, por lo que no pueden utilizarse para obtener acceso a su Cuenta de AWS cuando vencen. También puede crear varios roles de IAM con el fin de conceder a usuarios individuales diferentes niveles de permisos. Los roles de IAM resultan útiles para situaciones como identidades federadas y el inicio de sesión único.

Una identidad federada es una identidad diferenciada que puede utilizar en varios sistemas. Para los usuarios de nivel Enterprise con un sistema de identidad on-premises establecido (como, por ejemplo, LDAP o Active Directory), puede tratar todas las autenticaciones con el sistema de identidad on-premises. Cuando se ha autenticado a un usuario, proporciona credenciales de seguridad temporales del usuario o del rol de IAM apropiado. Por ejemplo, puede crear un rol de administradores y un rol de desarrolladores, en los que los administradores tengan acceso completo a la cuenta de AWS y los desarrolladores tengan permiso para trabajar únicamente con pilas de CloudFormation. Una vez que un administrador está autenticado, el administrador está autorizado para obtener credenciales de seguridad temporales del rol de administradores. Sin embargo, para los desarrolladores, pueden obtener credenciales de seguridad temporales solo del rol de desarrolladores.

También puede conceder a los usuarios federados acceso a la AWS Management Console. Después de que los usuarios se autentican con su sistema de identidad on-premises, puede construir mediante programación una URL temporal que proporcione acceso directo a la AWS Management Console. Cuando los usuarios utilizan la URL temporal, no es necesario que inicien sesión en AWS, dado que ya se han autenticado (inicio de sesión único). Además, dado que la URL se construye a partir de las credenciales de seguridad temporales de los usuarios, los permisos que están disponibles con esas credenciales determinan qué permisos tienen los usuarios en la AWS Management Console.

Puede utilizar diferentes API de AWS STS para generar credenciales de seguridad temporales. Para obtener más información sobre qué API usar, consulte Comparación de credenciales AWS STS en la Guía del usuario de IAM.

importante

No puede trabajar con IAM cuando utiliza credenciales de seguridad temporales que se han generado a partir de la API GetFederationToken. En lugar de ello, si tiene que trabajar con IAM, utilice credenciales de seguridad temporales de un rol.

CloudFormation interactúa con muchos otros servicios de AWS. Al utilizar credenciales de seguridad temporales con CloudFormation, verifique que todos los servicios que desea utilizar son compatibles con las credenciales de seguridad temporales. Para obtener una lista de los servicios que aceptan credenciales de seguridad temporales, consulte los serviciosAWS que funcionan con IAM en laGuía del usuario de IAM.

Para obtener más información, consulte los siguientes recursos relacionados en la Guía del usuario de IAM: