- 個人的に調べたのでメモ
Airflow Secrets Backendsとは
Airflowが利用する設定周り、Config、Variables、ConnectionsをAirflow外部で管理するための機能
管理画面からは見れない、実行時に毎回取りにいく形になる
AWSをSecrets Backendsとして調べてみた
AWSの外部接続サービスとして、SSMとSecretsManagerが用意されている。
利用可能バージョンは、SSMは1.10.10
、SecretsManagerは1.10.11
から可能となります。
利点
- 管理画面、Airflow CLIなどで毎回設定を追加しなくて良くなる
- 一つのリポジトリを複数人で開発する場合、追加、変更を意識する必要がなくなる
欠点
- Secretの管理費、取得回数による費用が増える
- AWS料金表
- 一ヶ月使った例
- Connection 10 個 (シークレット 10 × 0.40/month = 4$)
- 一日1000回 API (コール 1000 × 30 × 0.40/10000コール = 1.2$)
- 合計 5.2$
設定方法
airflow.cfgの設定(Airflow1.10.10以降の場合)
SecretsManager(1.10.11)を利用する場合は以下のように設定
[secrets]
backend = airflow.contrib.secrets.aws_secrets_manager.SecretsManagerBackend
backend_kwargs = {"connections_prefix": "airflow/connections", "profile_name": "default"}
- connections_prefix
- default:
airflow/connections
- SecretsManagerのシークレット名のprefixを設定する
- SecretsManager側では、
airflow/connections/{connection name}
として設定する - 呼び出し側では、aws_hook(などのhook)の引数としてaws_conn_idに
{connection name}
を設定してと実行する - 実行時に、
airflow/connections/{connection name}
でprofile_nameのアカウントから値を取得して利用することができる
- default:
- profile_name
- default: None
- SecretsManagerで値を取りに行くアカウント情報
- なければ環境変数、インスタンスロールとか見に行くはず
- variables_prefix
- default:
airflow/variables
- 試してないのでコード参照
- default:
airflow.cfgの設定(Airflow2系の場合)(試してはいない)
Airflow SecretsManagerを利用する場合は以下のように設定
[secrets]
backend = airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend #ここのproviderのパッケージの位置が2.0から変更されている
backend_kwargs = {"connections_prefix": "airflow/connections", "profile_name": "default"}
SecretsManager側の設定
- airflow.cfgの
[secrets]
で設定されたアカウントのSecretsManagerにairflow/connections/{connection name}
のシークレット名でSecretsValueを登録する - SecretsValue
- プレーンテキストで、URI形式で記述する必要がある(キー、バリューでは設定できない)
- Connection-TypeがAWSの場合(
アクセスキー
とシークレットキー
の場合、最後@
を忘れずに)
-aws://AKIAIRI1111111111:xxxxxsxadgfasdgsdfgofdsgfa@
- Connection-TypeがAWSの場合(
AssumeRole
を利用する場合(Extraの使い方))
-aws://?role_arn=arn%3Aaws%3Aiam%3A%3A240057002457%3Arole%2FWebIdentity-Role
最後に
- 思ったほど参考となる資料がなかった
- 設定をみるとわかるようにConnectionsしか確認していない
- Configを状況に応じて変更する運用などが見えてきていない
- 個人メモなので間違いあれば指摘ください
参考資料
コード
SecretsManagerのSecret Backendsの仕組み
Connection-TypeAWSの仕組み