はじめに
こんにちは!クラウド事業部の中根です。
以下の記事を書いていた時に、気になる挙動を発見したので、検証してみました。
【AWS DEA】Lake Formationの列レベル・行レベルのアクセス制御を試してみる - APC 技術ブログ
Lake Formationを扱っている方の参考になれば幸いです。
気になる挙動
まずはサンプルデータです。
このデータに対し、regionがUSの行のみ表示するデータフィルター①と、salary列を除外するデータフィルター②を作成し、同時に適用してみました。
どうなると思いますか?
①の結果
②の結果
結果はこちらです。
私は、以下のようにregionがUSかつsalary列以外の列だけ見られるようになっている、と予想していたので驚きました。
得られた結果から、「①と②は独立していて、それぞれの結果が結合される」という挙動と考えればよさそうです。
赤枠部分だけどちらにもないので、見えない状態になります。
行レベルと列レベルのアクセス制御を同時に適用するには?
ドキュメントにもある通り、1つのデータフィルターに定義すれば良いです。
行レベル、列レベルに対して、セルレベルと呼ばれています。
実際にやってみます。
セルレベルのフィルターとして、regionがUSで、salary列を非表示にしてみます。
結果はこちらです。
無事に欲しい結果が得られました。
実験(おまけ)
本題は以上ですが、結論の確認ついでに試したことをおまけで残します。
結論はこちらへ。
行レベル、列レベル、セルレベルの3つを適用すると?
セルレベルの制御が優先されたりしないかと思い、一応やってみました。
行レベルと列レベルは引き続き①と②を使います。
セルレベルのフィルターとして、regionがUSで、department列だけを表示してみます。
結果はこちらです。
セルレベルの制御が優先されることはなく、セルレベルのフィルターで除外された部分は、他のフィルターの結果にカバーされているので表示されていました。
行レベルを複数適用すると?①
行レベルの制御を複数適用するとどうなるのでしょうか?
サンプルデータで、departmentがHRの行を選ぶフィルターとEngineeringを選ぶフィルターを同時に適用します。
結果は以下の通りで、それぞれの結果が結合されています。
行レベルを複数適用すると?②
行レベルの制御を、矛盾する形で複数適用するとどうなるのでしょうか?
サンプルデータで、departmentがHRの行を選ぶフィルターとHR以外を選ぶフィルターを同時に適用します。
結果は以下の通りで、全てのデータが表示される結果となりました。
列レベルを複数適用すると?
列レベルも一応確認しておきます。
サンプルデータで、name列を選ぶフィルターとdepartment列を選ぶフィルターを同時に適用します。
結果は以下の通りで、name列とdepartment列が表示されました。
結論
行レベルと列レベル両方のアクセス制御をしたい場合は、1つのデータフィルターに定義するようにしましょう!
終わりに
APCはAWS Advanced Tier Services(アドバンストティアサービスパートナー)認定を受けております。
その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
www.ap-com.co.jp
https://www.ap-com.co.jp/service/utilize-aws/
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。