Perfil de execução do Amazon MWAA - Amazon Managed Workflows for Apache Airflow

Perfil de execução do Amazon MWAA

Um perfil de execução é um perfil de AWS Identity and Access Management (IAM) com uma política de permissões que concede permissão ao Amazon Managed Workflows for Apache Airflow para invocar os recursos de outros serviços AWS em seu nome. Isso pode incluir recursos como o bucket do Amazon S3, a chave pertencente à AWS e os CloudWatch Logs. Os ambientes do Amazon MWAA precisam de um perfil de execução por ambiente. Este tópico descreve como usar e configurar o perfil de execução do seu ambiente para permitir que o Amazon MWAA acesse outros recursos da AWS usados pelo seu ambiente.

Visão geral do perfil de execução

A permissão para o Amazon MWAA usar outros serviços da AWS usados pelo seu ambiente é obtida do perfil de execução. Um perfil de execução do Amazon MWAA precisa de permissão para os seguintes serviços AWS usados por um ambiente:

  • Amazon CloudWatch (CloudWatch): para enviar métricas e logs do Apache Airflow.

  • Amazon Simple Storage Service (Amazon S3): para analisar o código DAG e os arquivos de suporte do seu ambiente (como requirements.txt).

  • Amazon Simple Queue Service (Amazon SQS): para enfileirar as tarefas do Apache Airflow do seu ambiente em uma fila do Amazon SQS pertencente ao Amazon MWAA.

  • AWS Key Management Service (AWS KMS): para a criptografia de dados do seu ambiente (usando uma chave pertencente à AWS ou sua chave gerenciada pelo cliente).

    nota

    Se você optou pelo Amazon MWAA para usar uma chave do KMS de propriedade da AWS para criptografar seus dados, será preciso definir permissões em uma política anexada ao seu perfil de execução do Amazon MWAA que conceda acesso a chaves do KMS arbitrárias armazenadas fora da sua conta por meio do Amazon SQS. As duas condições a seguir são necessárias para que o perfil de execução do seu ambiente acesse chaves KMS arbitrárias:

    • Uma chave KMS em uma conta de terceiros precisa permitir esse acesso entre contas por meio de sua política de recursos.

    • Seu código DAG precisa acessar uma fila do Amazon SQS que começa com airflow-celery- na conta de terceiros e usa a mesma chave KMS para criptografia.

    Para mitigar os riscos associados ao acesso entre contas para recursos, recomendamos analisar o código inserido em seus DAGs para garantir que seus fluxos de trabalho não estejam acessando filas arbitrárias do Amazon SQS fora da sua conta. Além disso, você pode usar uma chave KMS gerenciada pelo cliente armazenada em sua própria conta para gerenciar a criptografia no Amazon MWAA. Isso limita o perfil de execução do seu ambiente para acessar somente a chave KMS em sua conta.

    Lembre-se de que depois de escolher uma opção de criptografia, você não poderá alterar sua seleção para um ambiente existente.

Um perfil de execução também precisa de permissão para as seguintes ações do IAM:

  • airflow:PublishMetrics: para permitir que o Amazon MWAA monitore a integridade de um ambiente.

Permissões anexadas por padrão

Você pode usar as opções padrão no console do Amazon MWAA para criar um perfil de execução e uma chave pertencente à AWS, e então usar as etapas desta página para adicionar políticas de permissão ao seu perfil de execução.

  • Quando você escolhe a opção Criar novo perfil no console, o Amazon MWAA atribui as permissões mínimas necessárias para um ambiente ao seu perfil de execução.

  • Em alguns casos, o Amazon MWAA atribui as permissões máximas. Por exemplo, recomendamos escolher a opção no console do Amazon MWAA para criar um perfil de execução ao criar um ambiente. O Amazon MWAA adiciona automaticamente as políticas de permissões para todos os grupos do CloudWatch Logs usando o padrão regex no perfil de execução como "arn:aws:logs:us-east-1:111122223333:log-group:airflow-your-environment-name-*".

Como adicionar permissão para usar outros serviços AWS

O Amazon MWAA não pode adicionar ou editar políticas de permissão em um perfil de execução existente após a criação de um ambiente. Você deve atualizar seu perfil de execução com políticas de permissão adicionais que sejam necessárias pelo seu ambiente. Por exemplo, se seu DAG exigir acesso AWS Glue, o Amazon MWAA não poderá detectar automaticamente essas permissões exigidas pelo seu ambiente nem adicionar as permissões ao seu perfil de execução.

Você pode adicionar permissões a um perfil de execução de duas formas:

  • Ao modificar a política JSON para seu perfil de execução em linha. Você pode usar os exemplos de documentos de política JSON nesta página para adicionar ou substituir a política JSON da seu perfil de execução no console do IAM.

  • Ao criar uma política JSON para um serviço AWS e anexá-la ao seu perfil de execução. Você pode usar as etapas desta página para associar um novo documento de política JSON para um serviço AWS ao seu perfil de execução no console do IAM.

Supondo que o perfil de execução já esteja associada ao seu ambiente, o Amazon MWAA pode começar a usar as políticas de permissão adicionadas imediatamente. Isso também significa que, se você remover as permissões necessárias de um perfil de execução, seus DAGs poderão falhar.

Como associar um novo perfil de execução

Você pode alterar o perfil de execução do seu ambiente a qualquer momento. Se um novo perfil de execução ainda não estiver associado ao seu ambiente, use as etapas desta página para criar uma nova política de perfil de execução e associar o perfil ao seu ambiente.

Criar uma nova função

Por padrão, o Amazon MWAA cria uma chave pertencente à AWS para criptografia de dados e um perfil de execução em seu nome. Você pode escolher as opções padrão no console do Amazon MWAA ao criar um ambiente. A imagem a seguir mostra a opção padrão para criar um perfil de execução para um ambiente.

Esta é uma imagem com a opção padrão para criar um novo perfil.
Importante

Ao criar um novo perfil de execução, não reutilize o nome de um perfil de execução excluído. Nomes exclusivos podem ajudar a evitar conflitos e garantir o gerenciamento adequado dos recursos.

Acessar e atualizar uma política de perfil de execução

Você pode acessar o perfil de execução do seu ambiente no console do Amazon MWAA e atualizar a política JSON do perfil no console do IAM.

Para anexar uma política de perfil de execução
  1. Abra a página Ambientes no console do Amazon MWAA.

  2. Escolha um ambiente.

  3. Escolha o perfil de execução no painel Permissões para abrir a página de permissões no IAM.

  4. Escolha o nome do perfil de execução para abrir a política de permissões.

  5. Escolha Editar política.

  6. Selecione a guia JSON.

  7. Atualize sua política JSON.

  8. Selecione Revisar política.

  9. Escolha Salvar alterações.

Anexe uma política JSON para usar outros serviços da AWS

Você pode criar uma política JSON para um serviço AWS e anexá-la ao seu perfil de execução. Por exemplo, você pode anexar a política JSON a seguir para conceder acesso de somente leitura a todos os recursos do AWS Secrets Manager.

JSON
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource":[ "*" ] } ] }
Para anexar a política ao seu perfil de execução
  1. Abra a página Ambientes no console do Amazon MWAA.

  2. Escolha um ambiente.

  3. Escolha sua função de execução no painel Permissões.

  4. Escolha Anexar políticas.

  5. Escolha Criar política.

  6. Escolha JSON.

  7. Cole a política de JSON.

  8. Selecione Próximo: tags e Próximo: revisar.

  9. Insira um nome descritivo (como SecretsManagerReadPolicy) e uma descrição para a política.

  10. Escolha Criar política.

Concede acesso ao bucket do Amazon S3 com bloqueio de acesso público no nível da conta

Talvez você queira bloquear o acesso a todos os buckets em sua conta usando a operação PutPublicAccessBlock do Amazon S3. Quando você bloqueia o acesso a todos os buckets em sua conta, seu perfil de execução do ambiente deve incluir a ação s3:GetAccountPublicAccessBlock em uma política de permissão.

O exemplo a seguir demonstra a política que você deve anexar ao seu perfil de execução ao bloquear o acesso a todos os buckets do Amazon S3 em sua conta.

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

Para obter mais informações sobre como restringir o acesso aos seus buckets do Amazon S3, consulte Bloquear o acesso público ao seu armazenamento do Amazon S3 no Guia do usuário do Amazon Simple Storage Service.

Use conexões do Apache Airflow

Você também pode criar uma conexão do Apache Airflow e especificar seu perfil de execução e ARN dele no objeto de conexão do Apache Airflow. Consulte Como gerenciar conexões com o Apache Airflow para saber mais.

Exemplos de políticas JSON para um perfil de execução

Você pode usar os dois exemplos de políticas de permissão nesta seção para substituir a política de permissões usada para seu perfil de execução existente ou para criar um novo perfil de execução e usá-lo em seu ambiente. Essas políticas contêm espaços reservados de ARN de recursos para grupos de log do Apache Airflow, um bucket Amazon S3 e um ambiente do Amazon MWAA.

Recomendamos copiar o exemplo de política, substituir os exemplos de ARNs ou espaços reservados e, em seguida, usar a política JSON para criar ou atualizar um perfil de execução.

Exemplo de política para uma chave gerenciada pelo cliente

O exemplo a seguir mostra uma política de perfil de execução que você pode usar para uma chave gerenciada pelo cliente.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:ListAllMyBuckets", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents", "logs:GetLogEvents", "logs:GetLogRecord", "logs:GetLogGroupFields", "logs:GetQueryResults" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333: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:us-east-1:*:airflow-celery-*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt" ], "Resource": "arn:aws:kms:us-east-1:111122223333:key/your-kms-cmk-id", "Condition": { "StringLike": { "kms:ViaService": [ "sqs.us-east-1.amazonaws.com", "s3.us-east-1.amazonaws.com" ] } } } ] }

Em seguida, você precisa permitir que o Amazon MWAA assuma esse perfil a fim de realizar ações em seu nome. Isso pode ser feito ao adicionar entidades principais de serviço "airflow.amazonaws.com" e "airflow-env.amazonaws.com" à lista de entidades confiáveis para esse perfil de execução usando o console do IAM ou colocando essas entidades principais de serviço no documento de política do perfil assumido para esse perfil de execução por meio do comando create-role do IAM com a AWS CLI. Consulte o seguinte exemplo de documento de política do perfil assumido:

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

Em seguida, anexe a seguinte política JSON à sua chave gerenciada pelo cliente. Essa política usa o prefixo de chave de condição kms:EncryptionContext para permitir o acesso ao seu grupo de logs do Apache Airflow no CloudWatch Logs.

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

Exemplo de política para uma chave pertencente à AWS

O exemplo a seguir mostra uma política de perfil de execução que você pode usar para uma chave pertencente à AWS.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "airflow:PublishMetrics", "Resource": "arn:aws:airflow:us-east-1:111122223333:environment/{your-environment-name}" }, { "Effect": "Deny", "Action": "s3:ListAllMyBuckets", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents", "logs:GetLogEvents", "logs:GetLogRecord", "logs:GetLogGroupFields", "logs:GetQueryResults" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333: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:us-east-1:*:airflow-celery-*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt" ], "NotResource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringLike": { "kms:ViaService": [ "sqs.us-east-1.amazonaws.com" ] } } } ] }

Próximas etapas