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

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む16読むのに数分
  • リモート リポジトリーから認証情報を取得するようにインスタンスを設定します。

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

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

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

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

    MID Server から送信された資格情報の識別子をリポジトリーの実際の資格情報に解決するために、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 Server から送信された資格情報識別子をリポジトリーの実際の資格情報に解決するために作成した JAR ファイルをインポートします。

    始める前に

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

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

    手順

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

    認証情報識別子の設定

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

    始める前に

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

    手順

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

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

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

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

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

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

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

    始める前に

    必要なロール:cloud_admin

    次のプラグインがアクティブであり、MID Server がインストールされていることを確認します。
    • Discovery [com.snc.discovery]
    • Cloud Provisioning and Governance [com.snc.cloud.mgmt]
    • 外部資格情報ストレージ [com.snc.discovery.external_credentials]

    このタスクについて

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

    手順

    1. 移動先 すべて > ディスカバリー > 資格情報.
    2. 外部資格情報ストレージプロバイダーがサポートする資格情報を選択します。
    3. テーブル内のフィールドを使用して、フォームに入力します。
      フィールド 説明
      名前 この認証情報にわかりやすい一意の名前。たとえば、Amazon Web サービスです。
      適用先 これらの資格情報を使用できる MID Server を選択します。選択肢は、[すべての MID Server] または [特定の MID Server] です。後者を選択すると、[MID Servers] フィールドが表示されます。
      有効 認証情報を有効または無効にするためのチェック ボックス。
      AWS アカウント AWS 資格情報が外部ストレージプロバイダーにある場合は、AWS アカウント ID を入力します。
      MID Server これらの資格情報を使用できる MID Server を 1 つ以上選択します。
      資格情報 ID この資格情報が外部資格情報ストレージプロバイダーに保存される名前を入力します。
      プライバシー資格情報 ID (Privacy Credential ID) CyberArk の SNMPv3 プライバシーキーの名前を入力します。このフィールドは、[資格情報ストアタイプ] フィールドから [CyberArk] を選択した場合に、SNMPv3 に対してのみ表示されます。CyberArk のプライバシーキーを使用していない場合は、このフィールドを空白のままにします。
      資格情報エイリアス 特定の動作を含むこの資格情報のエイリアスを選択します。詳細については、「Discovery の資格情報エイリアス」を参照してください。
      外部の資格情報ストア 外部認証情報ストレージシステムを使用するには、このチェックボックスをオンにします。外部ストレージが有効になっている場合は、[資格情報 ID] フィールドが表示されます。このチェックボックスが表示されていない場合は、ヘッダーバーのメニューアイコンをクリックして、 ビュー > 外部ストレージ コンテキストメニューから。
      資格情報ストアタイプ CyberArk SNMPv3 プライバシーキーを使用している場合のみ、[CyberArk]を選択します。[プライバシー資格情報 ID (Privacy Credential ID)] フィールドが表示され、キーのエントリーが許可されます。
    4. [送信] をクリックします。