Confidential Computingを実現するHyper Protect Virtual Server for VPCを試してみた

# 1. はじめに

IBM Cloudの`Hyper Protect xxx`というサービスは、全てLinuxONE(IBM Z環境)を利用したConfidential Computingのクラウドサービスである。これに加えて、Intel SGXを使ったx86のConfidential ComputingもIBM Cloud上で提供されている。今回、新たにHyper Protect Virtual Server for VPCというConfidential Computingを実現するコンテナの実行環境が最近提供開始されたので試してみた。


参考情報

- https://cloud.ibm.com/docs/vpc?topic=vpc-about-se
- https://cloud.ibm.com/docs/vpc?topic=vpc-about-attestation
- https://cloud.ibm.com/docs/vpc?topic=vpc-about-contract_se
- https://cloud.ibm.com/docs/vpc?topic=vpc-cert_validate
- https://mediacenter.ibm.com/media/IBM+Cloud+Hyper+Protect+Virtual+Server+for+VPC/1_mj9ksaob
- https://mediacenter.ibm.com/media/Confidential+Computing+for+a+financial+transaction+using+Hyper+Protect+Virtual+Server+for+VPC/1_vv3j2oo6
- https://www.imagazine.co.jp/tec-j-confidential-computing2023/

# 2. Confidential Computingとは（概略）

- `data at rest`（ストレージなどへの保管中のデータ）
- `data in transit`（ストレージからコンピューターへの転送中のデータ。もしくはコンピューター間の転送中のデータ）

のそれぞれに対して暗号化する手段は一般的に確立されている。一方で、

- `data in use`（処理中のデータ）

はコンピューター上のメモリ上に展開されており、一般的に暗号化されていない。そのため、例えば

- ソフトウエア脆弱性による権限昇格攻撃
- OSやハイパーバイザーによるメモリダンプ
- コールドブート攻撃
- システム管理者によるメモリ内容の取得

などに対する脆弱性が考えられるため、この「処理中のデータ」に対してもメモリを暗号化するとか、何かしらのメモリ保護機能を提供することで安全性を確保しようというのがConfidential Computingである。
[Confidential Computing Consortium](https://confidentialcomputing.io/)による定義は以下の通り。

> Confidential Computing protects data in use by performing computation in a hardware-based Trusted Execution Environment. These secure and isolated environments prevent unauthorized access or modification of applications and data while in use, thereby increasing the security assurances for organizations that manage sensitive and regulated data.
>Today, data is often encrypted at rest in storage and in transit across the network, but not while in use in memory. Additionally, the ability to protect data and code while it is in use is limited in conventional computing infrastructure. Organizations that handle sensitive data such as Personally Identifiable Information (PII), financial data, or health information need to mitigate threats that target the confidentiality and integrity of either the application or the data in system memory.


Confidential Computingは、一般的にはHW機能でメモリ上に`TEE(Trusted Execution Environment)`とか`Secure Encrave`と呼ばれる隔離された環境を作成することで実現される。ただ、TEE/Secure Encraveは隔離された環境を提供するだけであり、この隔離された環境をどうやって保護するか？（例えば鍵をどこにどうやって保管するのか？署名はどうするか？どうやってホストを信頼する仕組みを作るのか？）なども、色々やり方がありプラットフォームによって異なる。LinuxONE(IBM Z環境)では[IBM Secure Execution for Linux](https://www.ibm.com/docs/en/linux-on-systems?topic=virtualization-introducing-secure-execution-linux)というメモリ保護機構が使われており、`Ultravisor`というコンポーネントがKVMの代わりにsensitiveな作業を実施している。例えばメモリ上のpageのswap outをする時にはHypervisorがそのpageにアクセスする前に、`Ultravisor`がそのハッシュ値を記録して暗号化を実施しており、再度そのpageがメモリ上に読み込まれる際には復号処理と改ざんがされていないかどうかをハッシュ値と突き合わせて検証する、などの作業を行なっている。そのため、Hypervisorは暗号化されたpageにしかアクセスできないことが保証される。

https://www.ibm.com/docs/en/linux-on-systems?topic=linux-components
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/ab1ef381-a532-f081-a51d-84e7898f4b17.png)


なお、以下の記事は実際にメモリ上のデータを覗き見たりを試してみており、管理者であればこんなに簡単にメモリ上のデータを読み取れるのだということがわかるので、Confidential Computing採用の動機を理解する上で、一読をお勧めする。
[体験 Confidential Computing -1 － ビットコイン・ウォレット を乗っ取って Confidential Computing の必要性を体験する](https://qiita.com/6onoda/items/1d51c930f166d348711d)

# 3. Hyper Protect Virutual Server for VPCとは

以下に主な特徴や注意点を記す。

- LinuxONE(IBM Z環境)の[IBM Secure Execution for Linux](https://www.ibm.com/docs/en/linux-on-systems?topic=virtualization-introducing-secure-execution-linux)の技術を利用してConfidential Computingを実現している。
- VPC上のVSIを注文する際に、`Hyper Protect Container Runtime Image`と呼ばれるOSイメージを利用する。このOSイメージを使ったVSIが`Hyper Protect Virtual Server(HPVS) for VPC`である。HPVS for VPCは、LinuxONE上のKVM guestであり、VPCの各種機能(security groupとかLoad BalancerとかSnapshotとか）の恩恵を受けることができる。元となるイメージの名称が`Hyper Protect Container Runtime Image`であることから分かるように、HPVS for VPCはコンテナのランタイム環境を提供するVSIであり、このVSI上でアプリケーションコンテナを実行する。
- HPVS for VPCにはSSHでログインすることはできない。よって注文時にSSH Keyを指定する必要はない（指定しても意味がない）。HPVS for VPCではSSHは使えないし、cloud-initによって提供されたSSH keyがあっても利用されない（無視される）。
- x86環境のVSI for VPCでも、カスタムスクリプトを実行するために`User data`という入力画面があったが、HPVS for VPCでもここに`Contract`と呼ばれるyamlを**必ず指定する**。この`Contract`に起動するべきコンテナー情報などを含める。逆にHPVS for VPCの肝は、この`Contract`をどのように構成するかに依存すると言って良い。Contractについてはサンプル込みで後述するが、逆に`User data`に何も設定しなかったり（つまり`Contract`が空だったり）、その内容が不適切だった場合（例えば文法エラーとか認証に失敗したとか署名の検証に失敗したとか）は、HPVS for VPCはプロビジョニング後に自動的に停止する。
- ログは、serial consoleと`IBM Cloud Log Analysis with LogDNA`から確認できる。
    - `IBM Cloud Log Analysis with LogDNA`は必ず事前に購入しておく必要がある。`Contract`の中に、`IBM Cloud Log Analysis with LogDNA`へのendpoint情報を含める必要があり、`IBM Cloud Log Analysis with LogDNA`への接続に失敗するとHPVS for VPCはしばらく経つと自動的に停止してしまう。
    - HPVS for VPCのログやアプリケーション・コンテナの標準出力・エラー出力は`IBM Cloud Log Analysis with LogDNA`に出力される。
    - `IBM Cloud Log Analysis with LogDNA`自体の構成に失敗した時は、そもそもログ転送されないので、serial consoleを確認する必要がある。
- rootファイルシステムはLUKSで暗号化される。data volumeを付けた時は、ユーザーの指定したseedでdata volumeもLUKSで暗号化される。



# 4. Contractの構成

https://cloud.ibm.com/docs/vpc?topic=vpc-about-contract_se に記載がある。このyamlファイルを、VSI注文時の`User data`に入力する。

- `IBM Cloud Log Analysis with LogDNA`などの設定を実行する`env`セクションと、実際にアプリケーションコンテナー情報を含める`workload`セクションが必須である。
- アプリケーションのワークロードは、Docker Composeの書式に従って記載し、`docker-compose.yml`もしくは`docker-compose.yaml`に記述する。このyamlファイルを、tgzにアーカイブしてbase64でエンコードしたものを`workload`セクションの`compose.archive`に記述する。

```shell:tgzにアーカイブしてbase64にエンコードするスクリプト例
$ tar -czf - docker-compose.yml |base64 -w0
```

- `Contract`はplain textのまま`User data`に入力もできるが、`Contract`に暗号化したり署名をすることでよりセキュリティーを高めるオプションも提供されている。

以下に、`docker-compose.yml`を作成する際の注意点を記載する。

- Imageはdigestで指定するか、digest利用しない場合はDCT(Docker Content Trust)を`images`サブセクションに設定する必要がある。
- （docsにはまだ明示的に記載はされていないが、）DockerFileを指定してイメージをbuildすることはできない。
- Macでtarコマンドを実施するとリソースフォークファイル(`._`で始まるファイル）を作成してしまい、それをz/Linuxで展開する際に、そのyamlファイルを最初に読み込んでエラーになってしまう。MacはデフォルトでBSD方式のtarを使っているのもその一因なのだが、z/Linux上でこのtgzが展開されることを考えると、一番無難なのは(x86上でもいいので）Linux上でアーカイブすることだと思われる。
- 永続データを保管するために、VPCではboot volume以外に1つだけdata volumeを作成してアタッチすることができる。
    - data volumeを作るときは、envセクションおよびworkloadセクションでそれぞれseedの指定が必須。（envセクションとworkloadセクションはそれぞれ別のペルソナを想定しているためだと思われる）
    - data volume上のファイルシステムも、ここで指定したseedを利用してLUKSで暗号化される。



# 5. docker-compose.ymlとContractのサンプル


- `IBM Cloud Log Analysis with LogDNA`のIngestionKeyは、`API Keys`の画面から確認できる。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/c205dcd1-5e4b-ace8-8e2a-5f54743a4f5f.png)
- `IBM Cloud Log Analysis with LogDNA`のendpoint情報は以下で確認できる。public networkを使う理由はないだろうから、`syslog-a.private.jp-tok.logging.cloud.ibm.com`のようなprivate endpointを利用した方が良いだろう。
https://cloud.ibm.com/docs/log-analysis?topic=log-analysis-endpoints

## 5-1 Nginx

```yaml:docker-compose.yml
services:
  nginx:
    image: docker.io/library/nginx@sha256:cbb7f985ed5ce8920c0c36e5724239cfaebeaafb68d611ca32047442364f1cfa
    ports:
    - 80:80
    - 443:443
```
```yaml:contract.yml
env: |
  type: env
  logging:
    logDNA:
      hostname: syslog-a.private.jp-tok.logging.cloud.ibm.com
      ingestionKey: xxxxxxxxxxxxxxxxxxxxxx
      port: 6514
workload: |
  type: workload
  compose:
    archive: H4sIAJ64DWMAA+3SwW7CMAwG4J55irwA4CRO0vbEq6Rp2lWjFCUwrW9PKdym3RDb4f+kyI5syVaUdgqfMW3DNJ6nHHfzeCxejhaW+R6lM7TeSfEjrqkuJCvnWErjdEGSiU0h6PWr/HTNF5+EKPLs87X1v/b1foz5HQu9V47pawgx1xshTv1w+r4nQgyj72Mt2vV37IZpfxya5NO8X3sO+cMrY+vQNK6rShNbE2JZKQoUtI3GKVa6Cp2PTfS+a2zZWimD14rY8VKz3MmlvI46T+mSH1O3oqS6pGfOrOvlbP76iQAAAAAAAAAAAAAAAAAAAAAAAP6lG3N/95kAKAAA
```



## 5-2 Wordpress

2023/03/15 注: 複数コンテナーを記述しても稼働はするようだが、IBM Cloudとしてはenclaveで単一コンテナーのみを稼働させることを推奨しているとのこと（docsも修正予定）。
このプロビジョニングの際には、data volumeが必要なので、注文時にdata volumeも追加しておくこと。

```yaml:docker-compose.yml
services:
  db:
    image: docker.io/library/mariadb@sha256:12097ab474fe2ee789b394e1e8a6b489f2ca4ce5ebc8904a14cfddeedb17b8e5
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - /mnt/data/var/lib/mysql:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060
  wordpress:
    image: docker.io/library/wordpress@sha256:d305e2070c27ad875d51b21ffa5841f64c88720ca7864714b0ed8730f182b159
    ports:
      - 80:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress
volumes:
  db_data:
```
```yaml:contract.yml
env: |
  type: env
  logging:
    logDNA:
      hostname: syslog-a.private.jp-tok.logging.cloud.ibm.com
      ingestionKey: xxxxxxxxxxxxxxxxxxxxxx
      port: 6514
  volumes:
     data1:
       seed: envseed
workload: |
  type: workload
  compose:
    archive: H4sIALetDmMAA+3Tz2+bMBQH8Jz7V3DriWKDAYMUaakSaYd16UKmaafoGT9SNH5kGNLlvx9QNW3WRdWkqru8zwFk88V+2EbX6Q9s7LQud7XBq0NZTN4c6wVCDHce+mxsM1c83Ps+4XmT/sI83w3GHBdMeBOLvX0pL3WmhcayJuYAptNwNreFEs17FPS+DDb7PEUTX1iWVsPVsvISthhbejwaV3ntFLlqoDk4JTQ5aPXB3IHrBzF3WRSCEqHI0EUMZaS8SCBHCYESMsrcFESKPqpURkwAF2mmNaJWPFQS/XGy/uSVUOnYurRtjRl0RWtD195h1eYptHld2bui2+bVtDyYn8Wm6vv2uNmBMfd1oy/HQfZ10ZUPHzGwLaesWkdDC84emqF+Z3w7Pm2O8QaHE9DGFhT3cDBjH1b7vKmrsi/iacyb78mXT5vVcrne3M6S5NtyNZ+ausShjF0/ivkjOZ+tZ9ezZDE9F/iaLFZnHx6nOA3gr+E/fSrK81hw0mB96/jKK/t5zD3uqPaYjy4LWeqGoGXoa58rl2cZ+FLwLBCplKHLUghlIEIuFMM+5bGMS1dxPxqn29VN+2wrJIsl+7eVHr77drVIks38evNxmaynWv394ZklPMmcWckXuc+zm+d7dfG/f01CCCGEEEIIIYQQQgghhBBCCCGEEEJe9RsnhEeOACgAAA==
  volumes:
    data1:
      filesystem: ext4
      mount: /mnt/data
      seed: worloadseed
```



## 5-3 /var/hyperprotectを参照するbashコンテナー

```yaml:docker-compose.yml
services:
  myscript:
    image: docker.io/library/bash@sha256:c24849c84b5500606cea237ab6614c09688aaddf27fb74f84747ad3366fbdad7
    volumes:
      - /var/hyperprotect:/var/hyperprotect
      - /boot/root.tar.gz:/boot/root.tar.gz
    command: >
      sh -c '
         ls -lR /var/hyperprotect
         find /var/hyperprotect -type f -exec sh -c "echo ------------; sha256sum {} ; base64 -w0 {} ; echo ; cat {}"   \;
         sha256sum /boot/root.tar.gz
      '
```
```yaml:contract.yml
env: |
  type: env
  logging:
    logDNA:
      hostname: syslog-a.private.jp-tok.logging.cloud.ibm.com
      ingestionKey: xxxxxxxxxxxxxxxxxxxxxx
      port: 6514
workload: |
  type: workload
  compose:
    archive: H4sIANrTBWMAA+3SwW6jMBAGYM59ilEvPREMGEyJtOoz9LwXY5uAFurIJmlpte++Dskqldi9Venl/w6YsWYYY1tb9cu4WNlxb73ZzOMQfTkWlJyfxlQUbIlZxs9jIFIRpTxnaZqKvBARSznjWUTs65eydvCTdESRn6U/aPnfvJ0cjb/Fgm7LG3fslfH1HdE4e+X6/XR6J+pHuTM16eWCbHqbDH3jpJuTRvruyXcyK8paZbzij6riTVGEQ2alMjLLhWzKMuWKPZZVJaXWbSbaRvC24oILqfO8LNtGSy2WTkc7HMbzEk5iSo7SJd28N27v7GTUVK9mrrmNtVPiwmMTDnKze69XM0tuuOGjfNE1/biU+o5iRQ+XKBg8xcPzujldU9r+Rf8jIZ5CRC3F5s2oy4fvjeosxZ9s6bxp/jDSx2/aUthIU3KKX9k5Xiq2pOQU4vvQ7uf2U+9r8eoH/2Y93H33dQIAAAAAAAAAAAAAAAAAAAAAgBv6A6Yt4RwAKAAA
```
 

# 6. HPVS for VPCをプロビジョニングする

以下の例はwordpressの場合。コンテナーイメージはdocker.ioに存在するので、インターネットアクセスができるように、プロビジョニング先のsubnetは事前にpublic gatewayに紐づけておく。

1. Architectureとして`IBM Z, LinuxONE`を選択し、`Confidential Computing`を有効にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/976476ae-dd4f-83f0-7fcb-3b019bc59d3a.png)
2. Imageとして`Hyper Protect`を選択する。SSH Keysは何も選択しなくて良い。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/e058faee-e8cd-0c67-0aec-13ac34847ed2.png)
3. `User data`フィールドに、Contract情報を入力する。今回は、5-2で例示したwordpressのContract情報を入力した。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/e5a4df7a-40c1-a291-f67b-ec596c72107d.png)
4. 永続ストレージが必要なので、data volumeを追加。また、networkは(docker imageを入手するために）public gatewayに紐づいているsubnetを選択。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/e8b1748f-4ddf-58d2-1aa3-dd4f252e0024.png)
5. 結果、無事プロビジョニングされた。HPVS for VPCのIPアドレスにアクセスすると、確かにwordpressが起動している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/630021bf-debb-b2bf-ed37-1dcc0fbe5f3d.png)
6. Serial Consoleへのログ出力。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/bf13fd1b-1406-f47c-3caa-84dbacd446f0.png)
7. `IBM Cloud Log Analysis with LogDNA`へのログ出力。出力されたログを一部記載しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/80afd065-97df-c7f5-b42d-e6175a7f978d.png)


```txt:KVMやs390xアーキテクチャーが利用されている
Aug 31 09:51:58 syasuda-hpvs46 kernel notice Linux version 5.4.0-113-generic (buildd@bos02-s390x-015) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #127-Ubuntu SMP Wed May 18 14:30:54 UTC 2022 (Ubuntu 5.4.0-113.127-generic 5.4.181)
Aug 31 09:51:58 syasuda-hpvs46 kernel info setup.289988: Linux is running under KVM in 64-bit mode 

（途中略）

Aug 31 09:51:58 syasuda-hpvs46 systemd info systemd 245.4-4ubuntu3.17 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid)
Aug 31 09:51:58 syasuda-hpvs46 systemd info Detected virtualization kvm.
Aug 31 09:51:58 syasuda-hpvs46 systemd info Detected architecture s390x.
Aug 31 09:51:58 syasuda-hpvs46 systemd info Set hostname to <syasuda-hpvs46>. 
```

```txt:data volumeがLUKSで暗号化されてマウントされている
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Mounting volumes ...
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Version [1.0.29]
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount debug MountVolumes input=[/var/hyperprotect/user-data.decrypted]
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount debug ParseContract ...
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount debug ValidateContract ...
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount debug MergeVolumes ...
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount debug Mounting volumes ...
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount debug listBlockdevices ...
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount debug ParseBlockdevices ...
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount debug Mounting volume [data1] from [/dev/vdb] to [/mnt/data] ...
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount debug LuksMounter device=[/dev/vdb]
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Executed cmd: ('lsblk', '-d', '--path', '--noheadings', '--output', 'NAME')
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Return value: 0
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info stdout: /dev/vda
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info /dev/vdb
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info /dev/vdc
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info /dev/vdd
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Executed cmd: ('lsblk', '--noheadings', '/dev/mapper/vdb_luks', '--output', 'FSTYPE')
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Return value: 32
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info lsblk: /dev/mapper/vdb_luks: not a block device
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Disk not yet mapped to LUKS layer. Could not read the FileSystem
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Successfully created Encryptor object
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Executed cmd: ('cryptsetup', 'isLuks', '/dev/vdb')
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Return value: 1
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Data Volume /dev/vdb is not Encrypted
Aug 31 09:51:58 syasuda-hpvs46 hpcr-disk-mount info Format started for /dev/vdb
Aug 31 09:52:10 syasuda-hpvs46 hpcr-disk-mount info Executed cmd: ('cryptsetup', '--batch-mode', '--type', 'luks2', 'luksFormat', '/dev/vdb')
Aug 31 09:52:10 syasuda-hpvs46 hpcr-disk-mount info Return value: 0
Aug 31 09:52:10 syasuda-hpvs46 hpcr-disk-mount info Format successful for /dev/vdb
Aug 31 09:52:10 syasuda-hpvs46 hpcr-disk-mount info Open started for /dev/vdb
Aug 31 09:52:13 syasuda-hpvs46 hpcr-disk-mount info Executed cmd: ('cryptsetup', 'luksOpen', '/dev/vdb', 'vdb_luks')
Aug 31 09:52:13 syasuda-hpvs46 hpcr-disk-mount info Return value: 0
Aug 31 09:52:13 syasuda-hpvs46 hpcr-disk-mount info Open successful for /dev/vdb
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Executed cmd: ('mkfs.ext4', '-b', '4096', '-F', '/dev/mapper/vdb_luks')
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Return value: 0
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info stdout: Creating filesystem with 2617344 4k blocks and 655360 inodes
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Filesystem UUID: 186297ce-b959-49ea-adf5-0f000f76653a
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Superblock backups stored on blocks:
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info #01132768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Allocating group tables:  0/80#010#010#010#010#010     #010#010#010#010#010done
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Writing inode tables:  0/80#010#010#010#010#010     #010#010#010#010#010done
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Creating journal (16384 blocks): done
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Writing superblocks and filesystem accounting information:  0/80#010#010#010#010#010     #010#010#010#010#010done
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info mke2fs 1.45.5 (07-Jan-2020)
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info checking if LUKS device is mounted ...
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Executed cmd: ('lsblk', '/dev/mapper/vdb_luks', '--noheadings', '--output', 'MOUNTPOINT')
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Return value: 0
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info LUKs device /dev/mapper/vdb_luks Mounted already - False
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Executed cmd: ('mountpoint', '/mnt/data')
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Return value: 1
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info mountpoint: /mnt/data: No such file or directory
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Executed cmd: ('mount', '/dev/mapper/vdb_luks', '/mnt/data')
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Return value: 0
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Mounting a device at /mnt/data is successful
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Encryption completed successfully!!
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Encryption successful!!
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount debug Validating full permissions on [/mnt/data]
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount debug File mode for [/mnt/data] is [drwxrwxrwx].
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount debug File mode for [/mnt/data] is [drwxrwxrwx].
Aug 31 09:52:17 syasuda-hpvs46 hpcr-disk-mount info Mounting volumes done 
```

```txt:mariadbとwordpressコンテナが起動している
（途中略）
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info 7458611c3efe Extracting [==================================================>]  3.493kB/3.493kB
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info 7458611c3efe Pull complete
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info dcf3286637af Extracting [==================================================>]  6.699kB/6.699kB
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info dcf3286637af Extracting [==================================================>]  6.699kB/6.699kB
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info dcf3286637af Pull complete
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info db Pulled
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info Network compose_default  Creating
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info Network compose_default  Created
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info Container compose-db-1  Creating
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info Container compose-wordpress-1  Creating
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info Container compose-wordpress-1  Created
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info Container compose-db-1  Created
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info Container compose-db-1  Starting
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info Container compose-wordpress-1  Starting
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info Container compose-db-1  Started
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info Container compose-wordpress-1  Started
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container debug Docker compose result:
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS                  PORTS                               NAMES
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info b41abefa36c5   wordpress   "docker-entrypoint.s…"   6 seconds ago   Up Less than a second   0.0.0.0:80->80/tcp, :::80->80/tcp   compose-wordpress-1
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container info 5ad5a3880e6f   mariadb     "docker-entrypoint.s…"   6 seconds ago   Up Less than a second   3306/tcp, 33060/tcp                 compose-db-1
Aug 31 09:52:52 syasuda-hpvs46 hpcr-container debug Container service completed successfully 
```

```txt:DBの初期化処理
Aug 31 09:52:52 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.8.3+maria~jammy started.
Aug 31 09:52:52 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Switching to dedicated user 'mysql'
Aug 31 09:52:52 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.8.3+maria~jammy started.
Aug 31 09:52:52 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Initializing database files
Aug 31 09:52:52 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:52 0 [Warning] mariadbd: io_uring_queue_init() failed with ENOMEM: try larger memory locked limit, ulimit -l, or https://mariadb.com/kb/en/systemd/#configuring-limitmemlock under systemd (262144 bytes required)
Aug 31 09:52:53 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:52 0 [Warning] InnoDB: liburing disabled: falling back to innodb_use_native_aio=OFF
Aug 31 09:52:53 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:53 0 [Warning] 'default-authentication-plugin' is MySQL 5.6 / 5.7 compatible option. To be implemented in later versions.
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info To do so, start the server, then issue the following command:
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info '/usr/bin/mysql_secure_installation'
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info which will also give you the option of removing the test
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info databases and anonymous user created by default.  This is
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info strongly recommended for production servers.
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info See the MariaDB Knowledgebase at https://mariadb.com/kb
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info Please report any problems at https://mariadb.org/jira
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info The latest information about MariaDB is available at https://mariadb.org/.
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info Consider joining MariaDB's strong and vibrant community:
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info https://mariadb.org/get-involved/
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Database files initialized
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Starting temporary server
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Waiting for server startup
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] mariadbd (server 10.8.3-MariaDB-1:10.8.3+maria~jammy) starting as process 93 ...
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] InnoDB: Using transactional memory
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] InnoDB: Number of transaction pools: 1
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] InnoDB: Using generic crc32 instructions
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Warning] mariadbd: io_uring_queue_init() failed with ENOMEM: try larger memory locked limit, ulimit -l, or https://mariadb.com/kb/en/systemd/#configuring-limitmemlock under systemd (262144 bytes required)
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Warning] InnoDB: liburing disabled: falling back to innodb_use_native_aio=OFF
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] InnoDB: Completed initialization of buffer pool
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] InnoDB: 128 rollback segments are active.
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] InnoDB: log sequence number 46643; transaction id 14
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] Plugin 'FEEDBACK' is disabled.
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Warning] 'default-authentication-plugin' is MySQL 5.6 / 5.7 compatible option. To be implemented in later versions.
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Warning] 'user' entry 'root@5ad5a3880e6f' ignored in --skip-name-resolve mode.
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Warning] 'proxies_priv' entry '@% root@5ad5a3880e6f' ignored in --skip-name-resolve mode.
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:55 0 [Note] mariadbd: ready for connections.
Aug 31 09:52:55 syasuda-hpvs46 compose-db-1 err Version: '10.8.3-MariaDB-1:10.8.3+maria~jammy'  socket: '/run/mysqld/mysqld.sock'  port: 0  mariadb.org binary distribution
Aug 31 09:52:56 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Temporary server started.
Aug 31 09:52:56 syasuda-hpvs46 compose-db-1 err Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
Aug 31 09:52:56 syasuda-hpvs46 compose-db-1 err Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
Aug 31 09:52:57 syasuda-hpvs46 compose-db-1 err Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Securing system users (equivalent to running mysql_secure_installation)
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Creating database wordpress
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Creating user wordpress
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Giving user wordpress access to schema wordpress
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Stopping temporary server
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:58 0 [Note] mariadbd (initiated by: root[root] @ localhost []): Normal shutdown
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:58 0 [Note] InnoDB: FTS optimize thread exiting.
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:58 0 [Note] InnoDB: Starting shutdown...
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:58 0 [Note] InnoDB: Dumping buffer pool(s) to /var/lib/mysql/ib_buffer_pool
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:58 0 [Note] InnoDB: Buffer pool(s) dump completed at 220831  0:52:58
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:58 0 [Note] InnoDB: Removed temporary tablespace data file: "./ibtmp1"
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:58 0 [Note] InnoDB: Shutdown completed; log sequence number 46643; transaction id 15
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:58 0 [Note] mariadbd: Shutdown complete
Aug 31 09:52:58 syasuda-hpvs46 compose-db-1 err
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: Temporary server stopped
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 info [Note] [Entrypoint]: MariaDB init process done. Ready for start up.
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 info
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] mariadbd (server 10.8.3-MariaDB-1:10.8.3+maria~jammy) starting as process 1 ...
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: Using transactional memory
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: Number of transaction pools: 1
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: Using generic crc32 instructions
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Warning] mariadbd: io_uring_queue_init() failed with ENOMEM: try larger memory locked limit, ulimit -l, or https://mariadb.com/kb/en/systemd/#configuring-limitmemlock under systemd (262144 bytes required)
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Warning] InnoDB: liburing disabled: falling back to innodb_use_native_aio=OFF
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: Completed initialization of buffer pool
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: 128 rollback segments are active.
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: log sequence number 46643; transaction id 14
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] Plugin 'FEEDBACK' is disabled.
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Warning] 'default-authentication-plugin' is MySQL 5.6 / 5.7 compatible option. To be implemented in later versions.
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Warning] You need to use --log-bin to make --expire-logs-days or --binlog-expire-logs-seconds work.
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] Server socket created on IP: '0.0.0.0'.
Aug 31 09:52:59 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:52:59 0 [Note] Server socket created on IP: '::'.
Aug 31 09:53:00 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:53:00 0 [Note] mariadbd: ready for connections.
Aug 31 09:53:00 syasuda-hpvs46 compose-db-1 err Version: '10.8.3-MariaDB-1:10.8.3+maria~jammy'  socket: '/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
Aug 31 09:53:00 syasuda-hpvs46 compose-db-1 err 2022-08-31  0:53:00 0 [Note] InnoDB: Buffer pool(s) load completed at 220831  0:53:00 
```