第3章 The Update Framework のメタデータファイルの更新
デフォルトでは、The Update Framework (TUF) メタデータファイルは、Securesign インスタンスのデプロイメント日から 52 週間後に期限切れになります。少なくとも、有効期限が切れる前に 52 週間ごとに 1 回は TUF メタデータファイルを更新する必要があります。Red Hat では、メタデータファイルを 1 年に 1 回以上更新することを推奨しています。
この手順では、ルートメタデータファイルと非ルートメタデータファイルを更新する手順を説明します。
前提条件
- Red Hat OpenShift Container Platform 上で実行される RHTAS Operator をインストールする。
- Securesign インスタンスを実行する。
-
oc
バイナリーがインストールされているワークステーション。
手順
OpenShift クラスターからワークステーションに
tuftool
バイナリーをダウンロードします。重要tuftool
バイナリーは Linux オペレーティングシステムでのみ使用できます。- ホームページから ? アイコンをクリックして、Command line tools をクリックし、tuftool ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gz
ファイルを展開し、実行ビットを設定します。例
$ gunzip tuftool-amd64.gz $ chmod +x tuftool-amd64
バイナリーを
$PATH
環境内の場所に移動し、名前を変更します。例
$ sudo mv tuftool-amd64 /usr/local/bin/tuftool
コマンドラインから OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
例
$ oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS プロジェクトに切り替えます。
例
$ oc project trusted-artifact-signer
シェル環境を設定します。
例
$ export WORK="${HOME}/trustroot-example" $ export ROOT="${WORK}/root/root.json" $ export KEYDIR="${WORK}/keys" $ export INPUT="${WORK}/input" $ export TUF_REPO="${WORK}/tuf-repo" $ export TUF_SERVER_POD="$(oc get pod --selector=app.kubernetes.io/component=tuf --no-headers -o custom-columns=":metadata.name")" $ export TIMESTAMP_EXPIRATION="in 10 days" $ export SNAPSHOT_EXPIRATION="in 26 weeks" $ export TARGETS_EXPIRATION="in 26 weeks" $ export ROOT_EXPIRATION="in 26 weeks"
要件に応じて有効期限を設定します。
一時的な TUF ディレクトリー構造を作成します。
例
$ mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"
TUF コンテンツを一時的な TUF ディレクトリー構造にダウンロードします。
例
$ oc extract --to "${KEYDIR}/" secret/tuf-root-keys $ oc cp "${TUF_SERVER_POD}:/var/www/html" "${TUF_REPO}" $ cp "${TUF_REPO}/root.json" "${ROOT}"
タイムスタンプ、スナップショット、ターゲットのメタデータをすべて 1 つのコマンドで更新できます。
例
$ tuftool update \ --root "${ROOT}" \ --key "${KEYDIR}/timestamp.pem" \ --key "${KEYDIR}/snapshot.pem" \ --key "${KEYDIR}/targets.pem" \ --timestamp-expires "${TIMESTAMP_EXPIRATION}" \ --snapshot-expires "${SNAPSHOT_EXPIRATION}" \ --targets-expires "${TARGETS_EXPIRATION}" \ --outdir "${TUF_REPO}" \ --metadata-url "file://${TUF_REPO}"
注記TUF メタデータファイルのサブセットに対して TUF メタデータ更新を実行することもできます。たとえば、
timestamp.json
メタデータファイルは、他のメタデータファイルよりも頻繁に期限切れになります。したがって、次のコマンドを実行するだけで、タイムスタンプメタデータファイルを更新できます。$ tuftool update \ --root "${ROOT}" \ --key "${KEYDIR}/timestamp.pem" \ --timestamp-expires "${TIMESTAMP_EXPIRATION}" \ --outdir "${TUF_REPO}" \ --metadata-url "file://${TUF_REPO}"
ルートの有効期限が切れそうな場合にのみ、有効期限を更新します。
例
$ tuftool root expire "${ROOT}" "${ROOT_EXPIRATION}"
注記ルートファイルの有効期限がまだ先の場合は、この手順をスキップできます。
ルートバージョンを更新します。
例
$ tuftool root bump-version "${ROOT}"
ルートメタデータファイルに再度署名します。
例
$ tuftool root sign "${ROOT}" -k "${KEYDIR}/root.pem"
新しいルートバージョンを設定し、ルートメタデータファイルを所定の場所にコピーします。
例
$ export NEW_ROOT_VERSION=$(cat "${ROOT}" | jq -r ".signed.version") $ cp "${ROOT}" "${TUF_REPO}/root.json" $ cp "${ROOT}" "${TUF_REPO}/${NEW_ROOT_VERSION}.root.json"
これらの変更を TUF サーバーにアップロードします。
例
$ oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"