New RelicのNRDBに保存されたデータに関しては、基本的に対象のアカウントへアクセス権のあるユーザは全ユーザが参照可能でしたが、そのうちLogデータはデータアクセスポリシーにて制御できるようになりました。

設定方法などの詳細はドキュメントページにてご確認いただけますが、本ブログでは実際の挙動等に関して、動作確認した結果を踏まえ解説します。

概要

まず、New Relicの基本的なアクセスコントロールを改めて説明します。New Relicに登録された各ユーザは通常1つ以上のGroupに所属しています。また、Groupでは1つ以上のアカウントIDとRoleのセットが設定できこちらで各機能に対するアクセス制御が行っていただくことができるようになっています。こちらに対して更にPolicyを適用することができるようになっており、このPolicyにてLogデータへのアクセスを制御していただけます。

Data Access Policy

Policyでは許可(Allow)あるいは拒否(Deny)のどちらかを設定していただけます。

Allow Policy

Allow Policyは設定で記載されたLogパーティションへアクセスを許可するものになります。また、基本的にはそれ以外のLogパーティションへのアクセスは拒否となります。

Allow Policy適用イメージ

Deny Policy

Deny Policyは設定で記載されたLogパーティションへのアクセスを拒否するものになります。また、それ以外のLogパーティションへのアクセスは許可となります。

Deny Policy適用イメージ

なお、デフォルトではPolicyはない状態となります。Policyがない場合、すべてのLogパーティションへのアクセスは許可となります。

Data Access Policyの適用なしの場合のイメージ

複数のPolicyの組み合わせ

基本的に複数のPolicyが組み合わさる場合許可が増えていきます。具体的な詳細を続いて記載します。

複数のAllow Policy

同一のユーザに複数のAllow Policyがある場合、いずれかのPolicyにて許可されたLogパーティションへはアクセスでき、それ以外は拒否となります。

複数Allow Policy

複数のDeny Policy

Deny Policyに関しては、拒否として設定されたパーティション以外のパーティションへのアクセスが許可されるということになります。そのため、複数のDeny Policyが同一ユーザに適用される場合、拒否が増えるわけではなく、許可が増えることになるのでご注意ください。

複数のDeny Policyが適用されている場合、すべてのPolicyで拒否されたパーティションへのアクセスが拒否となり、それ以外のパーティションへのアクセスは許可となります。

複数Deny Policy

Allow PolicyとDeny Policyの組み合わせ

前述の通り、Deny Policyは設定されたパーティション以外のパーティションへ許可を与えるという設定になります。そのため、Deny PolicyとAllow Policyの両方のPolicyが同一のユーザに適用される場合、Deny Policyで設定されたパーティション以外のパーティションに加え、Allow Policyで設定されたパーティションへもアクセスが許可されるという事になります。

Allow Policy & Deny Policyの組み合わせ

複数Logパーティションの指定

Data Access Policyでは1つのPolicyで複数のLogパーティションが設定できます。具体的なパーティション名を指定することもできますが、ワイルドカード%を使って指定することもできます。

なお、全Logパーティションを拒否設定する場合、Selct exisiting log paritionsLogにチェックを入れ、Additional denied partitions: new or using a wildcardLog_%を指定することで、今後新規に作成されるパーティション含め、全Logパーティションへのアクセスを拒否としていただけます。

注意点

ログパーティションへのアクセスが拒否されている場合、以下のようにクエリー等に影響があります。

SHOW EVENT TYPES

SHOW EVENT TYPESを実行すると、指定されたレンジで利用可能なデータタイプを取得していただけますが、クエリーを実行したユーザからみて拒否に設定されたデータパーティションは結果には含まれません。


FROM …

FROM句では、1つ以上のデータタイプを指定していただけますが、こちらに拒否となっているデータパーティションが含まれている場合、You don't have access to one or more selected partitionsというエラーが表示され、クエリーの実行をしていただくことができません。拒否に設定されたLogパーティションのデータが除外されてクエリーが実行できるわけではないので、ご注意ください。
 

NRQLアラートコンディションの作成

拒否となっているLogパーティションをFROM句に含むアラートコンディションの作成は失敗します。対象のLogパーティションへのアクセスが許可されたユーザにてNRQLアラートコンディションを作成してください。

まとめ

Deny Policyは、設定されたパーティション以外へ許可を与えるPolicyであると理解して設定してください。

複数のPolicyが同一ユーザに適用される場合、それに伴いアクセスが許可されるパーティションが増えますが、拒否が増えることはありません。そのため、複数組み合わせることを前提とする場合は、基本的には拒否Policyは多用せず許可Policyを主に使っていただくのが良いかと思われます。

前述の通りクエリーのFROM句に複数パーティションが含まれている場合で許可されていないパーティションが含まれる場合、クエリーの実行自体が失敗します。そのためダッシュボード等でクエリのFROM句で複数のLogパーティションを指定することは極力避けた方が良いかと思われます。