外部認証情報ストレージの設定

  • リリースバージョン: Yokohama
  • 更新日 2025年01月30日
  • 所要時間:15分
  • リモート リポジトリーから認証情報を取得するようにインスタンスを設定します。

    次の手順では、保護する認証情報で外部リポジトリーを設定していることを前提としています。ServiceNow インスタンスで設定されている認証情報識別子は、JAR ファイルを使用してリポジトリー内の実際の認証情報にマップする必要があります。

    注:
    ServiceNow では、同時に 2 つの外部ボールトがサポートされています。1 つはデフォルトの CyberArk 認証情報リゾルバー、もう 1 つはカスタム外部認証情報リゾルバーです。カスタム CyberArk 認証情報リゾルバーを作成すると、引き続き 2 つ目のカスタム外部ボールトが使用され、追加のカスタム外部ボールトを使用することはできません。

    外部認証情報ストレージを設定するには、次のタスクを順に実行します。

    認証情報を解決するための JAR ファイルの作成

    MID サーバーから送信された認証情報の識別子をリポジトリーの実際の認証情報に解決するために、JAR ファイルを作成します。

    始める前に

    必要なロール:agent_admin または admin

    インスタンスが予期するすべての認証情報要素 (秘密鍵など) を含めるようにしてください。

    認証情報を解決するための JAR ファイルを作成するには、次の手順に従います。

    手順

    ServiceNow github で提供されているテンプレートまたはサンプル Java ファイルのいずれかを使用します。
    注意:
    これらのサンプルはテンプレートとしてのみ使用してください。お使いの環境に合わせて変更しないまま本番環境でこのコードを使用しないでください。
    1. ServiceNow github からの指示に従って、オープンソースの JAR ファイルをダウンロードします。
    2. 次のサンプル Java ファイルをテンプレートとして使用し、環境に合わせて変更します。
      
      package com.snc.discovery;
      
      import java.util.*;
      import java.io.*;
      
      /**
       * Basic implementation of a CredentialResolver that uses a properties file.
       */
      
      public class CredentialResolver {
      
      	private static String ENV_VAR = "CREDENTIAL_RESOLVER_FILE";
      	private static String DEFAULT_PROP_FILE_PATH = "C:\\dummycredentials.properties";
      
      	// These are the permissible names of arguments passed INTO the resolve()
      	// method.
      
      	// the string identifier as configured on the ServiceNow instance...
      	public static final String ARG_ID = "id";
      
      	// a dotted-form string IPv4 address (like "10.22.231.12") of the target
      	// system...
      	public static final String ARG_IP = "ip";
      
      	// the string type (ssh, snmp, etc.) of credential as configured on the
      	// instance...
      	public static final String ARG_TYPE = "type";
      
      	// the string MID server making the request, as configured on the
      	// instance...
      	public static final String ARG_MID = "mid";
      
      	// These are the permissible names of values returned FROM the resolve()
      	// method.
      
      	// the string user name for the credential, if needed...
      	public static final String VAL_USER = "user";
      
      	// the string password for the credential, if needed...
      	public static final String VAL_PSWD = "pswd";
      
      	// the string pass phrase for the credential if needed:
      	public static final String VAL_PASSPHRASE = "passphrase";
      
      	// the string private key for the credential, if needed...
      	public static final String VAL_PKEY = "pkey";
      
      	// the string authentication protocol for the credential, if needed...
      	public static final String VAL_AUTHPROTO = "authprotocol";
      
      	// the string authentication key for the credential, if needed...
      	public static final String VAL_AUTHKEY = "authkey";
      
      	// the string privacy protocol for the credential, if needed...
      	public static final String VAL_PRIVPROTO = "privprotocol";
      
      	// the string privacy key for the credential, if needed...
      	public static final String VAL_PRIVKEY = "privkey";
      
      
      	private Properties fProps;
      
      	public CredentialResolver() {
      	}
      
      	private void loadProps() {
      		if(fProps == null)
      			fProps = new Properties();
      
      		try {
      			String propFilePath = System.getenv(ENV_VAR);
      			if(propFilePath == null) {
      				System.err.println("Environment var "+ENV_VAR+" not found. Using default file: "+DEFAULT_PROP_FILE_PATH);
      				propFilePath = DEFAULT_PROP_FILE_PATH;
      			}
      
      			File propFile = new File(propFilePath);
      			if(!propFile.exists() || !propFile.canRead()) {
      				System.err.println("Can't open "+propFile.getAbsolutePath());
      			}
      			else {
      				InputStream propsIn = new FileInputStream(propFile);
      				fProps.load(propsIn);
      			}
      			//fProps.load(CredentialResolver.class.getClassLoader().getResourceAsStream("dummycredentials.properties"));
      		} catch (IOException e) {
      			System.err.println("Problem loading credentials file:");
      			e.printStackTrace();
      		}
      	}
      
      	/**
      	 * Resolve a credential.
      	 */
      	public Map resolve(Map args) {
      		loadProps();
      		String id = (String) args.get(ARG_ID);
      		String type = (String) args.get(ARG_TYPE);
      		String keyPrefix = id+"."+type+".";
      
      		if(id.equalsIgnoreCase("misbehave"))
      			throw new RuntimeException("I've been a baaaaaaaaad CredentialResolver!");
      
      		// the resolved credential is returned in a HashMap...
      		Map result = new HashMap();
      		result.put(VAL_USER, fProps.get(keyPrefix + VAL_USER));
      		result.put(VAL_PSWD, fProps.get(keyPrefix + VAL_PSWD));
      		result.put(VAL_PKEY, fProps.get(keyPrefix + VAL_PKEY));
      		result.put(VAL_PASSPHRASE, fProps.get(keyPrefix + VAL_PASSPHRASE));
      		result.put(VAL_AUTHPROTO, fProps.get(keyPrefix + VAL_AUTHPROTO));
      		result.put(VAL_AUTHKEY, fProps.get(keyPrefix + VAL_AUTHKEY));
      		result.put(VAL_PRIVPROTO, fProps.get(keyPrefix + VAL_PRIVPROTO));
      		result.put(VAL_PRIVKEY, fProps.get(keyPrefix + VAL_PRIVKEY));
      
      		System.err.println("Error while resolving credential id/type["+id+"/"+type+"]");
      
      		return result;
      	}
      
      
      	/**
      	 * Return the API version supported by this class.
      	 */
      	public String getVersion() {
      		return "1.0";
      	}
      
      	public static void main(String[] args) {
      		CredentialResolver obj = new CredentialResolver();
      		obj.loadProps();
      
      		System.err.println("I spy the following credentials: ");
      		for(Object key: obj.fProps.keySet()) {
      			System.err.println(key+": "+obj.fProps.get(key));
      		}
      
      	}
      }

    認証情報を解決するための JAR ファイルのインポート

    MID サーバーから送信された認証情報識別子をリポジトリーの実際の認証情報に解決するために作成した JAR ファイルをインポートします。

    始める前に

    必要なロール:agent_admin または admin

    JAR ファイルの作成後、そのファイルをインスタンスにインポートします。ここで、MID サーバーにアクセス可能になります。

    手順

    1. JAR ファイルとプロパティ ファイルの作成後、プロパティ ファイルを MID サーバーにコピーします。
    2. 次のように移動する。 MID Server > JAR ファイル.
    3. [New] をクリックします。
    4. 次のフィールドに入力します。
      フィールド 説明
      名前 インスタンス内のファイルを識別するためのわかりやすい一意の名前。
      バージョン ファイルのバージョン番号 (使用可能な場合)。
      ソース 参照用の JAR ファイルの場所。ソース情報はシステムで使用されません。
      説明 インスタンス内の JAR ファイルとその目的の簡単な説明。
    5. バナーにあるクリップ アイコンをクリックして JAR ファイルをレコードに添付します。
      図 : 1. JAR ファイルの添付
      ペーパークリップアイコンが [送信] ボタンの横に表示されます。
    6. [送信] をクリックします。
    7. MID サーバーサービスを再起動します。
      プラットフォームにより、インスタンスと通信するように設定された任意の MID サーバーで JAR ファイルが使用可能になります。

    認証情報識別子の設定

    インスタンスで認証情報識別子を設定します。

    始める前に

    必要なロール:admin
    次の項目を確認します。

    手順

    1. 次のように移動する。 All (すべて) > Discovery > 認証情報 または オーケストレーション > 認証情報.
    2. [New] をクリックします。
    3. 認証情報タイプを選択します。
    4. [External credential store] (外部の認証情報ストア) チェック ボックスをオンにします。
      [ユーザー名] フィールドおよび [パスワード] フィールドは消去され、[認証情報 ID] フィールドおよび [認証情報ストレージ Vault] メニューが表示されます。
    5. [認証情報ストレージ Vault] メニューから、[なし]、[CyberArk vault ]、またはカスタム外部認証情報ストレージ vault のいずれかを選択します。
      注:

      [CyberArk vault] が選択されている場合は、[ルックアップキー] メニューに、[認証情報 ID]、[IP アドレス]、[FQDN]、[上記のすべて] の 4 つのルックアップキーの選択肢が表示されます。[上記のすべて] を選択すると、 vault に複数回アクセスする必要があるため、パフォーマンスが低下する可能性があります。

      1. カスタム外部認証情報ストレージ vault を使用するには、インスタンスの Vault 構成 [vault_configuration.list] に移動します。
      2. カスタム認証情報リゾルバーのインポートされた JAR ファイルに関連付けられた名前を使用して、新しいレコードを作成します。

        カスタム外部認証情報ストレージ vault の作成については、手順「認証情報を解決するための JAR ファイルの作成」および「認証情報を解決するための JAR ファイルのインポート」を参照してください。

    6. 以下のテーブルのフィールドを使用して、認証情報フォームに入力します。
      フィールド 説明
      名前 この認証情報のわかりやすい一意の名前を入力します。
      アクティブ これらの認証情報の使用を有効または無効にします。
      認証情報 ID 外部認証情報システム用に MID サーバーにアップロードされた JAR ファイルに外部認証情報用に設定された一意のキーを入力します。これは、パラメーター マップで Java クラスに渡される ID です。
      public static final String ARG_ID   = "id";
      MID サーバーは、この識別子を使用して、リポジトリー上の実際の認証情報を解決します。
      注:
      このフィールドは、[外部の認証情報ストア] チェックボックスがオンになっている場合にのみ表示されます。
      タグ ワークフロー作成者は、個々の認証情報をオーケストレーションワークフロー内の任意のアクティビティに割り当てたり、オーケストレーションワークフロー内で同じアクティビティタイプが発生するたびに異なる認証情報を割り当てたりすることができます。
      外部の認証情報ストア 外部認証情報ストレージシステムを使用するには、このチェックボックスをオンにします。このオプションを選択すると、[ユーザー名] フィールドと [パスワード] フィールドが [認証情報 ID] フィールドに置き換えられます。外部の認証情報ストレージは、 外部認証情報ストレージ プラグインをアクティブ化した場合にのみ使用できます。
      認証情報ストレージ Vault 利用可能な Vault のリストから外部認証情報ストレージ Vault を選択します。メニューは、Vault 構成 [vault_configuration.list] のレコードで構成されています。新しいレコードを追加し、カスタム認証情報リゾルバー JAR ファイルに関連付けられた名前を使用できます。カスタム外部認証情報ストレージ vault の作成については、手順「認証情報を解決するための JAR ファイルの作成」および「認証情報を解決するための JAR ファイルのインポート」を参照してください。
      適用先 これらの認証情報をネットワーク内の [すべての MID サーバー] または 1 つ以上の [特定の MID サーバー] に適用するかどうかを選択します。[MID サーバー] フィールドでこれらの認証情報を使用する MID サーバーを指定します。
      MID サーバーを使用 使用可能な MID サーバーのリストから 1 つ以上の MID サーバーを選択します。このレコードで設定された認証情報は、このリストの MID サーバーで使用できます。このフィールドは、[適用先] フィールドで [特定の MID サーバー] を選択した場合のみ使用できます。
      順番 プラットフォームがデバイスにログオンしようとするときに、この認証情報を試行する順序 (シーケンス) を入力します。番号が小さいほど、この認証情報がリストの上位に表示されます。多くの認証情報を使用する場合、またはログイン試行が 3 回失敗してセキュリティによってユーザーがロックアウトされた場合、認証情報の順序を確立します。すべての認証情報に同じ順序番号を設定した場合、または何も設定しない場合、ディスカバリーまたはオーケストレーションでは、認証情報をランダムな順序で試行します。
    7. [送信] をクリックします。

    AWS の認証情報識別子の設定

    リモート リポジトリーから認証情報を取得するようにインスタンスを設定します。

    始める前に

    必要なロール:cloud_admin

    次のプラグインがアクティブであり、MID サーバーがインストールされていることを確認します。
    • ディスカバリー [com.snc.discovery]
    • クラウドプロビジョニングとガバナンス [com.snc.cloud.mgmt]
    • 外部認証情報ストレージ [com.snc.discovery.external_credentials]

    このタスクについて

    次の手順では、保護する認証情報で外部リポジトリーを設定していることを前提としています。ServiceNow インスタンスで設定されている認証情報識別子は、JAR ファイルを使用してリポジトリー内の実際の認証情報にマップする必要があります。

    手順

    1. 次のように移動する。 All (すべて) > Discovery > 認証情報.
    2. 外部認証情報ストレージプロバイダーがサポートする認証情報を選択します。
    3. テーブル内のフィールドを使用して、フォームに入力します。
      フィールド 説明
      名前 この認証情報にわかりやすい一意の名前。たとえば、Amazon Web サービスです。
      [Active (アクティブ)] 認証情報を有効または無効にするためのチェック ボックス。
      認証情報 ID この認証情報が外部認証情報ストレージプロバイダーに保存される名前を入力します。
      MID Server これらの認証情報を使用できる MID サーバーを 1 つ以上選択します。
      External credential store (外部の資格情報ストア) 外部認証情報ストレージシステムを使用するには、このチェックボックスをオンにします。外部ストレージが有効になっている場合は、[認証情報 ID] フィールドが表示されます。このチェックボックスが表示されていない場合は、ヘッダーバーのメニューアイコンをクリックして、 ビュー > 外部ストレージ ] を選択します。
      資格情報ストレージ Vault [CyberArk] を選択します。
    4. [Submit (送信)] を選択します。