你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为工作流编排管理器启用 Azure Key Vault

适用于:Azure 数据工厂 Azure Synapse Analytics

提示

试用 Microsoft Fabric 中的数据工厂,这是一种适用于企业的一站式分析解决方案。 Microsoft Fabric 涵盖从数据移动到数据科学、实时分析、商业智能和报告的所有内容。 了解如何免费开始新的试用

注意

工作流编排管理器由 Apache Airflow 提供支持。

Apache Airflow 提供各种可安全存储敏感信息(如变量和连接)的后端。 其中一个选项是 Azure Key Vault。 本文逐步讲解在工作流编排管理器环境中将 Key Vault 配置为 Apache Airflow 的机密后端的过程。

注意

Azure 数据工厂的工作流编排管理器依赖于开源 Apache Airflow 应用程序。 有关 Airflow 的文档和更多教程,请参阅 Apache Airflow 文档社区网页。

先决条件

  • Azure 订阅:如果还没有 Azure 订阅,可以在开始前创建一个免费 Azure 帐户
  • Azure 存储帐户:如果没有存储帐户,请参阅创建 Azure 存储帐户来了解创建步骤。 确保存储帐户仅允许来自选定的网络的访问。
  • Azure Key Vault:如果没有 Key Vault 实例,则可以按照本教程创建新的 Key Vault 实例
  • 服务主体:可以创建新的服务主体或使用现有的服务主体,并向其授予访问 Key Vault 实例的权限。 例如,可以将 key-vault-contributor 角色授予 Key Vault 实例的服务主体名称 (SPN),以便 SPN 可以管理它。 还需要获取服务主体的客户端 ID 和客户端密码(API 密钥),以将其添加为环境变量,如本文稍后所述

权限

内置角色为 SPN 分配 Key Vault 实例中的以下角色:

  • 密钥保管库参与者
  • 密钥保管库机密用户

为工作流编排管理器实例启用 Key Vault 后端

若要为工作流编排管理器实例启用 Key Vault 作为机密后端,请执行以下操作:

  1. 转到工作流编排管理器实例的集成运行时环境

  2. 在初始 Airflow 环境设置过程中,安装 apache-airflow-providers-microsoft-azure 以满足 Airflow 要求

    显示“Airflow 环境设置”窗口的屏幕截图,其中突出显示了 Airflow 要求。

  3. 在集成运行时属性中为 Airflow 配置替代添加以下设置

    • AIRFLOW__SECRETS__BACKEND:airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend
    • AIRFLOW__SECRETS__BACKEND_KWARGS:{"connections_prefix": "airflow-connections", "variables_prefix": "airflow-variables", "vault_url": **\<your keyvault uri\>**}

    屏幕截图显示 Airflow 环境设置中 Airflow 配置替代设置的配置。

  4. 在 Airflow 集成运行时属性中为“环境变量”配置添加以下变量

    • AZURE_CLIENT_ID = <SPN 的客户端 ID>
    • AZURE_TENANT_ID = <租户 ID>
    • AZURE_CLIENT_SECRET = <SPN 的客户端密码>

    屏幕截图显示 Airflow 集成运行时属性的“环境变量”部分。

  5. 然后,可以使用变量和连接,它们会自动存储在 Key Vault 中。 连接和变量的名称需要遵循前面定义的 AIRFLOW__SECRETS__BACKEND_KWARGS。 有关详细信息,请参阅 Azure Key Vault 作为机密后端

使用 Key Vault 作为后端的示例 DAG

  1. 使用以下内容创建新的 Python 文件 adf.py

    from datetime import datetime, timedelta
    from airflow.operators.python_operator import PythonOperator
    from textwrap import dedent
    from airflow.models import Variable
    from airflow import DAG
    import logging
    
    def retrieve_variable_from_akv():
        variable_value = Variable.get("sample-variable")
        logger = logging.getLogger(__name__)
        logger.info(variable_value)
    
    with DAG(
       "tutorial",
       default_args={
           "depends_on_past": False,
           "email": ["airflow@example.com"],
           "email_on_failure": False,
           "email_on_retry": False,
           "retries": 1,
           "retry_delay": timedelta(minutes=5),
        },
       description="This DAG shows how to use Azure Key Vault to retrieve variables in Apache Airflow DAG",
       schedule_interval=timedelta(days=1),
       start_date=datetime(2021, 1, 1),
       catchup=False,
       tags=["example"],
    ) as dag:
    
        get_variable_task = PythonOperator(
            task_id="get_variable",
            python_callable=retrieve_variable_from_akv,
        )
    
    get_variable_task
    
  2. 在 Key Vault 中存储连接的变量。 有关详细信息,请参阅在 Azure 密钥保管库中存储凭据

    屏幕截图显示 Azure Key Vault 中的机密的配置。