🐈

Azure Storage AccountでABAC使い方(条件の整理)

2022/12/12に公開

はじめに

前回、Azure Storage AccountのABAC機能が一部GAされたので、その機能や使いどころを確認しました。
https://zenn.dev/tomot/articles/a5cfd65202a5c4
ザックリ言えば、これまでのRBACが定義してきた、「誰が(プリンシパル)」「何に対し(スコープ)」「どんなことができるか(ロール)」に追加して、「リソースがこういう状態だったら
」のような追加条件を追加できる機能です。

前回は簡単に触れた「条件」と「action」の組み合わせについて調査したので、結果をまとめました。

条件とactionの組み合わせ

現在ABACに対応している、BLOBストレージに対する権限で、対応している条件を調査しました。

対象ロール:ストレージ BLOB データ所有者

BLOBのデータレイヤに対して、全権限を持っているBLOBデータ所有者の各アクションで、どのような条件が使えるかを確認します。
まず、BLOBデータ所有者の中に含まれるアクションは下記の19個でした。

これらのアクションを1つ選択したときに、設定できる条件を見てみます。

条件例(BLOBを削除する)

例えば、「BLOBを削除する」というアクションに対応した条件は下記のように選択できます。

# 属性ソース 選べる属性
1 要求 バージョンID、スナップショット
2 リソース アカウント名、階層型名前空間は有効か、コンテナー名、BLOBパス、現在のバージョンかどうか

スクリーンショットに映ってるのは2の条件の方ですね。例えば

  • 操作対象の「リソース」の「階層型名前空間が有効か」という属性が
  • 演算子「BoolEquals」
  • 値「True」だったら

と言う条件の下でBLOBの削除が可能。というようにABACを設定することができます。

条件のまとめ

現在選べる条件は、属性ソースが2種類(要求とリソース)に対して、それぞれ5個/8個の属性を選択することができます。先ほど記載した「BLOBを削除する」の例と比較すると表の読み取り方が分かりやすいかと思います。

属性により選べる演算子は異なり、文字列比較だったり、DateTimeの大小だったりするのですが、そこまでは表にまとまり切らなかったのでご自身でご確認ください。

複数のアクションを選択した場合

複数のアクションを選択すると、「どちらでも選択できる条件」のみ設定することができます。なので例えばアクションを全て選択した場合(BLOBデータ所有者)の権限全体に対して条件を扶養する場合は、どのアクションでも選択することができる下記の2つの属性の条件のみ、利用できるということです。

  • 属性ソース:リソース
  • 属性:アカウント名、階層型名前空間は有効か

結局、前回の記事で例に出した通り「ストレージアカウントのリソース名がXXXXXだったら」という条件を使ったABACが一番シンプルで分かりやすい例だったかと思います。

おわりに

今回はABACで利用できる条件を整理しました。これを実システムに落とし込んで最適な(最小権限の原則に沿った)権限付与に活かす…となるとかなり難しそうですが、アカウント名やコンテナ名、インデックスタグのキーの値などで権限分離するくらいでしたらシンプルなABAC設計で実現できそうですので、既存のRBACで苦しんでいる方はぜひ利用を検討してみてください。

Discussion