LoginSignup
1
0

Managed Workflows for Apache Airflow (MWAA) のユーザー作成(デフォルトロール/カスタムロール)

Last updated at Posted at 2024-03-12

はじめに

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 を作成しておきます。

image.png

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": "*"
        }
    ]
}

image.png

以下のドキュメントを参考にしています。

"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 を開く」をクリックします。
ログインできました。

image.png

Profileを見ると、Userロールでログインできていることが分かります。User Nameは、IAMユーザー名になっていますね。

image.png

ちなみに、UserロールではConnectionを参照する権限がついていないため、以下のようにメニューのAdminの中にConnectionsがありません。次のカスタムロールでは、これを見られるようにしていきます。

image.png

2. Airflow カスタムロールでログイン

次に、カスタムロールでログインする場合です。DAGレベルでの参照や実行権限の制御もできます。ただし、準備が少し面倒です。デフォルトロールと同じくIAMポリシーにカスタムロール名を記載してログインできれば良いのですが、それができません。代わりに、一度デフォルトロールであるPublicでユーザーにログインしてもらうことでAirflow上にユーザーを作成し、Airflow UIで管理者がそのユーザーにカスタムロールを付与します。

以下の公式ドキュメントを参考にしています。

IAMユーザー作成(管理者)

IAMユーザー mwaa_test_user2 を作成しておきます。

image.png

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": "*"
        }
    ]
}

image.png

今度は、AirflowのデフォルトロールであるPublicを指定しています。
このPublicですが、実は何も許可されていないロールです。以下はAirflow UIで見たときのOpPublicの許可されているアクションですが、Publicには何も許可されていないことが分かります。

image.png

なぜこんなロールを付与するかというと、一度Airflow UIにユーザーがログインすることで、Airflow上のユーザーとして登録されるからです。本当に付与したいロールはカスタムロールなので、権限はそちらで操作します。

Airflow カスタムロール作成(管理者)

管理者でAirflow UIにログインして、新しくロールを作成します。今回は、既存のUserロールを一度コピーして、そこにmenu access on Connectionscan read on Connectionsの権限を足しました。こうすることで、既存のUserロールでは見えなかったConnectionsが見られるようになります(作成や修正権限は与えないので、参照のみです)。

image.png

Airflow UI にアクセス(ユーザー)

IAMユーザーmwaa_test_user2にログインしなおして、MWAAのコンソールから「Airflow UI を開く」をクリックします。
ただし、PublicはAirflow UIの参照権限すら何もついていないため、以下のような画面が出ます。

image.png

しかし、管理者でAirflow UIにログインしてUser一覧を見てみると、以下のようにAirflow Userとして作成されています。

image.png

Airflow カスタムロールをユーザーに割り当て(管理者)

管理者でAirflow UIにログインして、mwaa_test_user2のRoleに先ほど作成したカスタムロールを付与します。また、Last Nameが必須になっているので、半角スペースなどをいれてSaveをクリックします(なんでも大丈夫です)。

image.png

Airflow UI にアクセス(ユーザー)

ユーザーでAirflow UIにログインすると、今度はログインが成功しました。
また、UserロールではなかったAdmin > Connectionsが見られるようになっていますね。

image.png

Connectionの一覧も以下のように参照できました。また、修正や作成権限は付与していないので、作成する+マークや修正するペンのアイコンは見えていません。

image.png

おわりに

今回は、MWAAのユーザー作成方法を2つ実施しました。実際の運用の際はカスタムロールを使っていきたくなると思いますが、一度ユーザーに操作してもらってAirflow上でユーザーを作成してもらわないといけないのが少し面倒ですね。そのあたりもう少し楽になるようなアップデートが来ることを祈ります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0