🥢

Boundary Enterprise をアップグレードする

2023/12/08に公開

Notes: お使いの環境で実施する際は、開発環境等で手順を確認した上で実施する様にして下さい。

Lab の Boundary Enterprise 環境をアップグレードした際のメモです。上記の通り、お使いの環境で実施する際は、開発環境等で手順を確認した上で実施する様にして下さい。
手順は以下のドキュメントに従って実施しています。
https://developer.hashicorp.com/boundary/tutorials/self-managed-deployment/upgrade-version

What is Boundary

Boundary は、セキュアなリモートアクセスを実現するためのプロダクトになります。外部の IdP (OIDC, LDAP) と連携し認証されたユーザーの属性毎に、ターゲットとなる Linux, Windows, Database, Kubernetes クラスタ等へのアクセス制御を行う事が出来ます。
また、ターゲットへアクセスする際に必要となる認証情報は、Vault と連携しユーザーがローカルに認証情報を持たずに、ターゲットにアクセスする事が出来ます。
https://www.boundaryproject.io/

Boundary は、Community 版、Enterprise 版、SaaS 版が提供されており、Enterprise 版、SaaS 版では、マルチホップ構成クレデンシャルインジェクションSSH セッションレコーディング等のエンタープライズ機能を利用する事が出来ます。

Boundary のベーシックな内容やユースケースに関しては、References にある Youtube でご確認頂けます。

Boundary Enterprise environment

アップグレードを行った Boundary Enterprise の環境は下記のような構成になっています。Boundary Controller, Boundary Worker はそれぞれ仮想マシン上で稼働しています。
KMS としては Vault Enterprise を利用し、データベースとしては PostgreSQL を Nomad を使ってコンテナとしてオーケストレーションしている構成になります。

Upgrade Boundary

Boundary Controller と Boundary Worker をそれぞれ手順に従ってアップグレードしていきます。アップグレードの一環として Controller が利用しているデータベースのスキーマを更新する必要があり、データベースのバックアップを取っておきます。

Backup database

手順にある通り、事前にデータベースのバックアップを取得します。

docker exec --user=root -it postgresql-c5ec4974-18e3-6c35-e096-8d23da6e4b35 pg_dump -h localhost -p 5432 -U postgres -d boundary -f boundary_backup.sql

コンテナにアクセスし、バックアップファイルが作成されているか確認し、中身も確認しておきます。

docker exec -it postgresql-c5ec4974-18e3-6c35-e096-8d23da6e4b35 /bin/bash
$ cat boundary_backup.sql | grep "CREATE TABLE" | awk -F'.' '{print $2}' | tr -d '('
sessions_pending_daily_snapshot
auth_account
auth_ldap_account
auth_ldap_account_attribute_map
auth_ldap_bind_credential
auth_ldap_certificate
auth_ldap_client_certificate
auth_ldap_group_entry_search
auth_ldap_managed_group
auth_ldap_method
auth_ldap_method_state_enm
auth_ldap_url
auth_ldap_user_entry_search
...<SNIP>...
worker_auth_authorized
worker_auth_authorized_state_enm
worker_auth_ca
worker_auth_ca_certificate
worker_auth_certificate_bundle
worker_auth_operational_indicator_enm
worker_auth_server_led_activation_token

Upgrade Boundary Controller

Controller をアップグレードしていきます。最初に現行のバージョンを確認します。

$ boundary version

Version information:
  Build Date:          2023-06-12T09:07:19Z
  Git Revision:        ad861aeeec40746bec4bcae98acb28beaae10ad1
  Metadata:            ent
  Version Number:      0.13.0+ent

次に、Controller を停止させ、Boundary のバイナリを 0.14.2+ent のバイナリに置き換えます。

systemctl stop boundary-controller
sudo mv boundary /usr/local/bin/boundary
$ boundary version

Version information:
  Build Date:          2023-10-31T19:23:08Z
  Git Revision:        6c0971ad406430dd11b59e20eae1a776e679441b
  Metadata:            ent
  Version Number:      0.14.2+ent

新しいバイナリに更新されたので、Controller を起動させます。

systemctl start boundary-controller

boundary-controller のステータスを確認してみます。ドキュメントに記載がある通り、データベースの更新が完了していないため、起動に失敗しているのが分かります。

$ systemctl status boundary-controller.service
× boundary-controller.service - "HashiCorp Boundary controller - A tool for secure remote access"
     Loaded: loaded (/etc/systemd/system/boundary-controller.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Thu 2023-12-07 17:57:35 JST; 3s ago
    Process: 20873 ExecStart=/usr/local/bin/boundary server -config /etc/boundary.d/controller.hcl (code=exited, status=2)
   Main PID: 20873 (code=exited, status=2)
        CPU: 1.037s

Dec 07 17:57:33 hashi-server systemd[1]: Started "HashiCorp Boundary controller - A tool for secure remote access".
Dec 07 17:57:35 hashi-server boundary[20873]: Database schema must be updated to use this version. Run 'boundary database migrate' to update the database. NOTE: Boundary does not currently support live migration; Ensure all>
Dec 07 17:57:35 hashi-server systemd[1]: boundary-controller.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Dec 07 17:57:35 hashi-server systemd[1]: boundary-controller.service: Failed with result 'exit-code'.
Dec 07 17:57:35 hashi-server systemd[1]: boundary-controller.service: Consumed 1.037s CPU time.

エラーメッセージにある通り、boundary migrate コマンドを実行して、データベースの更新を行います。下記の通り、Migrations successfully run. と出力されれば、データベースの更新は完了です。

$ boundary database migrate -config /etc/boundary.d/controller.hcl
{"id":"tnj4DvJoTm","source":"https://hashicorp.com/boundary/hashi-server/boundary-database-migrate","specversion":"1.0","type":"system","data":{"version":"v0.1","op":"github.com/hashicorp/boundary/internal/event.(*HclogLoggerAdapter).writeEvent","data":{"@original-log-level":"none","@original-log-name":"aws","msg":"configuring client automatic mTLS"}},"datacontentype":"application/cloudevents","time":"2023-12-07T17:58:26.010407397+09:00"}
...<SNIP>...
{"id":"w7mtI2lkVs","source":"https://hashicorp.com/boundary/hashi-server/boundary-database-migrate","specversion":"1.0","type":"system","data":{"version":"v0.1","op":"github.com/hashicorp/boundary/internal/event.(*HclogLoggerAdapter).writeEvent","data":{"@original-log-level":"none","@original-log-name":"aws","msg":"plugin exited"}},"datacontentype":"application/cloudevents","time":"2023-12-07T17:58:27.18652615+09:00"}
Migrations successfully run.

データベースの更新が完了したので、Controller を再起動し、無事に起動してくれば完了です。

systemctl restart boundary-controller
$ systemctl status boundary-controller.service
● boundary-controller.service - "HashiCorp Boundary controller - A tool for secure remote access"
     Loaded: loaded (/etc/systemd/system/boundary-controller.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-12-07 17:58:41 JST; 4s ago
   Main PID: 21007 (boundary)
      Tasks: 45 (limit: 9389)
     Memory: 389.0M
        CPU: 1.470s
     CGroup: /system.slice/boundary-controller.service
             ├─21007 /usr/local/bin/boundary server -config /etc/boundary.d/controller.hcl
             ├─21015 /tmp/3229364360/boundary-plugin-kms-transit-iDlM2
             ├─21023 /tmp/2682920135/boundary-plugin-kms-transit-OSFhi
             ├─21032 /tmp/1933782481/boundary-plugin-kms-transit-IZwgy
             ├─21041 /tmp/3827760407/boundary-plugin-aws-kq8et
             └─21049 /tmp/2372989776/boundary-plugin-azure-ulyGt
...<SNIP>...	   

Upgrade Boundary Worker

Controller のアップグレードが完了したら、Worker 側もアップグレードします。
Worker 側のアップグレード作業は非常にシンプルで、以下のステップを実施する事でアップグレードは完了です。

  1. Worker の停止
  2. Boundary バイナリの更新
  3. Worker の起動

Summary

Upgrade and database migration に従い実施する事で、特に躓く箇所もなく、Boundary Enteprise v0.13 -> v0.14 へのアップグレードが出来ました。

References

Youtube

BoundaryとVaultによるセキュアなリモートホストアクセス
https://youtu.be/J52BGfM461k?si=D7fFu10eDDrKDgWR

Boundaryのロールベースアクセスコントロール
https://youtu.be/nL1nBAMySpE?si=AvBfFTpiuvjs4GkI&t=71

Document

Discussion