本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用密钥配置 Apache Airflow 连接 Amazon Secrets Manager
Amazon Secrets Manager 是适用于 Apache Airflow 的亚马逊托管工作流程环境中支持的备用 Apache Airflow 后端。本指南介绍如何使用 Amazon Secrets Manager 在 Apache Airflow 的亚马逊托管工作流程上安全地存储 Apache Airflow 变量和 Apache Airflow 连接的机密。
注意
-
您将需要为您创建的密钥付费。有关 Secrets Manager 定价的更多信息,请参阅 Amazon 定价
。
目录
步骤 1:向 Amazon MWAA 提供访问 Secrets Manager 密钥的权限
您 Amazon MWAA 环境的执行角色需要对 Amazon Secrets Manager中的密钥具有读取权限。以下 IAM 策略允许使用 Amazon 托管SecretsManagerReadWrite
要将该策略附加到执行角色,请执行以下操作
-
在 Amazon MWAA 控制台上打开环境页面
。 -
选择环境。
-
在权限窗格上选择执行角色。
-
选择附加策略。
-
在筛选策略文本字段中键入
SecretsManagerReadWrite
。 -
选择附加策略。
如果您不想使用 Amazon 托管权限策略,则可以直接更新环境的执行角色以允许任何级别的访问您的 Secrets Manager 资源。例如,以下策略声明授予您在 Secrets Manager 中在特定 Amazon 区域中创建的所有密钥的读取权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:us-west-2:012345678910:secret:*" }, { "Effect": "Allow", "Action": "secretsmanager:ListSecrets", "Resource": "*" } ] }
步骤 2: 创建 Secrets Manager 后端作为 Apache Airflow 配置选项
以下部分介绍如何在 Amazon MWAA 控制台上为后端创建 Apache Airflow 配置选项。 Amazon Secrets Manager 如果您在 airflow.cfg
中使用同名的配置设置,则您在以下步骤中创建的配置将优先并覆盖配置设置。
-
在 Amazon MWAA 控制台上打开环境页面
。 -
选择环境。
-
选择编辑。
-
选择下一步。
-
在 Airflow 配置选项窗格中选择添加自定义配置。添加以下键值对:
-
:secrets.backend
airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend
-
:secrets.backend_kwargs
这将 Apache Airflow 配置为在{"connections_prefix" : "airflow/connections", "variables_prefix" : "airflow/variables"}
airflow/connections/*
和airflow/variables/*
路径中查找连接字符串和变量。您可以使用查找模式
来减少 Amazon MWAA 代表您向 Secrets Manager 调用 API 的次数。如果您未指定查找模式,Apache Airflow 会在已配置的后端中搜索所有连接和变量。通过指定模式,可以收窄 Apache Airflow 可能出现的路径。这可以降低您在 Amazon MWAA 中使用 Secrets Manager 时的成本。 要指定查找模式,请指定
connections_lookup_pattern
和variables_lookup_pattern
参数。这些参数接受 RegEx 字符串作为输入。例如,要查找以test
开头的密钥,请输入secrets.backend_kwargs
的以下内容:{ "connections_prefix": "airflow/connections", "connections_lookup_pattern": "^test", "variables_prefix" : "airflow/variables", "variables_lookup_pattern": "^test" }
注意
要使用
connections_lookup_pattern
和variables_lookup_pattern
,必须安装apache-airflow-providers-amazon
的 7.3.0 或更高版本。有关将提供程序包更新到新版本的更多信息,请参阅 指定更新的提供程序包。
-
-
选择保存。
第三步:生成 Apache Airflow Amazon 连接 URI 字符串
要创建连接字符串,请使用键盘上的 “Tab” 键缩进 Connection 对象中的键值对。extra
对象创建一个变量。下一节将引导您完成使用 Apache Airflow 或 Python 脚本为 Amazon MWAA 环境生成 Apache Airflow 连接 URI
步骤 4:在 Secrets Manager 中添加变量
下一节介绍如何在 Secrets Manager 中为变量创建密钥。
要创建密钥,请执行以下操作
-
选择存储新密钥。
-
选择其他密钥类型。
-
在指定要存储在此密钥中的键值对窗格上,选择纯文本。
-
按以下格式将变量值添加为纯文本。
"
YOUR_VARIABLE_VALUE
"例如,要指定一个整数,请执行以下操作:
14
例如,要指定一个字符串,请执行以下操作:
"mystring"
-
对于加密密钥,请从下拉列表中选择一个 Amazon KMS 密钥选项。
-
按以下格式在密钥名称文本字段中输入名称。
airflow/variables/
YOUR_VARIABLE_NAME
例如:
airflow/variables/test-variable
-
选择下一步。
-
在配置密钥页面的密钥名称和描述窗格上,执行以下操作。
-
在密钥名称中,输入密钥名称。
-
(可选)在描述中,输入密钥名称的描述。
选择下一步。
-
-
在配置轮换-可选上,保留默认选项,然后选择下一步。
-
对于要添加的任何其他变量,在 Secrets Manager 中重复这些步骤。
-
在查看 页上,查看您密钥的详细信息,然后选择存储。
步骤 5:在 Secrets Manager 中添加连接
下一节介绍如何在 Secrets Manager 中为连接字符串 URI 创建密钥。
要创建密钥,请执行以下操作
-
选择存储新密钥。
-
选择其他密钥类型。
-
在指定要存储在此密钥中的键值对窗格上,选择纯文本。
-
按以下格式将连接 URI 字符串添加为纯文本。
YOUR_CONNECTION_URI_STRING
例如:
mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA®ion_name=us-east-1
警告
Apache Airflow 会解析连接字符串中的每个值。不得使用单引号或双引号,否则它会将连接解析为单个字符串。
-
对于加密密钥,请从下拉列表中选择一个 Amazon KMS 密钥选项。
-
按以下格式在密钥名称文本字段中输入名称。
airflow/connections/
YOUR_CONNECTION_NAME
例如:
airflow/connections/myconn
-
选择下一步。
-
在配置密钥页面的密钥名称和描述窗格上,执行以下操作。
-
在密钥名称中,输入密钥名称。
-
(可选)在描述中,输入密钥名称的描述。
选择下一步。
-
-
在配置轮换-可选上,保留默认选项,然后选择下一步。
-
对于要添加的任何其他变量,在 Secrets Manager 中重复这些步骤。
-
在查看 页上,查看您密钥的详细信息,然后选择存储。
代码示例
-
要了解在使用以下示例代码的本页上如何使用 Apache Airflow 连接(
myconn
)的密钥,请参阅 使用 Amazon Secrets Manager 中的密钥进行 Apache Airflow 连接。 -
要了解在使用以下示例代码的本页上如何使用 Apache Airflow 变量(
test-variable
)的密钥,请参阅 为 Apache Airflow 变量使用 Amazon Secrets Manager 中的密钥。
资源
-
有关使用控制台和配置 Secrets Manager 密钥的更多信息 Amazon CLI,请参阅Amazon Secrets Manager 用户指南中的创建密钥。
-
在将 Apache Airflow 连接和变量移动至 Amazon Secrets Manager
中,使用 Python 脚本将大量 Apache Airflow 变量和连接迁移到 Secrets Manager。
接下来做什么?
-
要了解如何生成令牌以访问 Apache Airflow UI,请参阅 访问 Apache 气流。