Main Content

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

MATLAB Web App Server でのシークレット アクセスの制御

R2024a 以降

パスワードなどの機密情報をシークレットとして保存することで、アプリケーション コード内で機密情報が公開されるのを防ぐことができます。シークレットとは、暗号化された形式で安全に保存したい機密情報です。各シークレットは、名前、値、およびオプションのメタデータで構成されます。Web アプリで getSecret (MATLAB) 関数を使用してシークレットを取得します。デプロイメントでシークレットを使用する方法の詳細については、デプロイされたアプリケーションで機密情報を処理する を参照してください。

MATLAB® Web App Server™ の秘密を安全な vault に保管できます。MATLAB Web App Server でシークレットを追加および管理するには、次のいずれかのオプションを使用します。

サーバー上でポリシーベースのシークレット アクセスを有効にすると、認証されたサブジェクトがサーバー vault に保存されているシークレットにアクセスできるようにする属性ベースのルールを作成できます。サーバー管理者だけが Vault のキーを持ち、Vault の場所にアクセスできるようにします。

前提条件

  • MATLAB Web App Server のインスタンス。詳細については、セットアップMATLAB Web App Serverを参照してください。

  • ユーザー認証を使用してシークレットへのアクセスを制御するには、サーバー上で認証を有効にする必要があります。詳細については、認証を参照してください。

    認証はスタンドアロンの MATLAB Web App Server 製品ではサポートされており、MATLAB Compiler™ に含まれる開発バージョンではサポートされていません。詳細については、MATLAB Web App Server の違いを参照してください。

シークレットへのアクセスを制御する

シークレット アクセス制御ファイルを使用すると、サーバー上に保存されているシークレットにアクセスできる認証済みユーザーまたはグループを指定できます。

サーバー認証が有効になっている場合、シークレット アクセス制御はデフォルトで有効になり、ポリシーで指定されない限り、認証されたユーザーはシークレットにアクセスできません。サーバー上で認証を有効にするには、認証 を参照してください。

アクセス制御を有効にするには、webapps_secrets_acc_ctl.json という名前のファイルを作成し、config フォルダー内にある webapps_private フォルダーに配置します。

webapps_private フォルダは次の場所にあります:

オペレーティング システムフォルダーの場所

Windows®

%ProgramData%\MathWorks\webapps\R2024a\config\webapps_private

Linux®

/local/MathWorks/webapps/R2024a/config/webapps_private

macOS

/Library/Application Support/MathWorks/webapps/R2024a/config/webapps_private

webapps_secrets_acc_ctl.json は次の JSON スキーマを使用する必要があります。

{
    "version": <version_string>,
    "policy": [
      {
        "id": <id_string>,
        "description": <description_string>,
        "rule": [
            {
                "id": <rule_id_string>,
                "description": <rule_description_string>,
                "subject": { 
                    "uid": [<user_string>, <user_string>] 
                },
                "resource": { 
                    "secret": [<secret_key_string>, <secret_key_string>]
                },
                "action": <action_string>
            }
        ]     
    }
  ]
}

  • バージョン:JSON スキーマのバージョンを指定します。R2024a のデフォルト値は 1.2.0 です。

  • id:ポリシーのポリシー ID を指定します。ポリシー ID は英数字のセットである必要があります。先頭または末尾の空白は削除されます。次に例を示します。

    "id" : "policy420"
  • 説明:ポリシーの説明を指定します。次に例を示します。

    "description" : "Company policy for accessing web app secrets."
  • id:各ルールに一意のルール ID を指定します。ルール ID は英数字のセットである必要があります。先頭または末尾の空白は削除されます。次に例を示します。

    "id" : "rule1"
  • 説明:各ルールの説明を指定します。次に例を示します。

    "description": "Only user id 'mluser' can access secret 'app1.*'"

  • 件名:認証されたサブジェクトに指定されたシークレットへのアクセスを許可するには、1 つ以上の属性名と値のペアを指定します。

    次に例を示します。

    "subject": { "memberOf": ["CN=Middle,OU=middle,ou=groups,DC=school,DC=com"] }
    "subject": { "groups": ["Sales"] }
    "subject": { "uid": ["fbueller", "cfrye"]  }

    Azure® Active ディレクトリを使用しており、グループ ID を取得する必要がある場合は、Azure Active Directory の使用 を参照してください。

  • 秘密:指定されたサブジェクトがアクセスできる 1 つ以上のシークレットの名前を指定します。

    次に例を示します。

    "secret": ["mypassword"] 
    シークレット名の末尾にはワイルドカード (*) がサポートされます。たとえば、"myapp1.*" のようになります。

  • アクション:指定されたサブジェクトが実行できるアクションの種類を指定します。サポートされている唯一のアクションは read であり、これはサブジェクトにシークレットへの読み取りアクセス権を付与します。

    詳細については、ロールベースのアクセスを参照してください。

webapps_secrets_acc_ctl.json のサンプル ファイル

{
    "version": "1.0.0",
    "policy": [
      {
        "id": "secretPolicyID01",
        "description": "Secret Access Policy for user access",
        "rule": [
            {
                "id": "rule101",
                "description": "Only allow user 'mluser' to access secret 'app1.*' ",
                "subject": { "uid": ["mluser"] },
                "resource": { 
                    "secret": ["app1.*"] 
                },
                "action": ["read"]
            },
            {
                "id": "rule102",
                "description": "Only allow 'mluser' to access 'myusername' and 'password_for_all' ",
                "subject": {"uid": ["mluser"]},
                "resource": { 
                    "secret": ["myusername","password_for_all"]
                },
                "action": ["read"]
            },
            {
                "id": "rule103",
                "description": "Allow admin group to access secrets 'username_for_admin','password_for_admin' ",
                "subject": { "group": ["admin"]    },
                "resource": {
                    "secret":["username_for_admin","password_for_admin"]   
                },
                "action": ["read"]
          }
        ]     
      }
  ]
}

シークレットのアクセス範囲を設定する

シークレット構成ファイルを使用すると、サーバーに保存されている秘密キーの階層を整理できます。たとえば、特定のキー名のスコープを制限して、異なるユーザーまたは Web アプリに対して異なるシークレット値を持つ同じシークレット キー名を使用できます。

シークレットのスコープを設定するには、webapps_secrets_config.json という名前のファイルを作成し、webapps_private フォルダーに配置します。

webapps_secrets_config.json は次の JSON スキーマを使用する必要があります。

{
    "version" : <version_string>
    "description" : <policy_description_string>
    “secretKeyMap” : [ 
        {
            "id" : <rule_id_string>,
            "description" : <rule_description_string>,
            "secretKey": [<secret_key_string>, <secret_key_string>, ...],
            "scope" : <scope_string>
        }
    ]
}

  • バージョン:JSON スキーマのバージョンを指定します。R2024a のデフォルト値は 1.2.0 です。

  • 説明:ポリシーの説明を指定します。次に例を示します。

    "description" : "Company policy for accessing web app secrets."
  • シークレットキーマップ:秘密キーマップ ブロックには、ルール オブジェクトのリストが含まれています。ブロック内に複数のルールが存在する場合があります。ルールは順番に適用され、最初のルールが最も優先されます。各ルールには一意の ID が必要です。

  • id:各ルールに一意のルール ID を指定します。ルール ID は英数字のセットである必要があります。先頭または末尾の空白は削除されます。次に例を示します。

    "id" : "rule101"
  • 説明:各ルールの説明を指定します。次に例を示します。

    "description": "Only user id 'mluser' can access secrets 'app1.*'"

  • 秘密鍵:アクセスできるシークレットの名前を指定します。

    次に例を示します。

    "secretKey": ["mypassword"] 
    シークレット名の末尾にはワイルドカード (*) がサポートされます。たとえば、"myapp1.*" のようになります。

  • 範囲:指定されたシークレットへのアクセスを許可するユーザー、グループ、または特定の Web アプリを指定します。スコープは、任意の静的文字列またはマクロを含む文字列にすることができます。次のマクロがサポートされています:

    • $UserID—ログオンセッションのユーザーID

    • $AppName - CTFファイル名とフォルダ名を含むWebアプリ名

メモ

$UserID マクロを使用するには、config/webapps_private ディレクトリに userinfo.json を含める必要があります。詳細については、ユーザーに基づいてWebアプリの動作をカスタマイズするを参照してください。

webapps_secrets_config.json のサンプル ファイル

{
    "version": "1.2.0",
    "description": "Configure secret key mapping rules",
    "secretKeyMap": [
        {
            "id"          : "rule01",
            "description" : "Limit db_password only to app testapp1",
            "secretKey"   : "db_password",
            "scope"       : "testapp1"
        },     
        {
            "id"          : "rule02",
            "description" : "Ensure unique password per user for app testapp1",
            "secretKey"   : "testapp1.password",
            "scope"       : "$UserID"
        },
        {
            "id"          : "rule03",
            "description" : "Prevent secret name collision between multiple apps",
            "secretKey"   : "database_name",
            "scope"       : "$AppName"
        }
    ]
}

参考

| (MATLAB)

関連するトピック