組み込みシステムアクセス制御¶
システムアクセス制御プラグインは、コネクタレベルの承認の前に、グローバルレベルで承認を強制します。Prestoの組み込みプラグインのいずれかを使用するか、システムアクセス制御のガイドラインに従って独自のプラグインを提供できます。Prestoは3つの組み込みプラグインを提供します。
プラグイン名 |
説明 |
---|---|
|
すべての操作が許可されます。 |
|
データまたはメタデータを読み取る操作は許可されますが、データまたはメタデータを書き込む操作は許可されません。読み取り専用システムアクセス制御の詳細を参照してください。 |
|
構成プロパティ |
すべてのシステムアクセスを許可¶
このプラグインでは、すべての操作が許可されます。このプラグインはデフォルトで有効になっています。
読み取り専用システムアクセス制御¶
このプラグインでは、SELECT
またはSHOW
など、データまたはメタデータを読み取る操作を実行できます。システムレベルまたはカタログレベルのセッションプロパティの設定も許可されます。ただし、CREATE
、INSERT
、DELETE
など、データまたはメタデータを書き込む操作は禁止されています。このプラグインを使用するには、次の内容のetc/access-control.properties
ファイルを追加します。
access-control.name=read-only
ファイルベースのシステムアクセス制御¶
このプラグインを使用すると、ファイルにアクセス制御ルールを指定できます。このプラグインを使用するには、2つの必須プロパティを含むetc/access-control.properties
ファイルを追加します。access-control.name
はfile
と等しくなければならず、security.config-file
は構成ファイルの場所と等しくなければなりません。たとえば、rules.json
という名前の構成ファイルがetc
にある場合は、次の内容のetc/access-control.properties
を追加します。
access-control.name=file
security.config-file=etc/rules.json
構成ファイルはJSON形式で指定されます。
どのユーザーがどのカタログにアクセスできるかを定義するルールが含まれています(以下のカタログルールを参照)。
どのユーザーがどのスキーマにアクセスできるかを定義するスキーマアクセルルール(以下のスキーマルールを参照)。
どのプリンシパルがどのユーザーとして識別できるかを指定するプリンシパルルール(以下のプリンシパルルールを参照)。
このプラグインは現在、カタログアクセス制御ルール、スキーマアクセス制御ルール、およびプリンシパルルールをサポートしています。他の方法でシステムレベルのアクセスを制限する場合は、カスタムSystemAccessControlプラグインを実装する必要があります(システムアクセス制御を参照)。
更新¶
デフォルトでは、security.config-file
に変更が加えられた場合、変更をロードするためにPrestoを再起動する必要があります。Prestoの再起動を必要とせずにプロパティを更新するためのオプションのプロパティがあります。etc/access-control.properties
で更新期間が指定されます。
security.refresh-period=1s
カタログルール¶
これらのルールは、特定のユーザーがアクセスできるカタログを管理します。ユーザーには、上から下に読み取られた最初のマッチングルールに基づいて、カタログへのアクセス権が付与されます。一致するルールがない場合、アクセスは拒否されます。各ルールは、次のフィールドで構成されます。
user
(オプション):ユーザー名と照合する正規表現。デフォルトは.*
です。catalog
(オプション):カタログ名と照合する正規表現。デフォルトは.*
です。allow
(必須):ユーザーがカタログにアクセスできるかどうかを示す文字列。この値はall
、read-only
、またはnone
にすることができ、デフォルトはnone
です。この値をread-only
に設定すると、read-only
システムアクセス制御プラグインと同じ動作になります。
注記
デフォルトでは、すべてのユーザーがsystem
カタログにアクセスできます。ルールを追加してこの動作をオーバーライドできます。
ブール値true
とfalse
も、下位互換性をサポートするためにallow
のレガシー値としてサポートされています。true
はall
に、false
はnone
にマップされます。
たとえば、ユーザーadmin
のみがmysql
とsystem
カタログにアクセスできるようにし、すべてのユーザーがhive
カタログにアクセスできるようにし、ユーザーalice
がpostgresql
カタログへの読み取り専用アクセスを許可し、その他のアクセスをすべて拒否する場合は、次のルールを使用できます。
{
"catalogs": [
{
"user": "admin",
"catalog": "(mysql|system)",
"allow": "all"
},
{
"catalog": "hive",
"allow": "all"
},
{
"user": "alice",
"catalog": "postgresql",
"allow": "read-only"
},
{
"catalog": "system",
"allow": "none"
}
]
}
スキーマルール¶
これらのルールを使用すると、スキーマの所有権を付与できます。スキーマの所有権を持つと、ユーザーはDROP SCHEMA
、ALTER SCHEMA
、CREATE SCHEMA
を実行できます。ユーザーには、上から下に読み取られた最初のマッチングルールに基づいて、スキーマの所有権が付与されます。一致するルールがない場合、所有権は付与されません。各ルールは、次のフィールドで構成されます。
user
(オプション):ユーザー名と照合する正規表現。デフォルトは.*
です。schema
(オプション):スキーマ名と照合する正規表現。デフォルトは.*
です。owner
(必須):ユーザーがスキーマの所有者と見なされるかどうかを示すブール値。デフォルトはfalse
。
例えば、ユーザーadmin
にすべてのスキーマの所有権を与え、すべてのユーザーをdefault
スキーマの所有者として扱い、ユーザーguest
がどのスキーマの所有権も持てないようにするには、次のルールを使用できます。
{
"catalogs": [
{
"allow": true
}
],
"schemas": [
{
"user": "admin",
"schema": ".*",
"owner": true
},
{
"user": "guest",
"owner": false
},
{
"schema": "default",
"owner": true
}
]
}
プリンシパルルール¶
これらのルールは、プリンシパルと指定されたユーザー名の間の特定の一致を強制するために役立ちます。プリンシパルは、上から下に読み込まれた最初の一致するルールに基づいて、ユーザーとして認証されます。ルールが指定されていない場合、チェックは実行されません。どのルールにも一致しない場合、ユーザー認証は拒否されます。各ルールは次のフィールドで構成されています。
principal
(必須):プリンシパルに一致し、グループ化する正規表現。user
(オプション):ユーザー名と照合する正規表現。一致した場合、allow
の値に基づいて認証を許可または拒否します。principal_to_user
(オプション):プリンシパルに代入する置換文字列。置換の結果がユーザー名と同じ場合、allow
の値に基づいて認証を許可または拒否します。allow
(必須):プリンシパルがユーザーとして認証できるかどうかを示すブール値。
注記
プリンシパルルールでは、少なくとも1つの基準を指定する必要があります。プリンシパルルールに両方の基準を指定した場合、いずれかの基準を満たすと、目的の結果が返されます。
以下は、LDAPおよびKerberos認証の完全なプリンシパル名の完全一致を実装しています。
{
"catalogs": [
{
"allow": true
}
],
"principals": [
{
"principal": "(.*)",
"principal_to_user": "$1",
"allow": true
},
{
"principal": "([^/]+)/?.*@.*",
"principal_to_user": "$1",
"allow": true
}
]
}
ユーザーがKerberosプリンシパル名とまったく同じ名前を使用できるようにし、alice
とbob
がgroup@example.net
という名前のグループプリンシパルを使用できるようにするには、次のルールを使用できます。
{
"catalogs": [
{
"allow": true
}
],
"principals": [
{
"principal": "([^/]+)/?.*@example.net",
"principal_to_user": "$1",
"allow": true
},
{
"principal": "group@example.net",
"user": "alice|bob",
"allow": true
}
]
}