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

Rol de ejecución de Amazon MWAA

Los roles de ejecución son roles de AWS Identity and Access Management (IAM) con una política de permisos que otorgan a Amazon Managed Workflows para Apache Airflow permiso para invocar los recursos de otros servicios de AWS en su nombre. Algunos de los recursos que pueden invocarse son su bucket de Amazon S3, su clave propiedad de AWS y los registros de CloudWatch. 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 los roles de ejecución de su entorno para que Amazon MWAA pueda acceder a otros recursos de AWS que se utilizan en su entorno.

Información general sobre los roles de ejecución

Amazon MWAA obtiene permiso para utilizar los demás servicios de AWS que se utilizan en su entorno gracias a los roles de ejecución. Los roles de ejecución de Amazon MWAA necesitan permiso para utilizar los siguientes servicios de AWS utilizados en un entorno:

  • Amazon CloudWatch (CloudWatch): sirve 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): sirve para cifrar los datos de su entorno (mediante una clave propiedad de AWS o su clave administrada por el cliente).

    nota

    Si ha optado por que Amazon MWAA utilice una clave de KMS propiedad de AWS para cifrar sus datos, deberá definir permisos en una política adjunta a su rol de ejecución de Amazon MWAA que otorguen acceso a claves de KMS arbitrarias almacenadas fuera de su cuenta mediante 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ñadirá automáticamente las políticas de permisos para todos los grupos de registros de CloudWatch utilizando el patrón de expresiones regulares "arn:aws:logs:your-region:your-account-id:log-group:airflow-your-environment-name-*" en el rol de ejecución.

Cómo añadir permisos para poder utilizar otros servicios de 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 precisa obtener acceso a AWS Glue, Amazon MWAA no podrá detectar de forma automática que su entorno necesita estos permisos ni añadirlos a su rol 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 JSON para un servicio de AWS y asociándola a su rol de ejecución. Siga los pasos que se indican en esta página para asociar un nuevo documento de política JSON para un servicio de AWS a su rol 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.

Cómo adjuntar una política JSON para utilizar otros servicios de AWS

Puede crear una política JSON para un servicio de AWS y asociarla a su rol 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. Seleccione 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. Seleccione 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": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "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 “kms:EncryptionContext” en la clave de condición para permitir el acceso al grupo de registros de Apache Airflow en los Registros de 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 propiedad de 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": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "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