AWS Secrets Manager 后端¶
要启用 Secrets Manager,请在 airflow.cfg
的 [secrets]
部分中指定 SecretsManagerBackend
作为 backend
。这些 backend_kwargs
会被解析为 JSON,因此像布尔值 False 或 None 这样的 Python 值将被忽略,对这些 kwargs 取密钥后端的默认值。
以下是示例配置
[secrets]
backend = airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend
backend_kwargs = {
"connections_prefix": "airflow/connections",
"connections_lookup_pattern": null,
"variables_prefix": "airflow/variables",
"variables_lookup_pattern": null,
"config_prefix": "airflow/config",
"config_lookup_pattern": null,
"profile_name": "default"
}
要进行身份验证,您可以提供 Amazon Web Services 连接 Extra 配置 中列出的参数,或者设置 环境变量。
[secrets]
backend = airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend
backend_kwargs = {
"connections_prefix": "airflow/connections",
"variables_prefix": "airflow/variables",
"config_prefix": "airflow/config",
"role_arn": "arn:aws:iam::123456789098:role/role-name"
}
存储和检索连接¶
在 AWS Secrets Manager 中存储 Airflow 连接有两种方式。
以 URI 形式存储连接¶
您可以将连接存储为 Airflow 连接 URI

请注意,如果您将连接存储为 URI,则假定每个字段都经过 URL 编码。例如,如果您想使用值 my password
,在 URI 中,它应该表示为 my%20password
。
以 JSON 形式存储连接¶
您还可以将连接存储为包含适当键值对的 JSON

建议使用 Airflow 默认的连接字段名称,但也允许为每个字段使用不同的别名
连接类型:
conn_type
,conn_id
,connection_type
,engine
登录:
login
,user
,username
,user_name
密码:
password
,pass
,key
主机:
host
,remote_host
,server
端口:
port
Extra:
extra
。请注意,此 extra 字段应为有效的 JSON。
可以使用配置中的参数 extra_conn_words
将更多词添加到列表中。此参数必须是一个列表字典,包含以下可选键:user, password, host, schema, conn_type。
例如,如果您将 connections_prefix
设置为 airflow/connections
,则对于连接 ID smtp_default
,您希望将连接存储在 airflow/connections/smtp_default
。这可以通过 AWS Web 控制台或 Amazon CLI 完成,如下所示
aws secretsmanager put-secret-value \
--secret-id airflow/connections/smtp_default \
--secret-string '{"login": "nice_user", "password": "this_is_the_password", "host": "ec2.8399.com", "port": "999"}'
验证您可以获取密钥
❯ aws secretsmanager get-secret-value --secret-id airflow/connections/smtp_default
{
"ARN": "arn:aws:secretsmanager:us-east-2:314524341751:secret:airflow/connections/smtp_default-7meuul",
"Name": "airflow/connections/smtp_default",
"VersionId": "34f90eff-ea21-455a-9c8f-5ee74b21be672",
"SecretString": "{\n \"login\":\"nice_user\",\n \"password\":\"this_is_the_password\"\n,
\n \"host\":\"ec2.8399.com\"\n,\n \"port\":\"999\"\n}\n",
"VersionStages": [
"AWSCURRENT"
],
"CreatedDate": "2020-04-08T02:10:35.132000+01:00"
}
如果您不想使用任何 connections_prefix
来检索连接,请在配置中将其设置为空字符串 ""
。
存储和检索变量¶
如果您将 variables_prefix
设置为 airflow/variables
,则对于变量键 hello
,您希望将变量存储在 airflow/variables/hello
。
可选查找¶
可选地,连接、变量或配置可以相互独立或以任意组合进行查找。这将防止对排除的类型向 AWS Secrets Manager 发送请求。
如果您想在 AWS Secrets Manager 中查找某些内容而非其他内容,可以通过将要排除的相应 *_prefix
参数设置为 null
来实现。
例如,如果您想将参数 connections_prefix
设置为 "airflow/connections"
并且不查找变量和配置,您的配置文件应如下所示
[secrets]
backend = airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend
backend_kwargs = {
"connections_prefix": "airflow/connections",
"variables_prefix": null,
"config_prefix": null,
"profile_name": "default"
}
如果您只想在 AWS Secrets Manager 中查找连接、变量或配置的特定子集,可以通过设置相应的 *_lookup_pattern
参数来实现。此参数接受一个 Regex (正则表达式) 字符串作为值。
例如,如果您只想在 AWS Secrets Manager 中查找以“m”开头的连接,您的配置文件应如下所示
[secrets]
backend = airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend
backend_kwargs = {
"connections_prefix": "airflow/connections",
"connections_lookup_pattern": "^m",
"profile_name": "default"
}
在 AWS Secrets Manager 中存储 Google Secrets 的示例¶
要连接到 Google Cloud 连接,所有字段都必须在 extra 字段中。例如
如果您使用密钥文件
{"extra": {"key_path": "/opt/airflow/service_account.json",
"scope": "https://www.googleapis.com/auth/devstorage.read_only"}}
如果您使用密钥字典。
{"extra": {"keyfile_dict": "<copy & paste the service account json here>",
"scope": "https://www.googleapis.com/auth/devstorage.read_only"}}
无论哪种方式,您都可以在 UI 上直接编辑 Key/value
对
