Controle de acesso com o IAM

Airflow gerenciado (Geração 3) | Airflow gerenciado (Geração 2) | Airflow gerenciado (Geração 1 legada)

Nesta página, descrevemos as opções de controle de acesso disponíveis no Managed Airflow e explicamos como conceder papéis.

Para saber mais sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Com o controle de acesso à interface do Airflow, é possível controlar permissões para a interface do Airflow e a interface do DAG além de ativar ou desativar o acesso a elas.

Se você quiser configurar o acesso para identidades externas usando a federação de identidade da força de trabalho, consulte Acessar ambientes com a federação de identidade da força de trabalho.

Sobre o Identity and Access Management no Airflow Gerenciado

O Airflow gerenciado usa o Identity and Access Management (IAM) para controle de acesso.

Para controlar o acesso a diferentes recursos do Managed Airflow, conceda papéis e permissões às contas de serviço do IAM e às contas de usuário no projeto do Google Cloud .

O Airflow Gerenciado usa dois tipos de contas de serviço do IAM:

Além desses dois tipos de conta de serviço, o agente de serviço de APIs do Google executa processos internos do Google em seu nome.

Conceder papéis à conta de agente de serviço do Airflow gerenciado

No projeto Google Cloud , o serviço Airflow Gerenciado cria um agente de serviço, o agente de serviço do Airflow Gerenciado, para gerenciar recursos relacionados ao Airflow Gerenciado.

O agente de serviço do Airflow Gerenciado é usado em todos os ambientes no projeto. Por padrão, a conta do agente de serviço do Airflow gerenciado tem apenas o papel de Agente de serviço da API Cloud Composer. Mantenha esse papel nessa conta de serviço.

Conceder papéis à conta de serviço de um ambiente

Ao criar um ambiente, você especifica uma conta de serviço. Essa conta de serviço é chamada de conta de serviço do ambiente. Não é possível mudar a conta de serviço especificada depois que um ambiente é criado.

O ambiente usa essa conta de serviço para realizar a maioria das operações, por exemplo:

  • Executar pods com diferentes componentes de ambiente, como workers e programadores do Airflow, no cluster do ambiente.

  • Executar DAGs em nome dessa conta de serviço. Por exemplo, se um DAG acessar outro serviço do Google, isso será feito em nome da conta de serviço.

  • Criar as imagens de componentes do Airflow quando pacotes PyPI personalizados são instalados no ambiente.

  • Ler e gravar objetos no bucket do ambiente. Por exemplo, ao sincronizar arquivos entre o bucket do ambiente e os componentes do Airflow.

  • Execução de pods iniciados com KubernetesPodOperator e GKEStartPodOperator.

Contas de serviço atuais e personalizadas para seu ambiente

Recomendamos configurar uma conta serviço gerenciado pelo usuário e usá-la para ambientes do Airflow gerenciado. Para fazer isso, siga estas etapas:

  1. Crie uma conta de serviço conforme descrito na documentação do Identity and Access Management.

  2. Conceda a ela o papel de Worker do Composer (composer.worker).

  3. Para acessar outros recursos no seu projeto Google Cloud , conceda permissões extras a essa conta de serviço. O papel Worker do Composer (composer.worker) fornece esse conjunto de permissões necessárias na maioria dos casos. Adicione permissões extras a essa conta de serviço somente quando for necessário para a operação dos seus DAGs.

Considerações de segurança para contas de serviço do ambiente

  • Recomendamos configurar uma conta de serviço gerenciado pelo usuário para ambientes do Airflow Gerenciado que tenha apenas o conjunto necessário de permissões para executar o ambiente e realizar operações definidas nos seus DAGs. O papel Worker do Composer (composer.worker) fornece esse conjunto de permissões necessárias na maioria dos casos. Adicione permissões extras a essa conta de serviço apenas quando for necessário para a operação dos seus DAGs.

  • É possível criar ambientes do Airflow Gerenciado que usam a conta de serviço padrão do Compute Engine. Essa conta geralmente tem mais permissões do que o necessário para executar ambientes ou DAGs do Airflow Gerenciado. Como seu ambiente executa DAGs em nome da conta de serviço, isso cria um risco de os DAGs usarem permissões mais amplas do que o pretendido. Ao mesmo tempo, muitas vezes não é possível reduzir as permissões dessa conta de serviço sem afetar outros serviços que possam usá-la no projeto. Em vez disso, configure uma conta de serviço gerenciado pelo usuário.

  • Conceda acesso de leitura e gravação ao bucket do seu ambiente apenas para usuários confiáveis.

    Como a conta de serviço do ambiente é usada para executar DAGs, os usuários que podem adicionar e modificar DAGs (ou outros objetos, como dependências do Python) no bucket do ambiente podem executar o código em nome da conta de serviço do ambiente e ter acesso a todas as permissões dela ao implantar as próprias versões de DAGs. Isso pode acontecer mesmo que as contas de usuário não tenham papéis e permissões explícitos relacionados ao Managed Airflow que permitam essas ações.

  • Permita que apenas usuários confiáveis atualizem ambientes no seu projeto.

    A permissão composer.environments.update pode ser usada além de apenas aplicar mudanças de configuração. Ele oferece controle amplo sobre os recursos do Airflow gerenciado, incluindo a execução de código em nome da conta de serviço do ambiente, que pode exercer todas as permissões que essa conta tem. Por exemplo, a instalação de pacotes do PyPI envolve a execução de código Python do pacote. Como outro exemplo, as variáveis de ambiente podem ser usadas para armazenar o código a ser executado por um DAG ou apontar para um local com esse código.

  • Permita que apenas usuários confiáveis executem comandos da CLI do Airflow no seu projeto.

    A permissão composer.environments.executeairflowcommand pode ser usada para executar o código Python disponível para componentes do Airflow em nome da conta de serviço do ambiente.

Conceder papéis aos usuários

Para acionar uma operação de ambiente, um usuário precisa ter permissões suficientes. Por exemplo, se você quiser criar um novo ambiente, será necessário ter a permissão composer.environments.create.

No Airflow Gerenciado, as permissões individuais são agrupadas em papéis predefinidos. É possível conceder esses papéis aos principais.

Se a conta de usuário tiver o papel Editor do projeto, será possível executar todas as operações do ambiente. No entanto, esse papel tem permissões amplas. Para usuários que trabalham com ambientes, recomendamos usar papéis específicos do Airflow Gerenciado. Dessa forma, é possível restringir o escopo das permissões e fornecer diferentes níveis de acesso para principais diferentes. Por exemplo, um usuário pode ter permissões para criar, atualizar, fazer upgrade e excluir ambientes, enquanto outro só pode ver ambientes e acessar a interface da Web do Airflow.

Dependendo do nível de acesso que você quer dar aos ambientes gerenciados do Airflow, conceda as seguintes permissões aos principais.

Gerenciar ambientes e buckets de ambiente

Para um usuário que pode ver, criar, atualizar, fazer upgrade e excluir ambientes, gerenciar objetos (como arquivos DAG) nos buckets do ambiente, acessar a interface da Web do Airflow, executar comandos da CLI do Airflow, ver e acionar DAGs na interface do usuário do DAG:

  1. Conceda o papel Administrador de objetos do ambiente e do Storage (composer.environmentAndStorageObjectAdmin).

  2. Conceda o papel Usuário da conta de serviço (iam.serviceAccountUser).

    Para restringir as permissões de um usuário, conceda esse papel apenas na conta de serviço do seu ambiente. Para mais informações, consulte Conceder ou revogar um único papel.

  3. Conceda a permissão iam.serviceAccounts.actAs na conta de serviço do seu ambiente.

Gerenciar ambientes

Para um usuário que pode ver, criar, atualizar, fazer upgrade e excluir ambientes, acessar a interface da Web do Airflow, executar comandos da CLI do Airflow, ver e acionar DAGs na interface do DAG:

  1. Conceda o papel de Administrador do Composer (composer.admin).

  2. Conceda o papel Usuário da conta de serviço (iam.serviceAccountUser).

    Para restringir as permissões de um usuário, conceda esse papel apenas na conta de serviço do seu ambiente. Para mais informações, consulte Conceder ou revogar um único papel.

  3. Conceda a permissão iam.serviceAccounts.actAs na conta de serviço do seu ambiente.

Ver ambientes e gerenciar buckets de ambientes

Para um usuário que pode ver ambientes, acessar a interface da Web do Airflow, visualizar e acionar DAGs na interface do DAG e gerenciar objetos nos buckets do ambiente (por exemplo, para fazer upload de novos arquivos DAG):

  1. Conceda o papel Usuário do ambiente e leitor de objetos do Storage (composer.environmentAndStorageObjectViewer).

  2. Conceda o papel Administrador de objetos do Storage (storage.objectAdmin).

Ver ambientes e buckets de ambiente

Para um usuário que pode ver ambientes, acessar a interface da Web do Airflow, visualizar e acionar DAGs na interface do DAG e visualizar objetos em buckets do ambiente, conceda o papel Usuário do ambiente e leitor de objetos do Storage (composer.environmentAndStorageObjectViewer).

Ver ambientes

Para um usuário que pode ver ambientes, visualizar e acionar DAGs na interface do DAG e acessar a interface da Web do Airflow, conceda o papel Usuário do Composer (composer.user).

Papéis

Role Permissions

(roles/composer.admin)

Provides full control of Managed Airflow resources.

Lowest-level resources where you can grant this role:

  • Project

cloudkms.keyHandles.*

  • cloudkms.keyHandles.create
  • cloudkms.keyHandles.get
  • cloudkms.keyHandles.list

cloudkms.operations.get

cloudkms.projects.showEffectiveAutokeyConfig

composer.*

  • composer.dags.execute
  • composer.dags.get
  • composer.dags.getSourceCode
  • composer.dags.list
  • composer.environments.create
  • composer.environments.createTagBinding
  • composer.environments.delete
  • composer.environments.deleteTagBinding
  • composer.environments.executeAirflowCommand
  • composer.environments.get
  • composer.environments.list
  • composer.environments.listEffectiveTags
  • composer.environments.listTagBindings
  • composer.environments.update
  • composer.imageversions.list
  • composer.operations.delete
  • composer.operations.get
  • composer.operations.list
  • composer.userworkloadsconfigmaps.create
  • composer.userworkloadsconfigmaps.delete
  • composer.userworkloadsconfigmaps.get
  • composer.userworkloadsconfigmaps.list
  • composer.userworkloadsconfigmaps.update
  • composer.userworkloadssecrets.create
  • composer.userworkloadssecrets.delete
  • composer.userworkloadssecrets.get
  • composer.userworkloadssecrets.list
  • composer.userworkloadssecrets.update

serviceusage.consumerpolicy.analyze

serviceusage.consumerpolicy.get

serviceusage.effectivepolicy.get

serviceusage.groups.*

  • serviceusage.groups.list
  • serviceusage.groups.listExpandedMembers
  • serviceusage.groups.listMembers

serviceusage.quotas.get

serviceusage.services.get

serviceusage.services.list

serviceusage.values.test

(roles/composer.editor)

Editor role for Composer

composer.dags.*

  • composer.dags.execute
  • composer.dags.get
  • composer.dags.getSourceCode
  • composer.dags.list

composer.environments.create

composer.environments.delete

composer.environments.executeAirflowCommand

composer.environments.get

composer.environments.list

composer.environments.listEffectiveTags

composer.environments.listTagBindings

composer.environments.update

composer.imageversions.list

composer.operations.*

  • composer.operations.delete
  • composer.operations.get
  • composer.operations.list

composer.userworkloadsconfigmaps.*

  • composer.userworkloadsconfigmaps.create
  • composer.userworkloadsconfigmaps.delete
  • composer.userworkloadsconfigmaps.get
  • composer.userworkloadsconfigmaps.list
  • composer.userworkloadsconfigmaps.update

composer.userworkloadssecrets.*

  • composer.userworkloadssecrets.create
  • composer.userworkloadssecrets.delete
  • composer.userworkloadssecrets.get
  • composer.userworkloadssecrets.list
  • composer.userworkloadssecrets.update

resourcemanager.projects.get

resourcemanager.projects.list

(roles/composer.user)

Provides the permissions necessary to list and get Managed Airflow environments and operations.

Lowest-level resources where you can grant this role:

  • Project

composer.dags.*

  • composer.dags.execute
  • composer.dags.get
  • composer.dags.getSourceCode
  • composer.dags.list

composer.environments.get

composer.environments.list

composer.imageversions.list

composer.operations.get

composer.operations.list

composer.userworkloadsconfigmaps.get

composer.userworkloadsconfigmaps.list

composer.userworkloadssecrets.get

composer.userworkloadssecrets.list

serviceusage.consumerpolicy.analyze

serviceusage.consumerpolicy.get

serviceusage.effectivepolicy.get

serviceusage.groups.*

  • serviceusage.groups.list
  • serviceusage.groups.listExpandedMembers
  • serviceusage.groups.listMembers

serviceusage.quotas.get

serviceusage.services.get

serviceusage.services.list

serviceusage.values.test

(roles/composer.viewer)

Viewer role for Composer

composer.dags.get

composer.dags.getSourceCode

composer.dags.list

composer.environments.get

composer.environments.list

composer.environments.listEffectiveTags

composer.environments.listTagBindings

composer.imageversions.list

composer.operations.get

composer.operations.list

composer.userworkloadsconfigmaps.get

composer.userworkloadsconfigmaps.list

composer.userworkloadssecrets.get

composer.userworkloadssecrets.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/composer.ServiceAgentV2Ext)

Cloud Composer v2 API Service Agent Extension is a supplementary role required to manage Composer v2 environments.

iam.serviceAccounts.getIamPolicy

iam.serviceAccounts.setIamPolicy

(roles/composer.environmentAndStorageObjectAdmin)

Provides full control of Managed Airflow resources and of the objects in all project buckets.

Lowest-level resources where you can grant this role:

  • Project

cloudkms.keyHandles.*

  • cloudkms.keyHandles.create
  • cloudkms.keyHandles.get
  • cloudkms.keyHandles.list

cloudkms.operations.get

cloudkms.projects.showEffectiveAutokeyConfig

composer.*

  • composer.dags.execute
  • composer.dags.get
  • composer.dags.getSourceCode
  • composer.dags.list
  • composer.environments.create
  • composer.environments.createTagBinding
  • composer.environments.delete
  • composer.environments.deleteTagBinding
  • composer.environments.executeAirflowCommand
  • composer.environments.get
  • composer.environments.list
  • composer.environments.listEffectiveTags
  • composer.environments.listTagBindings
  • composer.environments.update
  • composer.imageversions.list
  • composer.operations.delete
  • composer.operations.get
  • composer.operations.list
  • composer.userworkloadsconfigmaps.create
  • composer.userworkloadsconfigmaps.delete
  • composer.userworkloadsconfigmaps.get
  • composer.userworkloadsconfigmaps.list
  • composer.userworkloadsconfigmaps.update
  • composer.userworkloadssecrets.create
  • composer.userworkloadssecrets.delete
  • composer.userworkloadssecrets.get
  • composer.userworkloadssecrets.list
  • composer.userworkloadssecrets.update

monitoring.timeSeries.create

orgpolicy.policy.get

resourcemanager.projects.get

resourcemanager.projects.list

serviceusage.consumerpolicy.analyze

serviceusage.consumerpolicy.get

serviceusage.effectivepolicy.get

serviceusage.groups.*

  • serviceusage.groups.list
  • serviceusage.groups.listExpandedMembers
  • serviceusage.groups.listMembers

serviceusage.quotas.get

serviceusage.services.get

serviceusage.services.list

serviceusage.values.test