Junos XML プロトコルを使用した設定オブジェクトの保護または保護解除
protect属性は、選択した設定階層とステートメントを変更できないようにします。保護された要素は、CLIを介して手動で変更することも、コミットスクリプトやリモートプロシージャコールを使用して自動的に変更することもできます。保護されたステートメントまたは保護された階層内で設定変更を加えようとすると、デバイスから警告が発行され、設定変更は失敗します。
設定階層またはステートメントが保護されている場合、ユーザーは以下のアクティビティを実行できません。
-
保護された階層内の階層、またはステートメント、または識別子を削除または変更します (保護された要素を含む保護されていない階層を削除すると、保護されていない子要素はすべて削除され、保護された子要素はすべて保持されます)。
-
保護された階層内に新しい設定ステートメントまたは識別子を挿入します
-
保護されたステートメント、保護された階層内のステートメントまたは識別子の名前を変更します
-
保護された階層に設定をコピーする
-
保護されたステートメントまたは保護された階層内のステートメントを有効化または無効化します
-
保護されたステートメントまたは階層、または保護された階層内のステートメントに注釈を付けます。
存在しない設定ステートメントまたは階層を保護する場合、デバイスはまず設定要素を作成してから保護します。保護されていないステートメントまたは要素の保護を解除した場合、アクションは実行されません。
設定を表示するときに、保護された要素を識別できます。 表1は 、さまざまな形式の設定データで保護された要素を特定する方法を示しています。
| フォーマット | 識別子 |
|---|---|
| 設定モードコマンド |
|
| JSON |
保護された階層とステートメントは、属性リストに |
| テキスト |
保護された要素の先頭には |
| XML |
protected 要素の開始タグには、 |
ユーザーまたはクライアントアプリケーションは、設定オブジェクトを保護または保護解除するために、設定を変更する権限を持っている必要があります。
JunosデバイスとのNETCONFまたはJunos XMLプロトコルセッションで、設定要素を変更から保護したり、以前に保護された要素の保護を解除したりするために、クライアントアプリケーションはまず、 Junos XMLプロトコルを使用した設定要素の作成、変更、または削除で説明されているタグ要素を含めます。
XML
Junos XML タグ要素を使用して設定を表す場合、クライアントアプリケーションはオブジェクトの開始タグに protect="protect" または unprotect="unprotect" 属性を含めます。アプリケーションには、必要な識別タグ要素が含まれます。次のサンプル RPC では、identifier タグ要素は <name> と呼ばれます。
<configuration>
<!-- opening tag for each parent of the object -->
<object (protect="protect" | unprotect="unprotect")>
<name>identifier</name>
</object>
<!-- closing tag for each parent of the object -->
</configuration>
YANG 準拠の NETCONF セッションでは、タグ要素に xmlns:jcmd="http://yang.juniper.net/junos/jcmd" 属性と jcmd:protect="(true | false)" 属性を含めることで、XML データの設定要素を保護または保護解除できます。詳細については、 JunosデバイスのYANGメタデータ注釈を参照してください。
テキスト
フォーマットされたASCIIテキストを使用してオブジェクトを保護または保護解除する場合、必要に応じて、アプリケーションは要素の前に protect: または unprotect: 運用担当者を付けます。階層レベルを保護していて、その階層の下に追加の子要素がない場合は、要素ステートメントの後にセミコロンを追加します。
<configuration-text>
/* statements for parent levels */
/* For an object with an identifier */
(protect: | unprotect:)
object identifier {
/* Child configuration statements */
}
/* For a hierarchy level or object without an identifier */
(protect: | unprotect:)
element {
/* Child configuration statements */
}
/* closing braces for parent levels */
</configuration-text>
設定モード(設定)コマンド
設定モードコマンドを使用してオブジェクトを保護する場合、アプリケーションはCLI設定モードコマンドに相当する protect または unprotect コマンドを指定します。階層と個々のステートメントの両方を保護できます。
<configuration-set>
(protect | unprotect) statement-path-to-hierarchy
(protect | unprotect) statement-path-to-object object identifier
</configuration-set>
JSON
JSON 設定データを使用して設定を表す場合、クライアントアプリケーションは、オブジェクトの属性リストに適切な属性を含めることで、オブジェクトを保護または保護解除します。クライアントには、オブジェクトを保護するための "protect" : true 属性と、オブジェクトの保護を解除するための "protect" : false または "unprotect" : true 属性が含まれます。識別子を持つオブジェクトを保護または保護解除するために、クライアントはオブジェクトの識別子も含めます。
以下の汎用JSON設定は、階層、識別子を持つオブジェクト、およびリーフステートメントを保護する場合の属性の配置を示しています。
<configuration-json>
{
"configuration" : {
/* JSON objects for parent hierarchies */
"hierarchy" : {
"@" : {
"comment" : "/* protect a hierarchy */" ,
"protect" : true
},
"object" : [
{
"@" : {
"comment" : "/* protect an object with an identifier */" ,
"protect" : true
},
"name" : "identifier",
"@statement-name" : {
"comment" : "/* protect a statement */" ,
"protect" : true
}
}
]
}
/* closing braces for parent hierarchies */
}
}
</configuration-json>
JSON を使用して表されるJunos OS設定データでは、 "protect" および "unprotect" 属性の値はブール値であり、小文字で表され、引用符で囲まれていません。
YANG 準拠の NETCONF セッションでは、ステートメントのメタデータオブジェクトに "junos-configuration-metadata:protect" : (true | false) アノテーションを含めることで、JSON データ内の設定オブジェクトを保護または保護解除できます。詳細については、 JunosデバイスのYANGメタデータ注釈を参照してください。
次の例では、Junos XML タグ要素を使用して、設定の [edit access] 階層レベルを保護しています。
<rpc>
<load-configuration>
<configuration>
<access protect="protect"/>
</configuration>
</load-configuration>
</rpc>
保護された後、 [edit access] 階層レベルを変更しようとすると警告が生成されます。次の RPC は、 [edit access] 階層レベルを削除しようとします。その階層レベルは保護されているため、サーバーは階層が保護されているという警告を返し、設定変更は失敗します。
<rpc>
<load-configuration>
<configuration>
<access delete="delete"/>
</configuration>
</load-configuration>
</rpc>
<xnm:warning xmlns="http://xml.juniper.net/xnm/1.1/xnm" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm">
<message>
[access] is protected, 'access' cannot be deleted
</message>
</xnm:warning>