Rol de ejecución de Amazon MWAA - Amazon Managed Workflows para Apache Airflow

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Rol de ejecución de Amazon MWAA

Un rol de ejecución es un rol AWS Identity and Access Management (IAM) con una política de permisos que otorga a Amazon Managed Workflows for Apache Airflow permiso para invocar los recursos de otros AWS servicios en su nombre. Esto puede incluir recursos como su depósito de Amazon S3, su AWS clave propia y sus CloudWatch registros. Los entornos de Amazon MWAA necesitan un rol de ejecución para cada entorno. En esta página, se describe cómo usar y configurar la función de ejecución de su entorno para permitir que Amazon MWAA acceda a otros AWS recursos utilizados por su entorno.

Información general sobre los roles de ejecución

El permiso para que Amazon MWAA utilice otros AWS servicios utilizados por su entorno se obtiene del rol de ejecución. Una función de ejecución de Amazon MWAA necesita permiso para utilizar los siguientes AWS servicios en un entorno:

  • Amazon CloudWatch (CloudWatch): para enviar métricas y registros de Apache Airflow.

  • Amazon Simple Storage Service (Amazon S3): sirve para analizar el código de los DAG de su entorno y los archivos auxiliares (por ejemplo, un requirements.txt).

  • Amazon Simple Queue Service (Amazon SQS): sirve para poner en una cola de Amazon SQS que sea propiedad de Amazon MWAA las tareas de Apache Airflow de su entorno.

  • AWS Key Management Service (AWS KMS): para el cifrado de datos de su entorno (mediante una clave propia o una clave AWS gestionada por el cliente).

    nota

    Si ha elegido que Amazon MWAA utilice una clave de KMS AWS gestionada para cifrar sus datos, debe definir los permisos en una política adjunta a su función de ejecución de Amazon MWAA que conceda acceso a claves de KMS arbitrarias almacenadas fuera de su cuenta a través de Amazon SQS. Para que el rol de ejecución de su entorno pueda acceder a claves de KMS arbitrarias, deben darse las dos condiciones siguientes:

    • La clave de KMS de una cuenta de terceros debe permitir el acceso entre cuentas por medio de su política de recursos.

    • El código de sus DAG debe acceder a una cola de Amazon SQS que comienza con airflow-celery- en la cuenta de terceros y utiliza la misma clave de KMS para el cifrado.

    Para mitigar los riesgos asociados con el acceso entre cuentas a los recursos, recomendamos consultar el código incluido en sus DAG para garantizar que sus flujos de trabajo no accedan a colas arbitrarias de Amazon SQS ajenas a su cuenta. Además, puede utilizar una clave de KMS administrada por el cliente que se encuentre almacenada en su propia cuenta para administrar el cifrado en Amazon MWAA. Esto limitará el rol de ejecución de su entorno para que únicamente pueda accederse a la clave de KMS de su cuenta.

    Tenga en cuenta que una vez que haya elegido una opción de cifrado, ya no podrá cambiar su elección para los entornos existentes.

Los roles de ejecución también necesitan permiso para realizar las siguientes acciones de IAM:

  • airflow:PublishMetrics: permite que Amazon MWAA supervise el estado de un entorno.

Permisos que se asocian de forma predeterminada

Puede utilizar las opciones predeterminadas de la consola de Amazon MWAA para crear un rol de ejecución y una clave propiedad de AWS y, a continuación, seguir los pasos que se indican en esta página para añadir políticas de permisos a su rol de ejecución.

  • Si elige la opción Crear un nuevo rol en la consola, Amazon MWAA asociará a su rol de ejecución los permisos mínimos necesarios para un entorno.

  • En algunos casos, Amazon MWAA asociará los permisos máximos. Por ejemplo, le recomendamos que elija esta opción en la consola de Amazon MWAA si al crear un entorno desea crear un rol de ejecución. Amazon MWAA añade automáticamente las políticas de permisos para todos los grupos de CloudWatch registros mediante el patrón de expresiones regulares en la función de ejecución as. "arn:aws:logs:your-region:your-account-id:log-group:airflow-your-environment-name-*"

¿Cómo añadir permisos para usar otros servicios AWS

Amazon MWAA no puede añadir ni editar políticas de permisos para un rol de ejecución existente una vez creado el entorno. Por ello, deberá actualizar su rol de ejecución con las políticas de permisos adicionales que necesite su entorno. Por ejemplo, si su DAG necesita acceso a AWS Glue, Amazon MWAA no puede detectar automáticamente que estos permisos son necesarios para su entorno ni añadirlos a su función de ejecución.

Puede añadir permisos a un rol de ejecución de dos maneras:

  • Modificando la política JSON insertada del rol de ejecución. Puede utilizar los ejemplos de documentos de política de JSON de esta página para añadir o sustituir la política JSON de rol de ejecución en la consola de IAM.

  • Creando una política de JSON para un AWS servicio y adjuntándola a su función de ejecución. Puede seguir los pasos de esta página para asociar un nuevo documento de política JSON para un AWS servicio a su función de ejecución en la consola de IAM.

En caso de que el rol de ejecución ya esté asociado a su entorno, Amazon MWAA podrá comenzar a utilizar las políticas de permisos añadidas de forma inmediata. No obstante, tenga en cuenta que sus DAG podrían fallar si elimina cualquier permiso necesario de un rol de ejecución.

Cómo asociar un nuevo rol de ejecución

Se puede cambiar el rol de ejecución de un entorno en cualquier momento. Si aún no ha asociado un nuevo rol de ejecución a su entorno, siga los pasos que se indican en esta página para crear una política para el nuevo rol de ejecución y asociarlo a su entorno.

Creación de un nuevo rol

Amazon MWAA crea una clave propiedad de AWS para el cifrado de datos y un rol de ejecución en su nombre de forma predeterminada. Al crear un entorno, podrá elegir entre las opciones predeterminadas de la consola de Amazon MWAA. La imagen siguiente muestra la opción predeterminada que debe escogerse para crear un rol de ejecución para un entorno.

Imagen con la opción predeterminada para crear un nuevo rol.

Consulta y actualización de la política de un rol de ejecución

Puede ver el rol de ejecución de su entorno en la consola de Amazon MWAA y actualizar la política JSON del rol en la consola de IAM.

Pasos para asociar la política a un rol de ejecución
  1. Abra la página Entornos en la consola de Amazon MWAA.

  2. Seleccione un entorno.

  3. Elija el rol de ejecución en el panel Permisos para abrir la página de permisos en IAM.

  4. Elija el nombre del rol de ejecución para abrir la política de permisos.

  5. Elija Editar política.

  6. Seleccione la pestaña JSON.

  7. Actualice su política JSON.

  8. Elija Revisar política.

  9. Elija Guardar cambios.

Adjunta una política de JSON para usar otros servicios AWS

Puedes crear una política de JSON para un AWS servicio y adjuntarla a tu función de ejecución. Por ejemplo, puede asociar la siguiente política JSON para conceder acceso de solo lectura a todos los recursos de AWS Secrets Manager.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource":[ "*" ] } ] }
Pasos para asociar la política a un rol de ejecución
  1. Abra la página Entornos en la consola de Amazon MWAA.

  2. Seleccione un entorno.

  3. Elija su rol de ejecución en el panel Permisos.

  4. Seleccione Asociar políticas.

  5. Elija Crear política.

  6. Elija JSON.

  7. Pegue la política JSON.

  8. Elija Siguiente: Etiquetas y Siguiente: Consultar.

  9. Indique un nombre descriptivo (por ejemplo, “SecretsManagerReadPolicy”) y una descripción para la política.

  10. Elija Crear política.

Cómo conceder acceso al bucket de Amazon S3 con un bloqueo de acceso público a nivel de cuenta

Es posible que quiera bloquear el acceso a todos los buckets de su cuenta mediante la operación PutPublicAccessBlock en Amazon S3. Al bloquear el acceso a todos los buckets de su cuenta, el rol de ejecución de su entorno debe incluir la acción s3:GetAccountPublicAccessBlock en una política de permisos.

El ejemplo siguiente muestra la política que debe asociar a su rol de ejecución si bloquea el acceso a todos los buckets de Amazon S3 de su cuenta.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetAccountPublicAccessBlock", "Resource": "*" } ] }

Para más información acerca de cómo restringir el acceso a los buckets de Amazon S3, consulte Bloquear el acceso público a su almacenamiento de Amazon S3 en la Guía del usuario de Amazon Simple Storage Service.

Uso de las conexiones de Apache Airflow

También puede crear una conexión de Apache Airflow y especificar su rol de ejecución y su ARN en el objeto de conexión de Apache Airflow. Para obtener más información, consulte Administración de las conexiones a Apache Airflow.

Ejemplos de políticas JSON para un rol de ejecución

En esta sección se muestran dos ejemplos de políticas de permisos que puede utilizar para sustituir la que emplea para su rol de ejecución actual o bien para crear un nuevo rol de ejecución y utilizarlas para su entorno. Estas políticas contienen marcadores de posición del ARN de recursos para los grupos de registro de Apache Airflow, un bucket de Amazon S3 y un entorno de Amazon MWAA.

Recomendamos copiar la política de ejemplo, sustituir los ARN o marcadores de posición y, a continuación, utilizar la política JSON para crear o actualizar un rol de ejecución. Por ejemplo, puede sustituir {your-region} por us-east-1.

Ejemplo de política de claves para una clave administrada por el cliente

El siguiente ejemplo muestra la política de un rol de ejecución que puede utilizar para una clave administrada por el cliente.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ], "Resource": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents", "logs:GetLogEvents", "logs:GetLogRecord", "logs:GetLogGroupFields", "logs:GetQueryResults" ], "Resource": [ "arn:aws:logs:{your-region}:{your-account-id}:log-group:airflow-{your-environment-name}-*" ] }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetAccountPublicAccessBlock" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "cloudwatch:PutMetricData", "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:{your-region}:*:airflow-celery-*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt" ], "Resource": "arn:aws:kms:{your-region}:{your-account-id}:key/{your-kms-cmk-id}", "Condition": { "StringLike": { "kms:ViaService": [ "sqs.{your-region}.amazonaws.com", "s3.{your-region}.amazonaws.com" ] } } } ] }

A continuación, deberá permitir que Amazon MWAA asuma este rol para que pueda llevar a cabo acciones en su nombre. Para ello, puede añadir las entidades principales de servicio "airflow.amazonaws.com" y "airflow-env.amazonaws.com" a la lista de entidades de confianza para este rol de ejecución mediante la consola de IAM, o bien incluir estas entidades principales de servicio en el documento de política de asunción de roles correspondiente a este rol de ejecución por medio del comando create-role de IAM y mediante la AWS CLI. A continuación, encontrará un ejemplo de documento de política de asunción de roles:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": ["airflow.amazonaws.com","airflow-env.amazonaws.com"] }, "Action": "sts:AssumeRole" } ] }

Después, asocie la política JSON siguiente a su clave administrada por el cliente. Esta política utiliza el prefijo clave de kms:EncryptionContextcondición para permitir el acceso a su grupo de registros de Apache Airflow en Logs. CloudWatch

{ "Sid": "Allow logs access", "Effect": "Allow", "Principal": { "Service": "logs.{your-region}.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:{your-region}:{your-account-id}:*" } } }

Ejemplo de política para una clave propia AWS

El siguiente ejemplo muestra la política de un rol de ejecución que puede utilizar para una clave propiedad de AWS.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "airflow:PublishMetrics", "Resource": "arn:aws:airflow:{your-region}:{your-account-id}:environment/{your-environment-name}" }, { "Effect": "Deny", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ], "Resource": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents", "logs:GetLogEvents", "logs:GetLogRecord", "logs:GetLogGroupFields", "logs:GetQueryResults" ], "Resource": [ "arn:aws:logs:{your-region}:{your-account-id}:log-group:airflow-{your-environment-name}-*" ] }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetAccountPublicAccessBlock" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "cloudwatch:PutMetricData", "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:{your-region}:*:airflow-celery-*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt" ], "NotResource": "arn:aws:kms:*:{your-account-id}:key/*", "Condition": { "StringLike": { "kms:ViaService": [ "sqs.{your-region}.amazonaws.com" ] } } } ] }

Siguientes pasos