アプリケーション権限の作成または更新API

アプリケーション権限を追加または更新します。

リクエスト

POST /_security/privilege

PUT /_security/privilege

前提条件

このAPIを使用するには、次のいずれかを持っている必要があります:

  • manage_security クラスター権限(または all のようなより大きな権限);または
  • リクエストで参照されているアプリケーションの「アプリケーション権限の管理」グローバル権限

説明

このAPIは権限を作成または更新します。権限を削除するには、アプリケーション権限削除APIを使用してください。

詳細については、アプリケーション権限を参照してください。

ユーザーのアプリケーション権限を確認するには、権限確認APIを使用してください。

リクエストボディ

ボディはJSONオブジェクトで、フィールドの名前はアプリケーション名であり、各フィールドの値はオブジェクトです。この内部オブジェクトのフィールドは権限の名前であり、各値は次のフィールドを含むJSONオブジェクトです:

  • actions
  • (文字列の配列)この権限によって付与されるアクション名のリスト。このフィールドは存在しなければならず、空の配列であってはなりません。
  • metadata
  • (オブジェクト)オプションのメタデータ。metadataオブジェクト内では、_で始まるキーはシステム使用のために予約されています。

検証

  • アプリケーション名
  • アプリケーション名はプレフィックスから構成され、次のルールに従うオプションのサフィックスを持つことができます:
    • プレフィックスは小文字のASCII文字で始まる必要があります
    • プレフィックスはASCII文字または数字のみを含む必要があります
    • プレフィックスは少なくとも3文字以上である必要があります
    • サフィックスが存在する場合、-または_のいずれかで始まる必要があります
    • サフィックスには次の文字を含めることはできません: \, /, *, ?, ", <, >, |, ,, *
    • 名前のどの部分にも空白を含めることはできません。
  • 権限名
  • 権限名は小文字のASCII文字で始まり、ASCII文字と数字、および_, -, .の文字のみを含む必要があります
  • アクション名
  • アクション名は任意の数の印刷可能なASCII文字を含むことができ、次のいずれかの文字を少なくとも1つ含む必要があります: / *, :

レスポンスボディ

成功した呼び出しは、権限が作成または更新されたかどうかを示すJSON構造を返します。

単一の権限を追加するには、/_security/privilege/エンドポイントにPUTまたはPOSTリクエストを送信します。例えば:

Python

  1. resp = client.security.put_privileges(
  2. privileges={
  3. "myapp": {
  4. "read": {
  5. "actions": [
  6. "data:read/*",
  7. "action:login"
  8. ],
  9. "metadata": {
  10. "description": "Read access to myapp"
  11. }
  12. }
  13. }
  14. },
  15. )
  16. print(resp)

Js

  1. const response = await client.security.putPrivileges({
  2. privileges: {
  3. myapp: {
  4. read: {
  5. actions: ["data:read/*", "action:login"],
  6. metadata: {
  7. description: "Read access to myapp",
  8. },
  9. },
  10. },
  11. },
  12. });
  13. console.log(response);

コンソール

  1. PUT /_security/privilege
  2. {
  3. "myapp": {
  4. "read": {
  5. "actions": [
  6. "data:read/*" ,
  7. "action:login" ],
  8. "metadata": {
  9. "description": "Read access to myapp"
  10. }
  11. }
  12. }
  13. }
これらの文字列は「myapp」アプリケーション内で重要です。Elasticsearchはこれらに意味を割り当てません。
ここでのワイルドカードの使用(*)は、この権限がdata:read/で始まるすべてのアクションへのアクセスを付与することを意味します。Elasticsearchはこれらのアクションに意味を割り当てません。ただし、リクエストにdata:read/usersdata:read/settingsのようなアプリケーション権限が含まれている場合、権限確認APIはワイルドカードの使用を尊重し、trueを返します。
メタデータオブジェクトはオプションです。

コンソール-結果

  1. {
  2. "myapp": {
  3. "read": {
  4. "created": true
  5. }
  6. }
  7. }
既存の権限が更新されると、createdはfalseに設定されます。

複数の権限を追加するには、/_security/privilege/エンドポイントにPOSTリクエストを送信します。例えば:

Python

  1. resp = client.security.put_privileges(
  2. privileges={
  3. "app01": {
  4. "read": {
  5. "actions": [
  6. "action:login",
  7. "data:read/*"
  8. ]
  9. },
  10. "write": {
  11. "actions": [
  12. "action:login",
  13. "data:write/*"
  14. ]
  15. }
  16. },
  17. "app02": {
  18. "all": {
  19. "actions": [
  20. "*"
  21. ]
  22. }
  23. }
  24. },
  25. )
  26. print(resp)

Js

  1. const response = await client.security.putPrivileges({
  2. privileges: {
  3. app01: {
  4. read: {
  5. actions: ["action:login", "data:read/*"],
  6. },
  7. write: {
  8. actions: ["action:login", "data:write/*"],
  9. },
  10. },
  11. app02: {
  12. all: {
  13. actions: ["*"],
  14. },
  15. },
  16. },
  17. });
  18. console.log(response);

コンソール

  1. PUT /_security/privilege
  2. {
  3. "app01": {
  4. "read": {
  5. "actions": [ "action:login", "data:read/*" ]
  6. },
  7. "write": {
  8. "actions": [ "action:login", "data:write/*" ]
  9. }
  10. },
  11. "app02": {
  12. "all": {
  13. "actions": [ "*" ]
  14. }
  15. }
  16. }

成功した呼び出しは、権限が作成または更新されたかどうかを示すJSON構造を返します。

コンソール-結果

  1. {
  2. "app02": {
  3. "all": {
  4. "created": true
  5. }
  6. },
  7. "app01": {
  8. "read": {
  9. "created": true
  10. },
  11. "write": {
  12. "created": true
  13. }
  14. }
  15. }