KMVBLOG

VMware関連のトラブルシュート・設定・検証関連の備忘録

VMware Cloud FoundationでのApache Log4j脆弱性の対応について

今回は、Apatch Log4jに深刻な脆弱性「CVE-2021-44228/CVE-2021-45046」が見つかった問題についてです。

www.jpcert.or.jp

Apache Log4jにはLookupと呼ばれる機能があり、ログとして記録された文字列から、一部の文字列を変数として置換します。その内、JNDI Lookup機能が悪用されると、遠隔の第三者が細工した文字列を送信し、Log4jがログとして記録することで、Log4jはLookupにより指定された通信先もしくは内部パスからjava classファイルを読み込み実行し、結果として任意のコードが実行される可能性があります。

VMwareの複数製品においても、その影響が公表されています。

対象のプロダクトや回避策等に関しては、以下VMSA-2021-0028から確認可能です。

www.vmware.com

今回、一部のVCF製品(Cloud Builder/SDDC Manager)の回避策が公開されてましたので

実施してみました。

Cloud Builder CVE-2021-44228のworkaround

本回避策は全てのVCF 3.xと4.xのCloud Builderに適応可能です。

 

Cloud BuilderにSSHで接続する

suコマンドでrootに昇格

admin@vcf-cb01 [ ~ ]$ su

 

imagingサービスの停止

root@vcf-cb01 [ /home/admin ]# systemctl stop imaging

 

imagingサービスが停止しているか確認

root@vcf-cb01 [ /home/admin ]# systemctl status imaging

 

以下のファイルを編集する前にバックアップを取得しておく

/opt/vmware/evorack-imaging/imaging-util-scripts/start-parent-imaging-service.sh

 

root@vcf-cb01 [ /home/admin ]# cp /opt/vmware/evorack-imaging/imaging-util-scripts/start-parent-imaging-service.sh /opt/vmware/evorack-imaging/imaging-util-scripts/start-parent-imaging-service.sh.orig

 

/opt/vmware/evorack-imaging/imaging-util-scripts/start-parent-imaging-service.shを編集する

root@vcf-cb01 [ /home/admin ]# vi /opt/vmware/evorack-imaging/imaging-util-scripts/start-parent-imaging-service.sh

Before

nohup /etc/alternatives/jre/bin/java -jar -Dserver.port=$VIA_SERVICE_PORT -Dspring.config.additional-location=$VIA_EXTERNAL_PROPERTIES_PATH,$VIA_DB_PROPERTIES_FILE -Dserver.servlet.context-path=$VIA_CONTEXT_PATH $VIA_SERVICE_PATH < /dev/null >>$LOGFILE 2>&1 &

After

nohup /etc/alternatives/jre/bin/java -jar -Dserver.port=$VIA_SERVICE_PORT - Dlog4j2.formatMsgNoLookups=true -Dspring.config.additional-location=$VIA_EXTERNAL_PROPERTIES_PATH,$VIA_DB_PROPERTIES_FILE -Dserver.servlet.context-path=$VIA_CONTEXT_PATH $VIA_SERVICE_PATH < /dev/null >>$LOGFILE 2>&1 &

 

以下のファイルを編集する前にバックアップを取得しておく

/opt/vmware/evorack-imaging/imaging-util-scripts/start-imaging-services.sh

 

root@vcf-cb01 [ /home/admin ]# cp /opt/vmware/evorack-imaging/imaging-util-scripts/start-imaging-services.sh /opt/vmware/evorack-imaging/imaging-util-scripts/start-imaging-services.sh.orig

 

/opt/vmware/evorack-imaging/imaging-util-scripts/start-imaging-services.shを編集する

 

Before

nohup /etc/alternatives/jre/bin/java -jar -Dserver.port=$SECOND -Dspring.config.additional-location=$VIA_DB_PROPERTIES_FILE $name < /dev/null >>$LOGFILE 2>&1 &

After

nohup /etc/alternatives/jre/bin/java -jar -Dserver.port=$SECOND -Dlog4j2.formatMsgNoLookups=true -Dspring.config.additional-location=$VIA_DB_PROPERTIES_FILE $name < /dev/null >>$LOGFILE 2>&1 &

 

編集が完了したら、以下コマンドでサービスを起動する

root@vcf-cb01 [ /home/admin ]# systemctl start imaging

 

以下コマンドでサービスが正常に起動(running)している事を確認する

root@vcf-cb01 [ /home/admin ]# systemctl status imaging

 

以下のコマンドを実行し、imagingサービスが"Dlog4j2.formatMsgNoLookups=true" オプションで実行されている事を確認します。

root@vcf-cb01 [ /home/admin ]# ps -ef|grep jar
root      9184     1 26 15:06 ?        00:00:18 /etc/alternatives/jre/bin/java -jar -Dserver.port=8445 -Dlog4j2.formatMsgNoLookups=true -Dspring.config.additional-location=/opt/vmware/evorack-imaging/config/via.properties,/opt/vmware/evorack-imaging/config/via-db-ext.properties -Dserver.servlet.context-path=/via /opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar
root      9654  8756 32 15:07 ?        00:00:16 /etc/alternatives/jre/bin/java -jar -Dserver.port=8081 -Dlog4j2.formatMsgNoLookups=true -Dspring.config.additional-location=/opt/vmware/evorack-imaging/config/via-db-ext.properties /opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar
root     10087  4157  0 15:08 pts/0    00:00:00 grep --color=auto jar

 

Cloud Builder CVE-2021-45046のworkaround

Cloud BuilderにSSHで接続する

suコマンドでrootに昇格

admin@vcf-cb01 [ ~ ]$ su

 

imagingサービスを停止する

root@vcf-cb01 [ /home/admin ]# systemctl stop imaging

 

evorack-imaging-esxi-service jarの脆弱性の対処

 

テンポラリのディレクトリを作成する

root@vcf-cb01 [ /home/admin ]# mktemp -d -t log4j-XXXXXXXXXX

出力例

root@vcf-cb01 [ /home/admin ]# mktemp -d -t log4j-XXXXXXXXXX
/tmp/log4j-TChoNYNPvH

以下のコマンドを実行しlog4j-coreがjarファイルevorack-imaging-esxi-service-0.0.1-SNAPSHOT.jarに存在するかどうかを確認します。

root@vcf-cb01 [ /home/admin ]# zipinfo -1 "/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar" | grep log4j-core-*

出力例

root@vcf-cb01 [ /home/admin ]# zipinfo -1 "/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar" | grep log4j-core-*

BOOT-INF/lib/log4j-core-2.13.1.jar

mktempで作成したディレクトリのパスをコピーし、以下コマンドを実行します。

root@vcf-cb01 [ /home/admin ]# unzip "/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar" "BOOT-INF/lib/log4j-core-2.13.1.jar" -d "/tmp/log4j-TChoNYNPvH"

以下のコマンドを実行します。

root@vcf-cb01 [ /home/admin ]# zipinfo -l /tmp/log4j-TChoNYNPvH/BOOT-INF/lib/log4j-core-2.13.1.jar | grep -q "org/apache/logging/log4j/core/lookup/JndiLookup.class"

次に以下のコマンドを実行します。

root@vcf-cb01 [ /home/admin ]# echo $?

戻り値が1の場合は、これ以上の対処が不要なので、via.jarの対処に進む

戻り値が0の場合は、JndiLookup.classが存在するため、続けて以下コマンドを実行する必要があります。

root@vcf-cb01 [ /home/admin ]# zip -q -d "/tmp/log4j-TChoNYNPvH/BOOT-INF/lib/log4j-core-2.13.1.jar" "org/apache/logging/log4j/core/lookup/JndiLookup.class"

これにより、log4j-core-2.1.3.1.jarからJndiLookup.classファイルが削除されます。

変更したlog4j-coreでevorack-imaging jarを更新します。

root@vcf-cb01 [ /home/admin ]# cd "/tmp/log4j-TChoNYNPvH" && zip -ur -0 "/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar"

出力例

root@vcf-cb01 [ /home/admin ]# cd "/tmp/log4j-TChoNYNPvH" && zip -ur -0 "/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar"
updating: BOOT-INF/ (stored 0%)
updating: BOOT-INF/lib/ (stored 0%)
updating: BOOT-INF/lib/log4j-core-2.13.1.jar (stored 0%)

via.jarの脆弱性の対処

テンポラリのディレクトリを作成する

root@vcf-cb01 [ /home/admin ]# mktemp -d -t log4j-XXXXXXXXXX

出力例

root@vcf-cb01 [ /home/admin ]# mktemp -d -t log4j-XXXXXXXXXX
/tmp/log4j-ZjZ9Z0Itul

以下のコマンドを実行しlog4j-coreがvia.jarファイルに存在するかどうか確認します

root@vcf-cb01 [ /home/admin ]# zipinfo -1 "/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar" | grep log4j-core-*

出力例

root@vcf-cb01 [ /home/admin ]# zipinfo -1 "/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar" | grep log4j-core-*
BOOT-INF/lib/log4j-core-2.13.1.jar

mktempで作成したディレクトリのパスをコピーし、以下コマンドを実行します。

root@vcf-cb01 [ /home/admin ]# unzip "/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar" "BOOT-INF/lib/log4j-core-2.13.1.jar" -d "/tmp/log4j-ZjZ9Z0Itul"

root@vcf-cb01 [ /home/admin ]# zipinfo -l /tmp/log4j-ZjZ9Z0Itul/BOOT-INF/lib/log4j-core-2.13.1.jar | grep -q "org/apache/logging/log4j/core/lookup/JndiLookup.class"

以下のコマンドを実行します。

root@vcf-cb01 [ /home/admin ]# echo $?

戻り値が1の場合は、これ以上の対処が不要なので、imaging serviceを起動する

戻り値が0の場合は、JndiLookup.classが存在するため、続けて以下コマンドを実行する必要があります。

root@vcf-cb01 [ /home/admin ]# zip -q -d "/tmp/log4j-ZjZ9Z0Itul/BOOT-INF/lib/log4j-core-2.13.1.jar" "org/apache/logging/log4j/core/lookup/JndiLookup.class"

これにより、log4j-core-2.1.3.1.jarからJndiLookup.classファイルが削除されます。

変更したlog4j-coreでvia.jarを更新します。

root@vcf-cb01 [ /home/admin ]# cd "/tmp/log4j-ZjZ9Z0Itul" && zip -ur -0 "/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar"

出力例

root@vcf-cb01 [ /home/admin ]# cd "/tmp/log4j-ZjZ9Z0Itul" && zip -ur -0 "/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar"
updating: BOOT-INF/ (stored 0%)
updating: BOOT-INF/lib/ (stored 0%)
updating: BOOT-INF/lib/log4j-core-2.13.1.jar (stored 0%)

imagingサービスを起動する

root@vcf-cb01 [ /tmp/log4j-ZjZ9Z0Itul ]# systemctl start imaging

スクリプトによる回避策の実行(VMware推奨)

スクリプトはCVE-2021-44228とCVE-2021-45046に対処可能

既にCVE-2021-44228のworkaroundを実施済みでスクリプトを実行する事を推奨

 

KBに添付されている「log4j_via_v3.sh」というスクリプトファイルをダウンロードし、Cloud Builderの/home/adminディレクトリにコピーします。

 

Cloud BuilderにSSHで接続します

suコマンドでrootに昇格

admin@vcf-cb01 [ ~ ]$ su

以下のコマンドでスクリプトを実行します

root@vcf-cb01 [ /home/admin ]# bash log4j_via_v3.sh

出力例

root@vcf-cb01 [ /home/admin ]# bash log4j_via_v3.sh
» Starting to remediate log4j issue in imaging service.
» ---
» Stopping imaging service: [systemctl stop imaging]
» ---
» Stage 1 - Entering remediation stage.
» Step 1 - Remove JndiLookup class for CVE-2021-45046. Scanning if any of imaging jars [/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar /opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar] exist in system.
» Found imaging jar [/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar] that needs analysis for existence of JndiLookup class.
» Creating a working directory [/tmp/log4j-MxSOaIPnKF]
» Successfully created working directory [/tmp/log4j-MxSOaIPnKF] for updating [/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar]
» Looking for [log4j-core-*] in [/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar]
» Executing: [(zipinfo -1 /opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar | grep log4j-core-*) || exit 1]
» Extracting [BOOT-INF/lib/log4j-core-2.13.1.jar] from [/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar] to temp directory [/tmp/log4j-MxSOaIPnKF]
» Executing: [unzip /opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar BOOT-INF/lib/log4j-core-2.13.1.jar -d /tmp/log4j-MxSOaIPnKF || exit 1]
Archive:  /opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar
 extracting: /tmp/log4j-MxSOaIPnKF/BOOT-INF/lib/log4j-core-2.13.1.jar
» Scanning [/tmp/log4j-MxSOaIPnKF/BOOT-INF/lib/log4j-core-2.13.1.jar] to check if [org/apache/logging/log4j/core/lookup/JndiLookup.class] exists.
» Executing: [zipinfo -1 /tmp/log4j-MxSOaIPnKF/BOOT-INF/lib/log4j-core-2.13.1.jar | grep -q org/apache/logging/log4j/core/lookup/JndiLookup.class]
» Scanning completed. [/tmp/log4j-MxSOaIPnKF/BOOT-INF/lib/log4j-core-2.13.1.jar] does not have the affected class. No clean-up needed.
» Cleaning up working directory [/tmp/log4j-MxSOaIPnKF]
» Cleaned up working directory [/tmp/log4j-MxSOaIPnKF]
» ---
» Found imaging jar [/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar] that needs analysis for existence of JndiLookup class.
» Creating a working directory [/tmp/log4j-sFS5k5n2D2]
» Successfully created working directory [/tmp/log4j-sFS5k5n2D2] for updating [/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar]
» Looking for [log4j-core-*] in [/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar]
» Executing: [(zipinfo -1 /opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar | grep log4j-core-*) || exit 1]
» Extracting [BOOT-INF/lib/log4j-core-2.13.1.jar] from [/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar] to temp directory [/tmp/log4j-sFS5k5n2D2]
» Executing: [unzip /opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar BOOT-INF/lib/log4j-core-2.13.1.jar -d /tmp/log4j-sFS5k5n2D2 || exit 1]
Archive:  /opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar
 extracting: /tmp/log4j-sFS5k5n2D2/BOOT-INF/lib/log4j-core-2.13.1.jar
» Scanning [/tmp/log4j-sFS5k5n2D2/BOOT-INF/lib/log4j-core-2.13.1.jar] to check if [org/apache/logging/log4j/core/lookup/JndiLookup.class] exists.
» Executing: [zipinfo -1 /tmp/log4j-sFS5k5n2D2/BOOT-INF/lib/log4j-core-2.13.1.jar | grep -q org/apache/logging/log4j/core/lookup/JndiLookup.class]
» Scanning completed. [/tmp/log4j-sFS5k5n2D2/BOOT-INF/lib/log4j-core-2.13.1.jar] does not have the affected class. No clean-up needed.
» Cleaning up working directory [/tmp/log4j-sFS5k5n2D2]
» Cleaned up working directory [/tmp/log4j-sFS5k5n2D2]
» ---
» Remediation successful for CVE-2021-45046.
» Step 2 - Add flag [-Dlog4j2.formatMsgNoLookups=true] to imaging service start scripts for CVE-2021-44228.
» Check if backup of [/opt/vmware/evorack-imaging/imaging-util-scripts/start-parent-imaging-service.sh] exists
» Backup file already exists under /opt/vmware/evorack-imaging/imaging-util-scripts/start-parent-imaging-service.sh.orig
» File [/opt/vmware/evorack-imaging/imaging-util-scripts/start-parent-imaging-service.sh] already contains [-jar -Dserver.port=$VIA_SERVICE_PORT -Dlog4j2.formatMsgNoLookups=true]. No file updates necessary.
» Check if backup of [/opt/vmware/evorack-imaging/imaging-util-scripts/start-imaging-services.sh] exists.
» Backup file already exists under [/opt/vmware/evorack-imaging/imaging-util-scripts/start-imaging-services.sh.orig]
» File [/opt/vmware/evorack-imaging/imaging-util-scripts/start-imaging-services.sh] already contains [-jar -Dserver.port=$SECOND -Dlog4j2.formatMsgNoLookups=true]. No file updates necessary.
» Starting imaging service: systemctl start imaging
» ---
» Remediation successful for CVE-2021-44228.
» Stage 2 - Entering verification stage.
» Step 1 - Verification of remediation for CVE-2021-45046.
» Verifying classpath removal.
» Making sure JndiLookup class [org/apache/logging/log4j/core/lookup/JndiLookup.class] shouldn't exist in imaging jar [/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar]
» Creating a working directory [/tmp/log4j-qoy12HBnND]
» Successfully created working directory [/tmp/log4j-qoy12HBnND] for updating [/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar]
» Looking for [log4j-core-*] in [/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar]
» Executing: [(zipinfo -1 /opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar | grep log4j-core-*) || exit 1]
» Extracting [BOOT-INF/lib/log4j-core-2.13.1.jar] from [/opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar] to temp directory [/tmp/log4j-qoy12HBnND]
» Executing: [unzip /opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar BOOT-INF/lib/log4j-core-2.13.1.jar -d /tmp/log4j-qoy12HBnND || exit 1]
Archive:  /opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar
 extracting: /tmp/log4j-qoy12HBnND/BOOT-INF/lib/log4j-core-2.13.1.jar
» Scanning [/tmp/log4j-qoy12HBnND/BOOT-INF/lib/log4j-core-2.13.1.jar] to check if [org/apache/logging/log4j/core/lookup/JndiLookup.class] exists.
» Executing: [zipinfo -1 /tmp/log4j-qoy12HBnND/BOOT-INF/lib/log4j-core-2.13.1.jar | grep -q org/apache/logging/log4j/core/lookup/JndiLookup.class]
» ---
» Scanning completed.
» Verified [/tmp/log4j-qoy12HBnND/BOOT-INF/lib/log4j-core-2.13.1.jar] does not have the affected class.
» ---
» Cleaning up working directory [/tmp/log4j-qoy12HBnND]
» Cleaned up working directory [/tmp/log4j-qoy12HBnND]
» ---
» Making sure JndiLookup class [org/apache/logging/log4j/core/lookup/JndiLookup.class] shouldn't exist in imaging jar [/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar]
» Creating a working directory [/tmp/log4j-eDdiOOpPJf]
» Successfully created working directory [/tmp/log4j-eDdiOOpPJf] for updating [/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar]
» Looking for [log4j-core-*] in [/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar]
» Executing: [(zipinfo -1 /opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar | grep log4j-core-*) || exit 1]
» Extracting [BOOT-INF/lib/log4j-core-2.13.1.jar] from [/opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar] to temp directory [/tmp/log4j-eDdiOOpPJf]
» Executing: [unzip /opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar BOOT-INF/lib/log4j-core-2.13.1.jar -d /tmp/log4j-eDdiOOpPJf || exit 1]
Archive:  /opt/vmware/evorack-imaging/services/evorack-imaging-services/via.jar
 extracting: /tmp/log4j-eDdiOOpPJf/BOOT-INF/lib/log4j-core-2.13.1.jar
» Scanning [/tmp/log4j-eDdiOOpPJf/BOOT-INF/lib/log4j-core-2.13.1.jar] to check if [org/apache/logging/log4j/core/lookup/JndiLookup.class] exists.
» Executing: [zipinfo -1 /tmp/log4j-eDdiOOpPJf/BOOT-INF/lib/log4j-core-2.13.1.jar | grep -q org/apache/logging/log4j/core/lookup/JndiLookup.class]
» ---
» Scanning completed.
» Verified [/tmp/log4j-eDdiOOpPJf/BOOT-INF/lib/log4j-core-2.13.1.jar] does not have the affected class.
» ---
» Cleaning up working directory [/tmp/log4j-eDdiOOpPJf]
» Cleaned up working directory [/tmp/log4j-eDdiOOpPJf]
» ---
» Verification steps for CVE-2021-45046 completed.
» Step 2 - Verification of remediation for CVE-2021-44228.
» Checking if imaging service is active.
» Executing: [systemctl status imaging || exit 1]
» Monitoring if imaging service is started.
» Imaging service started successfully.
» Checking if imaging jars are updated with [-Dlog4j2.formatMsgNoLookups=true]
» Executing: [ps -ef|grep jar || exit 1]
» Reading the output of the command [ps -ef | grep jar] line by line.
» Scanning if [via] or [evorack-imaging-esxi-service] services is in the following line:
» [root     15767 15736  0 04:21 ?        00:00:00 /etc/alternatives/jre/bin/java -jar -Dserver.port=8081 -Dlog4j2.formatMsgNoLookups=true -Dspring.config.additional-location=/opt/vmware/evorack-imaging/config/via-db-ext.properties /opt/vmware/evorack-imaging/services/evorack-imaging-services/evorack-imaging-esxi-service-0.0.1-SNAPSHOT.jar]
» Verifying the service has the flag [-Dlog4j2.formatMsgNoLookups=true]
» Verified flag [-Dlog4j2.formatMsgNoLookups=true] is present.
» Scanning if [via] or [evorack-imaging-esxi-service] services is in the following line:
» [root     15784 15782  0 04:21 pts/0    00:00:00 grep jar]
» Verification steps for CVE-2021-44228 completed.
» Completed script execution.

SDDC Manager

本回避策はVCF 3.x(VCF 3.10.2, 3.10.2.1と3.10.2.2を除く)と4.xのCloud Builderに適応可能です。

SDDC Managerにvcfユーザーで接続する。

 

suコマンドでrootに昇格

vcf@vcf-sddcmgr [ ~ ]$ su

 

以下のファイルを編集する前にバックアップを取得しておく

/usr/local/vip/bin/start-vip.sh

 

root@vcf-sddcmgr [ /home/vcf ]# cp /usr/local/vip/bin/start-vip.sh /usr/local/vip/bin/start-vip.sh.orig

 

/usr/local/vip/bin/start-vip.shを編集する

root@vcf-sddcmgr [ /home/vcf ]# vi /usr/local/vip/bin/start-vip.sh

Before

nohup $JAVA -jar -Dapp.log.home=/var/log/vmware/vip -server -XX:MaxMetaspaceSize=64m -XX:ParallelGCThreads=2 -Djava.compiler=NONE $1 --vipservice.cross.domain.alloworigin=$(hostname) --server.scheme=http --server.http.port=7900> $2 2>&1 &

After

nohup $JAVA -jar -Dapp.log.home=/var/log/vmware/vip -server -XX:MaxMetaspaceSize=64m -XX:ParallelGCThreads=2 -Djava.compiler=NONE -DLOG4J_FORMAT_MSG_NO_LOOKUPS=true $1 --vipservice.cross.domain.alloworigin=$(hostname) --server.scheme=http --server.http.port=7900> $2 2>&1 &

 

編集が完了したら、以下コマンドでサービスを再起動する

root@vcf-sddcmgr [ /home/vcf ]# systemctl restart vip-manager-i18n.service

以下コマンドを実行しVIP Manager Serviceが- DLOG4J_FORMAT_MSG_NO_LOOKUPS=trueオプションで実行されている事を確認します。

root@vcf-sddcmgr [ /home/vcf ]# systemctl status vip-manager-i18n.service
* vip-manager-i18n.service - VMware Internationalization Service
   Loaded: loaded (/etc/systemd/system/vip-manager-i18n.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2021-12-24 06:14:20 UTC; 3min 13s ago
  Process: 2664 ExecStop=/usr/local/vip/bin/init.sh stop (code=exited, status=0/SUCCESS)
  Process: 2684 ExecStart=/usr/local/vip/bin/init.sh start (code=exited, status=0/SUCCESS)
 Main PID: 2714 (java)
    Tasks: 26 (limit: 19197)
   Memory: 207.8M
   CGroup: /system.slice/vip-manager-i18n.service
           `-2714 /usr/bin/java -jar -Dapp.log.home=/var/log/vmware/vip -server -XX:MaxMetaspaceSize=64m -XX:ParallelGCThreads=2 -Djava.compiler=NONE -DLOG4J_FORMAT_MSG_NO_LOOKUPS=true /usr/local/vip/vip-...

Dec 24 06:14:20 vcf-sddcmgr.vcf.local init.sh[2684]: start VIP service
Dec 24 06:14:20 vcf-sddcmgr.vcf.local init.sh[2684]: execute start function
Dec 24 06:14:20 vcf-sddcmgr.vcf.local init.sh[2684]: executing:  /usr/local/vip/bin/start-vip.sh /usr/local/vip/vip-manager-i18n-common.jar /usr/local/vip/work/vip-runtime.log /usr/local/vip/work
Dec 24 06:14:20 vcf-sddcmgr.vcf.local init.sh[2684]: =====startup vip=====
Dec 24 06:14:20 vcf-sddcmgr.vcf.local init.sh[2684]: found java home:  /etc/alternatives/jre
Dec 24 06:14:20 vcf-sddcmgr.vcf.local init.sh[2684]: run vip from:  /usr/local/vip/vip-manager-i18n-common.jar
Dec 24 06:14:20 vcf-sddcmgr.vcf.local init.sh[2684]: log file:  /var/log/vmware/vip/vip-runtime.log
Dec 24 06:14:20 vcf-sddcmgr.vcf.local init.sh[2684]: vip service is started!
Dec 24 06:14:20 vcf-sddcmgr.vcf.local init.sh[2684]: end of starting VIP service
Dec 24 06:14:20 vcf-sddcmgr.vcf.local systemd[1]: Started VMware Internationalization Service.

CVE-2021-45046のworkaround

本回避策はVCF 3.x(VCF 3.10.2, 3.10.2.1と3.10.2.2を除く)と4.xのCloud Builderに適応可能です。

vip manager i18nサービスを停止する

root@vcf-sddcmgr [ /home/vcf ]# systemctl stop vip-manager-i18n.service

vip-manager-i18n-common.jarの脆弱性の対処

テンポラリのディレクトリを作成する

root@vcf-sddcmgr [ /home/vcf ]# mktemp -d -t log4j-XXXXXXXXXX

出力例

root@vcf-sddcmgr [ /home/vcf ]# mktemp -d -t log4j-XXXXXXXXXX
/tmp/log4j-t01QRNHQSX

 

以下のコマンドを実行しlog4j-coreがvip-manager-i18n-common.jaファイルに存在するかどうか確認します

root@vcf-sddcmgr [ /home/vcf ]# zipinfo -1 "/usr/local/vip/vip-manager-i18n-common.jar" | grep log4j-core-*

 

出力例

root@vcf-sddcmgr [ /home/vcf ]# zipinfo -1 "/usr/local/vip/vip-manager-i18n-common.jar" | grep log4j-core-*
BOOT-INF/lib/log4j-core-2.13.3.jar

 

mktempで作成したディレクトリのパスをコピーし、以下コマンドを実行します。

root@vcf-sddcmgr [ /home/vcf ]# unzip "/usr/local/vip/vip-manager-i18n-common.jar" "BOOT-INF/lib/log4j-core-2.13.3.jar" -d "/tmp/log4j-t01QRNHQSX"

root@vcf-sddcmgr [ /home/vcf ]# zipinfo -1 /tmp/log4j-t01QRNHQSX/BOOT-INF/lib/log4j-core-2.13.3.jar | grep -q "org/apache/logging/log4j/core/lookup/JndiLookup.class"

 

以下のコマンドを実行します。

root@vcf-sddcmgr [ /home/vcf ]# echo $?

戻り値が1の場合は、これ以上の対処が不要なので、vip manager serviceの起動に進む

戻り値が0の場合は、JndiLookup.classが存在するため、続けて以下コマンドを実行する必要があります。

root@vcf-sddcmgr [ /home/vcf ]# zip -q -d "/tmp/log4j-t01QRNHQSX/BOOT-INF/lib/log4j-core-2.13.3.jar" "org/apache/logging/log4j/core/lookup/JndiLookup.class"

 

これにより、log4j-core-2.13.3.jarからJndiLookup.classファイルが削除されます。

変更したlog4j-coreでvia.jarを更新します。

root@vcf-sddcmgr [ /home/vcf ]# cd "/tmp/log4j-t01QRNHQSX/" && zip -ur -0 

 

出力例

root@vcf-sddcmgr [ /home/vcf ]# cd "/tmp/log4j-t01QRNHQSX/" && zip -ur -0 "/usr/local/vip/vip-manager-i18n-common.jar"
updating: BOOT-INF/ (stored 0%)
updating: BOOT-INF/lib/ (stored 0%)
updating: BOOT-INF/lib/log4j-core-2.13.3.jar (stored 0%)

 

vip manager i18nサービスを起動します。

root@vcf-sddcmgr [ /tmp/log4j-t01QRNHQSX ]# systemctl start vip-manager-i18n.service

スクリプトによる回避策の実行(VMware推奨)

スクリプトはCVE-2021-44228とCVE-2021-45046に対処可能

既にCVE-2021-44228のworkaroundを実施済みでスクリプトを実行する事を推奨

 

KBに添付されている「 log4j_vip_v3」というスクリプトファイルをダウンロードし、SDDC Managerの/home/vcf ディレクトリにコピーします。

 

SDDC ManagerにSSHで接続します

suコマンドでrootに昇格

vcf@vcf-sddcmgr [ ~ ]$ su

 

以下のコマンドでスクリプトを実行します

root@vcf-sddcmgr [ /home/vcf ]# bash log4j_vip_v3.sh

 

出力例

root@vcf-sddcmgr [ /home/vcf ]# bash log4j_vip_v3.sh
» Starting to remediate log4j issue in VIP service
» ---
» Stopping VIP service: [systemctl stop vip-manager-i18n.service]
» ---
» Step 1 - Scanning if any of VIP jars [/usr/local/vip/vip-manager-i18n-common.jar /usr/local/vip/vip-manager-i18n-lite-master.0.0.276.jar] exist in system
» Found VIP jar [/usr/local/vip/vip-manager-i18n-common.jar] that needs analysis for existence of JndiLookup class
» Creating a working directory [/tmp/log4j-Q952zriuhN]
» Successfully created working directory [/tmp/log4j-Q952zriuhN] for updating [/usr/local/vip/vip-manager-i18n-common.jar]
» Looking for [log4j-core-*] in [/usr/local/vip/vip-manager-i18n-common.jar]
» Executing: [(zipinfo -1 /usr/local/vip/vip-manager-i18n-common.jar | grep log4j-core-*) || exit 1]
» Extracting [BOOT-INF/lib/log4j-core-2.13.3.jar] from [/usr/local/vip/vip-manager-i18n-common.jar] to temp directory [/tmp/log4j-Q952zriuhN]
» Executing: [unzip /usr/local/vip/vip-manager-i18n-common.jar BOOT-INF/lib/log4j-core-2.13.3.jar -d /tmp/log4j-Q952zriuhN || exit 1]
Archive:  /usr/local/vip/vip-manager-i18n-common.jar
 extracting: /tmp/log4j-Q952zriuhN/BOOT-INF/lib/log4j-core-2.13.3.jar
» Scanning [/tmp/log4j-Q952zriuhN/BOOT-INF/lib/log4j-core-2.13.3.jar] to check if [org/apache/logging/log4j/core/lookup/JndiLookup.class] exists
» Executing: [zipinfo -1 /tmp/log4j-Q952zriuhN/BOOT-INF/lib/log4j-core-2.13.3.jar | grep -q org/apache/logging/log4j/core/lookup/JndiLookup.class]
» Scanning completed. [/tmp/log4j-Q952zriuhN/BOOT-INF/lib/log4j-core-2.13.3.jar] does not have the affected class. No clean-up needed.
» Cleaning up working directory [/tmp/log4j-Q952zriuhN]
» Cleaned up working directory [/tmp/log4j-Q952zriuhN]
» ---
» Step 2 - Update flag [DLOG4J_FORMAT_MSG_NO_LOOKUPS=true] in VIP service start script
» Checking if flag [DLOG4J_FORMAT_MSG_NO_LOOKUPS=true] is set in [/usr/local/vip/bin/start-vip.sh] already
» Executing: [grep -q DLOG4J_FORMAT_MSG_NO_LOOKUPS=true /usr/local/vip/bin/start-vip.sh]
» Flag [DLOG4J_FORMAT_MSG_NO_LOOKUPS=true] is already set in VIP service start file [/usr/local/vip/bin/start-vip.sh]. No further action needed...
» ---
» Starting VIP service: systemctl start vip-manager-i18n.service
» ---
» Step 3 - Entering verification stage
» Verifying classpath removal
» Verifying JndiLookup class [org/apache/logging/log4j/core/lookup/JndiLookup.class] doesn't exist in VIP jar [/usr/local/vip/vip-manager-i18n-common.jar]
» Creating a working directory [/tmp/log4j-YYgTDfZNXJ]
» Successfully created working directory [/tmp/log4j-YYgTDfZNXJ] for updating [/usr/local/vip/vip-manager-i18n-common.jar]
» Looking for [log4j-core-*] in [/usr/local/vip/vip-manager-i18n-common.jar]
» Executing: [(zipinfo -1 /usr/local/vip/vip-manager-i18n-common.jar | grep log4j-core-*) || exit 1]
» Extracting [BOOT-INF/lib/log4j-core-2.13.3.jar] from [/usr/local/vip/vip-manager-i18n-common.jar] to temp directory [/tmp/log4j-YYgTDfZNXJ]
» Executing: [unzip /usr/local/vip/vip-manager-i18n-common.jar BOOT-INF/lib/log4j-core-2.13.3.jar -d /tmp/log4j-YYgTDfZNXJ || exit 1]
Archive:  /usr/local/vip/vip-manager-i18n-common.jar
 extracting: /tmp/log4j-YYgTDfZNXJ/BOOT-INF/lib/log4j-core-2.13.3.jar
» Scanning [/tmp/log4j-YYgTDfZNXJ/BOOT-INF/lib/log4j-core-2.13.3.jar] to check if [org/apache/logging/log4j/core/lookup/JndiLookup.class] exists
» Executing: [zipinfo -1 /tmp/log4j-YYgTDfZNXJ/BOOT-INF/lib/log4j-core-2.13.3.jar | grep -q org/apache/logging/log4j/core/lookup/JndiLookup.class]
» ---
» Scanning completed.
» Verified [/tmp/log4j-YYgTDfZNXJ/BOOT-INF/lib/log4j-core-2.13.3.jar] does not have the affected class.
» ---
» Cleaning up working directory [/tmp/log4j-YYgTDfZNXJ]
» Cleaned up working directory [/tmp/log4j-YYgTDfZNXJ]
» ---
» Verifying [LOG4J_FORMAT_MSG_NO_LOOKUPS=true] is updated in VIP start script
» Executing: [ps -ef | grep /vip/vip-manager-i18n | grep 'DLOG4J_FORMAT_MSG_NO_LOOKUPS=true']
vcf_vip    3750      1  0 06:50 ?        00:00:00 /usr/bin/java -jar -Dapp.log.home=/var/log/vmware/vip -server -XX:MaxMetaspaceSize=64m -XX:ParallelGCThreads=2 -Djava.compiler=NONE -DLOG4J_FORMAT_MSG_NO_LOOKUPS=true /usr/local/vip/vip-manager-i18n-common.jar --vipservice.cross.domain.alloworigin=vcf-sddcmgr.vcf.local --server.scheme=http --server.http.port=7900
» ---
» Verified [LOG4J_FORMAT_MSG_NO_LOOKUPS=true] is updated in VIP start script successfully
» Remediation successful for CVE-2021-44228
» ---
» Script run completed.

その他のVCFコンポーネントの対応については、KB 87095を参照してください。

 

以上です。

vRealize Automation 8.1から8.2へのアップデート

先日デプロイしたvRA8.1環境を8.2へアップグレードします。途中で何度か躓いたので、その備忘録として残しておきます。

 

vRAのアップグレードは主に以下の順序で行います。

  1. vRSLCMを8.1から8.2へアップデート
  2. vRA 8.1から8.2へアップデート

 

それでは、アップグレードを実施します。

"Lifecycle Operations"をクリック

f:id:Kame-chan:20210607093116p:plain

"Settings"をクリック

f:id:Kame-chan:20210607093551p:plain

"System Upgrade"をクリック

f:id:Kame-chan:20210607093750p:plain

今回アップデートにisoファイル(VMware-vLCM-Appliance-8.2.0.23-16982087-updaterepo.iso)を使用しますので、"Select Repository Type" > "CD-ROM"を選択し、"CHECK FOR UPGRADE"をクリック

f:id:Kame-chan:20210607094752p:plain

ターゲットバージョンの8.2.0.23が検知されました。

f:id:Kame-chan:20210607095401p:plain

実行前にvRSLCMのSnapshotを取得しておきましょう。

f:id:Kame-chan:20210607095148p:plain

vCenterのホストネームを入力し、Credentialを選択

"SUBMIT"をクリック

f:id:Kame-chan:20210607095554p:plain

Snapshotのリクエストが完了するのを待ちます。

f:id:Kame-chan:20210607100654p:plain

"UPGRADE"をクリックして実行します。

f:id:Kame-chan:20210607101513p:plain

インストールが実行されています。

f:id:Kame-chan:20210607101653p:plain

アップデート完了すると自動で再起動されますので、完了まで待ちます。

f:id:Kame-chan:20210607101753p:plain

アップデート後のバージョンは以下から確認可能です。

"Lifecycle Operations" > "Settings" > "System Details"

f:id:Kame-chan:20210607102720p:plain

 

vRAをアップデートする前にvIDMを互換性のあるバージョンにアップデートする必要がありますが、私の環境ではvIDMは3.3.2でvRA8.2と互換性がありますので、今回vIDMのアップデートは不要です。 

f:id:Kame-chan:20210608230132p:plain

 

まず事前に、My VMwareからvRAのアップデートisoファイル(Prelude_VA-8.2.0.12959-17018654-updaterepo.iso)をダウンロードします。

ダウンロード後、vRSLCMの"/data/"配下にコピーします。(今回は(/data/binaries/OVAに配置)

 

それでは、vRSLCMからアップグレードしていきます。

"Lifecycle Operations" > "Settings" > "Binary Mapping" 

f:id:Kame-chan:20210607104159p:plain

"ADD BINARIES"をクリック

f:id:Kame-chan:20210607104522p:plain

Location TypeにLocalを選択、Base Locationはisoファイルへのパス(/data/binaries/OVA)を入力し、"ADD"をクリック

f:id:Kame-chan:20210607111149p:plain

躓きポイント①

エラーが検知されました。

f:id:Kame-chan:20210607111642p:plain

 Error Code: LCMSOURCEMAPPING10018
Selected files checksums does not match with any product versions supported by vRealize Lifecycle Manager.
One or more selected files checksums does not match with any product versions supported by vRealize Lifecycle Manager.

 

エラーコードを調べた所、これに合致している模様です。

Solved: vRA 8.1 / LCM 8.1 - error when source mapping vRA ... - VMware Technology Network VMTN

 

vRSLCMへパッチを適用する必要がありますので、vRAのアップデートは一旦中断します。

"Settings > Binary Mapping" > "Patch Binaries"タブ > "ADD PATCH BINARY"

f:id:Kame-chan:20210607112551p:plain

 Request Detailsから進捗を確認し、完了するのを待ちます。

f:id:Kame-chan:20210607112716p:plain

 

"Settings > "Binary Mapping" > "Patch Binaries"タブでvRSLCMのpatchが表示されている事を確認します。

f:id:Kame-chan:20210607112942p:plain

"Settings > "System Patches"

f:id:Kame-chan:20210607113212p:plain

"NEW PATCH"をクリック

f:id:Kame-chan:20210607113319p:plain

"NEXT"をクリック

f:id:Kame-chan:20210607113417p:plain

"INSTALL"

f:id:Kame-chan:20210607113505p:plain

PATCH適用完了まで待ちます。 

f:id:Kame-chan:20210607113652p:plain

バージョンは以下から確認可能です。

"Lifecycle Operations" > "Settings" > "System Details"

f:id:Kame-chan:20210607113824p:plain

vRSLCMのパッチが適用できた所で、再度vRAのアップデートを試します。

f:id:Kame-chan:20210607114017p:plain

PATCH1適用後はPassしました。

f:id:Kame-chan:20210607114345p:plain

"Binary Mapping" > "Product Binaries"に表示されている事を確認します。

f:id:Kame-chan:20210607114836p:plain

それでは、vRAのアップデートを再開します。

"Environments" > "vRAのEnvironment"を選択

f:id:Kame-chan:20210607143514p:plain

"UPGRADE"をクリックします。

f:id:Kame-chan:20210607143740p:plain

vRSLCMの管理外でvRAに対して何かしら変更が加わった場合は、アップデートが失敗する可能性がありますので、アップデート実行前にvRSLCMとインベントリ情報を同期しておきます。

"TRIGGER INVENTORY SYNC"をクリック

f:id:Kame-chan:20210607144044p:plain

"SUBMIT"をクリック

f:id:Kame-chan:20210607144219p:plain

Request DetailsでStatusがSuccessfulになる事を確認します。

f:id:Kame-chan:20210607144353p:plain

それでは、アップグレードに進みます。

"PEOCEED"をクリック

f:id:Kame-chan:20210607144517p:plain

"NEXT"をクリック

f:id:Kame-chan:20210607144809p:plain

"RUN PRECHECK"をクリック

f:id:Kame-chan:20210607144917p:plain

f:id:Kame-chan:20210607145030p:plain

躓きポイント②

Pre-checkでエラーになりました。

エラーの詳細を確認するために、"View"をクリックして見てみます。

f:id:Kame-chan:20210607145543p:plain



f:id:Kame-chan:20210607145629p:plain

VMware KB#79925を参照せよと記載があります。

https://kb.vmware.com/s/article/79925

Disk3上のservices-logsパーティション(/services-logs)の容量が不足している事が原因のようです。容量を拡張する必要がありますので、実施していきます。

vRAが稼働するESXiホストのホストクライアントにアクセスします。

https://ESXi ip or hostname/ui

vRAの仮想アプライアンスを右クリック > "設定の編集" > ハードディスク3を8GB > 25GBに変更します。

f:id:Kame-chan:20210607163032p:plain
以下、Workaroundに記載のあるコマンドを実行します。

 Workaround
To work around this issue in version 8.1 and earlier:
  1. SSH to the appliance.
  2. Run the command: "vracli disk-mgr resize". The resize procedure will start in up to a minute. Progress could be monitored in the /var/log/disk_resize.log. It is expected to fail while resizing file system for logs disk.
  3. Run the command: "/usr/sbin/resize2fs /dev/mapper/logs_vg-services--logs"
  4. Run the command:
  • For vRA/vRO 8.0: "rm /var/run/disk_stats"
  • For vRA/vRO 8.0.1 and 8.1: "rm /var/vmware/prelude/disk-management/disk_stats"
  1.  Run the command  "vracli disk-mgr" to verify if new disk space is visible.

 コマンド実行履歴です。

root@vra [ ~ ]# vracli disk-mgr resize
2021-06-07 07:31:47,891 [INFO] Resetting automatic resize scan schedule...
2021-06-07 07:31:47,891 [INFO] Reset successful. Automatic resize of any device where it is applicable will commence in the next minute.


root@vra [ ~ ]# /usr/sbin/resize2fs /dev/mapper/logs_vg-services--logs
resize2fs 1.43.4 (31-Jan-2017)
Filesystem at /dev/mapper/logs_vg-services--logs is mounted on /services-logs; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mapper/logs_vg-services--logs is now 6552576 (4k) blocks long.

root@vra [ ~ ]# rm /var/vmware/prelude/disk-management/disk_stats

root@vra [ ~ ]# vracli disk-mgr
/dev/sda4(/):
Total size: 47.86GiB
Free: 41.25GiB(86.2%)
Available(for non-superusers): 38.81GiB(81.1%)
/dev/sdb(/data):
Total size: 140.74GiB
Free: 107.41GiB(76.3%)
Available(for non-superusers): 100.21GiB(71.2%)
/dev/sdc(/services-logs):
Total size: 24.54GiB
Free: 24.23GiB(98.7%)
Available(for non-superusers): 23.15GiB(94.3%)
/dev/sdd(/metrics):
Total size: 19.56GiB
Free: 19.31GiB(98.8%)
Available(for non-superusers): 18.31GiB(93.6%)

 "RE-RUN PRECHECK"をクリック

f:id:Kame-chan:20210607163748p:plain

Pre-checkもpassしましたので、"NEXT"をクリック

f:id:Kame-chan:20210607163900p:plain

"SUBMIT"をクリック

f:id:Kame-chan:20210607215125p:plain

Request Detailsから進捗を確認可能

f:id:Kame-chan:20210607215548p:plain

アップグレードが完了しました。私の環境だと約1時間弱程かかりました。

f:id:Kame-chan:20210607232341p:plain

"Environments" > "vRAのEnvironment"からvRAが8.2へアップグレードされいる事を確認可能です。

f:id:Kame-chan:20210607233321p:plain

以上です。

アップデートは一筋縄ではいきませんでしたが、本記事が何かしらのお役に立てれば幸いです。

 

 

vRealize Automationを構築する Part8: vRealize Orchestratorとの連携

今回、vRealize Automation8.1(vRA)を検証する必要がありましたので、デプロイしてテストしてみました。その構築メモになります。

 

vRealize Automationを構築する Part1: vRAのデプロイ

vRealize Automationを構築する Part2: vIDMの設定

vRealize Automationを構築する Part3: Cloud Account & Cloud Zoneの作成

vRealize Automationを構築する Part4: Projectの作成

vRealize Automationを構築する Part5: Flavor Mapping & Image Mappingの作成

vRealize Automationを構築する Part6: Blueprintの展開

vRealize Automationを構築する Part7: Content & Catalogの展開

vRealize Automationを構築する Part8: vRealize Orchestratorとの連携

 

最後は、vRealize Orchestrator(vRO)についてです。

vROで様々なタスクやプロセスを組み合わせたワークフローを作成する事によって、簡単に処理の自動化を行う事が可能になります。また、VMware環境だけでなく、3rd Party製品のプラグインをインストールする事によって、システム全体を自動化するプラットフォームとして利用する事ができます。

 

今回、ワークフローの作成は行いませんが、事前準備として、vCenterとの連携を行います。しかしその過程で、vCenterのインベントリ情報が正しく認識できない事象が発生し、その対処としてvROのプラグインの更新を行いましたので、その手順についても紹介します。

 

それでは、vROとvCenterとの連携を行います。

vRA "My Services" > "Orchestrator"

f:id:Kame-chan:20210606232030p:plain

 

 

"Workflows" > Filterで"Add a vcenter"で検索

f:id:Kame-chan:20210608134623p:plain

"Set the vCenter Server instance properties"タブで必要情報を入力

f:id:Kame-chan:20210608134753p:plain

  • vCenterのIP or ホストネーム
  • HTTPSポート番号
  •  vCenter Serverインスタンスへの接続に使用するSDKの場所
  • 証明書の警告を無視しますか? のチェックはOn

 

"Set the connection properties"タブで必要情報を入力

f:id:Kame-chan:20210608140226p:plain

  • Do you want to use a session per user method~ のチェックはOffにします。
  • vCenter Serverインスタンスへの接続に使用するユーザー名とパスワード

"Additional Endpoints"は"Set the vCenter Server instance properties"タブで入力した

vCenterのIP or ホストネームが自動で入力されます。

f:id:Kame-chan:20210608140700p:plain

"RUN"をクリックし、Statusが"Completed"になる事を確認します。

f:id:Kame-chan:20210608140906p:plain

vCenterと正しく連携できたか確認してみます。
"Administration" > "Inventory"

f:id:Kame-chan:20210606145717p:plain

正しくvCenterと連携ができていません。

この状態ですと、vROからvCenterに対してワークフローが実行できません。

プラグインのバージョンが古いと、このような状態になる場合がありますので、まずは最新バージョンのプラグインをインストールします。

 

vROの管理インターフェースにログインします。

https://"vRA FQDN"/vco-controlcenter

rootユーザーでログイン

f:id:Kame-chan:20210606150259p:plain

"プラグインを管理"をクリック

f:id:Kame-chan:20210606150800p:plain

プラグインのバージョンを確認します。

現在のバージョンは6.5.0.15718902であることがわかります。

f:id:Kame-chan:20210606151533p:plain

 

vRO vCenter Server plug-in for vSphere 7.0 service... - VMware Technology Network VMTN

Version7.0.0-18048864がリリースされていましたので、こちらをインストールします。

Version 7.0.0-18048864 (built 2021-05-19)

  • Added support for vSphere 7.0 API. Now plugin exposes scripting SDK with vSphere 7.0 API. Support for vSphere 6.7 API is included.

"Attachments"から、o11nplugin-vsphere-7.0.0-18048864.vmoapp.zipをローカルにダウンロードします。

f:id:Kame-chan:20210606152059p:plain

ダウンロードが完了したら、zipファイルを解凍します。

フォルダの中に"o11nplugin-vsphere.dar"というファイルを使用します。

f:id:Kame-chan:20210606233329p:plain

"参照"から選択

f:id:Kame-chan:20210606152430p:plain

"アップロード"をクリック

f:id:Kame-chan:20210606155837p:plain

"インストール"をクリック

f:id:Kame-chan:20210606155950p:plain

プラグインのインストールが実行されました。

f:id:Kame-chan:20210606160032p:plain

数分経過後、再度プラグインのバージョン画面を確認します。

f:id:Kame-chan:20210606161631p:plain

7.0.0-18048864に更新されています。

 

vCenterのプラグインの更新ができましたので、正しく表示されていなかったインベントリの画面を確認します。正しく表示されていますね。

f:id:Kame-chan:20210606161928p:plain

もし、プラグイン更新後も上記のように正しく表示されない場合は、"Workflows" > Filterにて"Update a vcenter"などで検索し、"RUN"をクリック

f:id:Kame-chan:20210606225546p:plain

 

"Update a vCenter Server instance"が"Completed"のStatusになる事を確認します。

f:id:Kame-chan:20210606230931p:plain

再度"Administration" > "Inventory"でvCenterのインベントリ情報を確認します。

 

この後、ワークフローを作成していく流れですが、今後ワークフローの検証を行った際に記載していく予定です。

 

以上です。

vRealize Automationを構築する Part7: Content & Catalogの展開

今回、vRealize Automation8.1(vRA)を検証する必要がありましたので、デプロイしてテストしてみました。その構築メモになります。

 

vRealize Automationを構築する Part1: vRAのデプロイ

vRealize Automationを構築する Part2: vIDMの設定

vRealize Automationを構築する Part3: Cloud Account & Cloud Zoneの作成

vRealize Automationを構築する Part4: Projectの作成

vRealize Automationを構築する Part5: Flavor Mapping & Image Mappingの作成

vRealize Automationを構築する Part6: Blueprintの展開

vRealize Automationを構築する Part7: Content & Catalogの展開

vRealize Automationを構築する Part8: vRealize Orchestratorとの連携

 

今回は作成したBlueprintをユーザーに公開します。作成したBlueprintをユーザーに公開するにはService Brokerを設定します。

 

"My Services" > "Service Broker"

f:id:Kame-chan:20210530220641p:plain

"Content&Policies" > "Content Sources" > "NEW"

f:id:Kame-chan:20210530220905p:plain

"Cloud Assembly Blueprint"を選択します。

f:id:Kame-chan:20210530221037p:plain

名前とSource Projectを選択し、"VALIDATE"をクリック

f:id:Kame-chan:20210530221540p:plain

"Content source validated successfully. 0 items found." となってしまってます。

通常であれば、前回作成したBlueprintが1 itemとして表示されるはずです。

 

"Cloud Assembly" > "Design" > "VERSION HISTORY"を見てみます。

f:id:Kame-chan:20210530222743p:plain

作成したv1.0の"RELEASE"をクリックしてみます。

f:id:Kame-chan:20210530222947p:plain

"RELEASE"をクリック

f:id:Kame-chan:20210530223016p:plain

v1.0がリリースされました。

f:id:Kame-chan:20210530223054p:plain

再度Validationを実施してみます。

今度は"1 items found"になっていますので、"CREATE & IMPORT"をクリック

f:id:Kame-chan:20210530223309p:plain

作成できました。

f:id:Kame-chan:20210530223421p:plain

"Content Sharing"をクリックし、Projectを指定、"ADD ITEMS"

f:id:Kame-chan:20210530234322p:plain

"Win2016"のチェックボックスにチェックを入れ"SAVE"をクリック

f:id:Kame-chan:20210530234610p:plain

f:id:Kame-chan:20210530234610p:plain

"Content"セクションにtemplateが表示されます。

f:id:Kame-chan:20210530235241p:plain

"Content"セクションには、インポートしたすべてのblueprintとtemplateが表示されます。また、このページの全ての項目は"Catalog"に表示されます。

"Catalog"をクリックするとユーザーがリクエスト可能な項目が表示されます。

f:id:Kame-chan:20210530235538p:plain

適切なアクセス権限を付与されているユーザーは、このページから要求可能です。

"REQUEST" > "SUBMIT"をクリックします。

f:id:Kame-chan:20210530235903p:plain

vSphere Clientからも確認可能です。

f:id:Kame-chan:20210531092050p:plain

DeploymentのTaskがも完了しました。

f:id:Kame-chan:20210531091956p:plain

 

一度リクエストが送信されると、全て自動でWindows Serverを展開できます。

 

以上です。

vRealize Automationを構築する Part6: Blueprintの展開

今回、vRealize Automation8.1(vRA)を検証する必要がありましたので、デプロイしてテストしてみました。その構築メモになります。

 

vRealize Automationを構築する Part1: vRAのデプロイ

vRealize Automationを構築する Part2: vIDMの設定

vRealize Automationを構築する Part3: Cloud Account & Cloud Zoneの作成

vRealize Automationを構築する Part4: Projectの作成

vRealize Automationを構築する Part5: Flavor Mapping & Image Mappingの作成

vRealize Automationを構築する Part6: Blueprintの展開

vRealize Automationを構築する Part7: Content & Catalogの展開

vRealize Automationを構築する Part8: vRealize Orchestratorとの連携

 

Blueprintは仮想マシン、ネットワーク、ストレージ、セキュリティグループなどのリソースをキャンバス上に配置し、パラメータを指定、展開していきます。今回は仮想マシンを1台デプロイする単純なBlueprintを作成して動作を見ていきます。

 

"Cloud Assembly" > "Design" > "Blueprints" > "NEW"

f:id:Kame-chan:20210529151828p:plain

Blueprintの名前とProject名を指定し、"CREATE"

f:id:Kame-chan:20210529152110p:plain

中央のドットがある部分はキャンバスと呼ばれます。

左側にリソースタイプが表示され、右側に選択したリソースのプロパティが表示されます。

f:id:Kame-chan:20210529152912p:plainResource Type > "vSphere" > "Machine" をキャンバスにドラッグします。

f:id:Kame-chan:20210529153501p:plain

vSphere Machine用のNetworkも必要です。

"vSphere" > "Network" をキャンバスにドラッグします。

f:id:Kame-chan:20210529154431p:plain

キャンバス上にvSphere MachineとNetworkを追加しましたので、2つのリソースを接続します。

f:id:Kame-chan:20210529154807p:plain

Machine Resourceを選択し"Properties"タブから"Win2016"にリネームしました。

Imageには、Image Mappingで作成したものを指定しました。

f:id:Kame-chan:20210529160619p:plain

"TEST" を実行し、"Successful"が表示される事を確認します。

f:id:Kame-chan:20210529194447p:plain

デプロイする前に現在のVersionを"v1.0"として管理しておきます。f:id:Kame-chan:20210529194633p:plain

 "DEPLOY"を実行します

f:id:Kame-chan:20210529194802p:plain

デプロイ中の進捗状況は"History"から確認可能です。f:id:Kame-chan:20210529204002p:plain

 vSphere上でもデプロイされている事を確認できます。

f:id:Kame-chan:20210529223916p:plain

 以上でBlueprintの展開は終了です。

ここで作成したBlueprintをCatalogに展開する事によって、ユーザーはいつでもWindows Serverの仮想マシンを自動でデプロイする事ができます。



 

 

 

vRealize Automationを構築する Part5: Flavor Mapping & Image Mappingの作成

今回、vRealize Automation8.1(vRA)を検証する必要がありましたので、デプロイしてテストしてみました。その構築メモになります。

 

vRealize Automationを構築する Part1: vRAのデプロイ

vRealize Automationを構築する Part2: vIDMの設定

vRealize Automationを構築する Part3: Cloud Account & Cloud Zoneの作成

vRealize Automationを構築する Part4: Projectの作成

vRealize Automationを構築する Part5: Flavor Mapping & Image Mappingの作成

vRealize Automationを構築する Part6: Blueprintの展開

vRealize Automationを構築する Part7: Content & Catalogの展開

vRealize Automationを構築する Part8: vRealize Orchestratorとの連携

 

 今回は、Flavor MappingとImage Mappingを作成していきます。

 

Flavor Mappingは、特定のクラウドアカウント/リージョンに対するリソースのサイズを定義します。例として以下のようにサイズを定義しBlueprintの作成時に使用します。

  • Small (CPU#1/MEM#2GB)
  • Medium (CPU#2/MEM#4GB)
  • Large (CPU#4/MEM#8GB)

"Infrastructure" > "Configure" >  "Flavor Mappings" > "NEW FLAVOR MAPPING"をクリック

f:id:Kame-chan:20210528094131p:plain

Flavor nameを入力

Cloud Accountを選択し、CPUとMemoryの値を入力しCREATE

f:id:Kame-chan:20210528094055p:plain

Flavor Mappingが作成できました。

f:id:Kame-chan:20210528094651p:plain

次はImage Mappingを作成します。

Image Mappingは、OSのテンプレートです。Cloud Accountで用意されているVMテンプレートをImgetとして定義します。

 

"Infrastructure" > "Configure" >  "Image Mappings" > "NEW Image MAPPING"をクリック

f:id:Kame-chan:20210528094959p:plain

Image nameを入力

Cloud Accountを選択し、ImageのためのTemplateを選択します。

今回はWindows Server 2016のTemplateを用意しましたので、そちらを選択します。

f:id:Kame-chan:20210528095130p:plain

Image Mappingが作成できました。

f:id:Kame-chan:20210528095530p:plain

次は、Network Profileを作成します。

Network Profileは、デプロイするVMが接続するネットワークを定義します。

 

"Infrastructure" > "Configure" >  "Network Profiles" > "NEW NETWORK PROFILE"をクリック

f:id:Kame-chan:20210528120309p:plain

"Summary"タブからCloud Accountを指定し、Network Profile名を入力します。

f:id:Kame-chan:20210528131557p:plain

"Networks"タブから"ADD NETWORK"をクリック

f:id:Kame-chan:20210528141256p:plain

選択したCloud Account上の全てのネットワークが表示されます。

VMをデプロイした際に所属させるネットワークを指定します。

f:id:Kame-chan:20210528141658p:plain

"CREATE"をクリックして作成します。

f:id:Kame-chan:20210528141950p:plain

Network Profileが作成できました。

f:id:Kame-chan:20210528142810p:plain

次は作成したNetwork ProfileのIPレンジを指定してみます。

"Infrastructure" > "Resources" >  "Networks" > 先ほど選択したネットワークをクリックします。f:id:Kame-chan:20210528143432p:plain

 IPアドレス(CIDR形式)/Default Gateway/DNSの情報を入力

"Default for Zone"にチェックを入れて、"SAVE"をクリックします。

f:id:Kame-chan:20210528144137p:plain

IP Rangeを指定します。

"Infrastructure" > "Resources" >  "Networks" > "IP Ranges" > "NEW IP RANGE"

f:id:Kame-chan:20210528144408p:plain

先ほどCIDER形式のIPアドレスやDefault Gatewayなどを指定したネットワークがドロップダウンで表示されます。

f:id:Kame-chan:20210528144546p:plain

IP Rangeに指定するStart IPとEnd IPを入力して、"ADD"をクリックします。

f:id:Kame-chan:20210528144756p:plain

IP Rangeが指定できました。このIPはこれからデプロイするVM用に使用されます。

f:id:Kame-chan:20210528144951p:plain

最後はStorage Profilewを作成します。

Storage Profileは、デプロイするVMに適応するStorage PolicyやDiskのプロビジョニングタイプ(Thin or Thick)などを定義します。

 

"Infrastructure" > "Configure" >  "Storage Profiles" > "NEW STORAGE PROFILE"

f:id:Kame-chan:20210528145504p:plain

Cloud AccountやStorage Profile名を入力しその他は環境に合わせて指定します。

"CREATE"をクリック
f:id:Kame-chan:20210528145845p:plain

Storage Profileが作成できました。

f:id:Kame-chan:20210528150103p:plain

ここまでで、Flavor Mapping、Image Mapping、Network Profile、Storage Profileを作成しました。

 

以上です。

 

vRealize Automationを構築する Part4: Projectの作成

今回、vRealize Automation8.1(vRA)を検証する必要がありましたので、デプロイしてテストしてみました。その構築メモになります。

 

vRealize Automationを構築する Part1: vRAのデプロイ

vRealize Automationを構築する Part2: vIDMの設定

vRealize Automationを構築する Part3: Cloud Account & Cloud Zoneの作成

vRealize Automationを構築する Part4: Projectの作成

vRealize Automationを構築する Part5: Flavor Mapping & Image Mappingの作成

vRealize Automationを構築する Part6: Blueprintの展開

vRealize Automationを構築する Part7: Content & Catalogの展開

vRealize Automationを構築する Part8: vRealize Orchestratorとの連携

 

今回はProjectを作成です。

前回作成したCloud ZoneとユーザーをこのProjectに割り当てます。

 

"Infrastructure" > "Configure" > "Projects" > "New Project"をクリック

SummaryタブのProject名を入力します。

f:id:Kame-chan:20210527122308p:plain

"Users"タブをクリックし、ユーザー/グループを追加します。

f:id:Kame-chan:20210527122752p:plain

Add Usersをクリックし、追加するユーザーを選択します。

f:id:Kame-chan:20210527122830p:plain

 "Provisioning"タブから"ADD CLOUD ZONE"でCloud Zoneを選択します。

f:id:Kame-chan:20210527123337p:plain

作成したCloud Zoneを選択し、その他のパラメータも確認の上、"ADD"をクリックします。

f:id:Kame-chan:20210527123427p:plain

次は"Custom Naming" > "Template"セクションに移動します。

ここでは、vRAを介してデプロイされるVM名の名前付けパターン/規則を定義します。

f:id:Kame-chan:20210527125650p:plain

その他はデフォルト設定のまま、"CREATE"をクリックします。

Projectが作成できました。

f:id:Kame-chan:20210527125812p:plain

ここまでで、Cloud Account、Cloud ZoneとProjectが作成できました。

以上です。