はじめに
MWAAでは、Airflowのインフラに関することをAWS側が実施してくれるため、管理が楽になります。しかしその反面、こちら側で制御できないことがいくつかあります。
そのうちの一つが、Airflowのユーザー作成です。自分で建てたAirflowサーバーであれば、自由にユーザーを作成することが出来ますが、MWAAではIAMを利用する必要があります。今回はそのユーザー作成を「1.Airflow デフォルトロール」「2.Airflow カスタムロール」の2つで試したので、記事にしておきます。
先にまとめ
- MWAAでは、Airflowユーザーを独自に作成することはできず、IAMを使って認証する必要がある
- IAMに付与するポリシーでairflow:CreateWebLoginTokenを許可することで認証する(自己プロビジョニング的な方法)
- airflow:CreateWebLoginTokenで許可する際のResource句はAirflowのデフォルトの5つのロールしか指定できない
- カスタムロールを付与したい場合は、まずはPublicロールをResource句で指定して、ユーザーにAirflow UIへログインしてもらう。その後、作成されたAirflow Userにカスタムロールを付与する
前提条件
- MWAAのv2.8.1の環境をバージニア北部リージョン(us-east-1)に作成済み
- パブリックアクセスモードで作成
- 環境名
MyAirflowEnvironment-282
- MWAAで利用するバケットやVPCなどは作成済み
- 管理者として、AdministratorAccessをつけたIAMロール作成済み
- このIAMロールで管理者操作をします
- ユーザーは、これからIAMユーザーとして作成します
1. Airflow デフォルトロール(user)でログイン
まずは、Airflow のデフォルトロールのうちの1つであるuserを使ってログインしてみます。
Airflow のデフォルトロールは、以下の公式ドキュメントに記載の通り、Admin, Public, Viewer, User, Op
の5種類がいます。
デフォルトロールなので細かい権限のカスタマイズはできませんが、比較的楽に準備ができます。
IAMユーザー作成(管理者)
IAMユーザー mwaa_test_user1
を作成しておきます。
IAMポリシー作成、付与(管理者)
以下の内容のIAMポリシーMWAA-User-Policy
を作成し、IAMユーザーに付与します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "airflow:CreateWebLoginToken",
"Resource": [
"arn:aws:airflow:us-east-1:999999999999:role/MyAirflowEnvironment-282/User"
]
},
{
"Effect": "Allow",
"Action": [
"airflow:ListEnvironments",
"airflow:GetEnvironment",
"airflow:ListTagsForResource"
],
"Resource": "*"
}
]
}
以下のドキュメントを参考にしています。
"airflow:CreateWebLoginToken"
のResourceで指定するarnのAWSアカウントの後はrole
であることに注意してください。環境名をそのままコピーするとarn:aws:airflow:us-east-1:999999999999:environment/MyAirflowEnvironment-282
のようにAWSアカウントの後がenvironment
となっています。
Airflow UI にアクセス(ユーザー)
IAMユーザー mwaa_test_user1
にログインしなおして、MWAAのコンソールから「Airflow UI を開く」をクリックします。
ログインできました。
Profileを見ると、Userロールでログインできていることが分かります。User Nameは、IAMユーザー名になっていますね。
ちなみに、UserロールではConnectionを参照する権限がついていないため、以下のようにメニューのAdminの中にConnectionsがありません。次のカスタムロールでは、これを見られるようにしていきます。
2. Airflow カスタムロールでログイン
次に、カスタムロールでログインする場合です。DAGレベルでの参照や実行権限の制御もできます。ただし、準備が少し面倒です。デフォルトロールと同じくIAMポリシーにカスタムロール名を記載してログインできれば良いのですが、それができません。代わりに、一度デフォルトロールであるPublic
でユーザーにログインしてもらうことでAirflow上にユーザーを作成し、Airflow UIで管理者がそのユーザーにカスタムロールを付与します。
以下の公式ドキュメントを参考にしています。
IAMユーザー作成(管理者)
IAMユーザー mwaa_test_user2
を作成しておきます。
IAMポリシー作成、付与(管理者)
以下の内容のIAMポリシーMWAA-Public-Policy
を作成し、IAMユーザーに付与します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "airflow:CreateWebLoginToken",
"Resource": [
"arn:aws:airflow:us-east-1:999999999999:role/MyAirflowEnvironment-282/Public"
]
},
{
"Effect": "Allow",
"Action": [
"airflow:ListEnvironments",
"airflow:GetEnvironment",
"airflow:ListTagsForResource"
],
"Resource": "*"
}
]
}
今度は、AirflowのデフォルトロールであるPublic
を指定しています。
このPublic
ですが、実は何も許可されていないロールです。以下はAirflow UIで見たときのOp
とPublic
の許可されているアクションですが、Public
には何も許可されていないことが分かります。
なぜこんなロールを付与するかというと、一度Airflow UIにユーザーがログインすることで、Airflow上のユーザーとして登録されるからです。本当に付与したいロールはカスタムロールなので、権限はそちらで操作します。
Airflow カスタムロール作成(管理者)
管理者でAirflow UIにログインして、新しくロールを作成します。今回は、既存のUserロールを一度コピーして、そこにmenu access on Connections
とcan read on Connections
の権限を足しました。こうすることで、既存のUserロールでは見えなかったConnectionsが見られるようになります(作成や修正権限は与えないので、参照のみです)。
Airflow UI にアクセス(ユーザー)
IAMユーザーmwaa_test_user2
にログインしなおして、MWAAのコンソールから「Airflow UI を開く」をクリックします。
ただし、Public
はAirflow UIの参照権限すら何もついていないため、以下のような画面が出ます。
しかし、管理者でAirflow UIにログインしてUser一覧を見てみると、以下のようにAirflow Userとして作成されています。
Airflow カスタムロールをユーザーに割り当て(管理者)
管理者でAirflow UIにログインして、mwaa_test_user2
のRoleに先ほど作成したカスタムロールを付与します。また、Last Nameが必須になっているので、半角スペースなどをいれてSaveをクリックします(なんでも大丈夫です)。
Airflow UI にアクセス(ユーザー)
ユーザーでAirflow UIにログインすると、今度はログインが成功しました。
また、UserロールではなかったAdmin > Connectionsが見られるようになっていますね。
Connectionの一覧も以下のように参照できました。また、修正や作成権限は付与していないので、作成する+マークや修正するペンのアイコンは見えていません。
おわりに
今回は、MWAAのユーザー作成方法を2つ実施しました。実際の運用の際はカスタムロールを使っていきたくなると思いますが、一度ユーザーに操作してもらってAirflow上でユーザーを作成してもらわないといけないのが少し面倒ですね。そのあたりもう少し楽になるようなアップデートが来ることを祈ります。