APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【AWS】Lake Formationのデータフィルターを複数適用する時に注意するべきこと

はじめに

こんにちは!クラウド事業部の中根です。

以下の記事を書いていた時に、気になる挙動を発見したので、検証してみました。

【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/

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp