管理ガイド
Trusted Artifact Signer サービスの一般管理
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Trusted Artifact Signer 管理ガイドへようこそ。
このガイドは、Red Hat プラットフォーム上で実行される Red Hat Trusted Artifact Signer (RHTAS) サービスのメンテナンスルーチンとタスクに役立ちます。インストールプラットフォーム別に整理されたコンテンツ:
Trusted Artifact Signer サービスのデプロイに関する情報は デプロイメントガイド に記載されています。
第1章 Red Hat OpenShift Container Platform リンクのコピーリンクがクリップボードにコピーされました!
1.1. 署名データの保護 リンクのコピーリンクがクリップボードにコピーされました!
システム管理者にとって、ハードウェア障害や誤ったデータ削除によるデータ損失が発生した場合、ソフトウェアサプライチェーンの署名データを保護することは非常に重要です。
OpenShift API Data Protection (OADP) 製品は、Red Hat OpenShift Container Platform 上で実行されるアプリケーションにデータ保護を提供します。OADP 製品を使用することで、ソフトウェア開発者はできるだけ早くコードの署名と検証を再開できるようになります。OADP Operator をインストールして設定したら、Red Hat Trusted Artifact Signer (RHTAS) データのバックアップと復元を開始できます。
1.1.1. OADP Operator のインストールと設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift API Data Protection (OADP) Operator を使用すると、OpenShift アプリケーションリソースと内部コンテナーイメージをバックアップできるようになります。OADP Operator を使用して、Trusted Artifact Signer データをバックアップおよび復元できます。
この手順では、Amazon Web Services (AWS) Simple Storage Service (S3) を使用してバケットを作成し、OADP Operator を設定する方法を説明します。AWS の代わりに、Red Hat OpenShift Data Foundation など、サポートされている別の S3 互換オブジェクトストレージプラットフォーム を使用することもできます。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降。
-
cluster-adminロールでの OpenShift Web コンソールへのアクセス。 - S3 互換のバケットを作成する機能。
-
ocおよびawsバイナリーがインストールされたワークステーション。
手順
ワークステーションでターミナルを開き、OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
新しいバケットを作成します。
構文
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいユーザーを作成します。
例
aws iam create-user --user-name $USER
aws iam create-user --user-name $USERCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいポリシーを作成します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このポリシーを新しいユーザーに関連付けます。
例
aws iam put-user-policy \ --user-name $USER \ --policy-name velero \ --policy-document file://velero-policy.json
aws iam put-user-policy \ --user-name $USER \ --policy-name velero \ --policy-document file://velero-policy.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow アクセスキーを作成します。
例
aws iam create-access-key --user-name $USER --output=json | jq -r '.AccessKey | [ "export AWS_ACCESS_KEY_ID=" + .AccessKeyId, "export AWS_SECRET_ACCESS_KEY=" + .SecretAccessKey ] | join("\n")'aws iam create-access-key --user-name $USER --output=json | jq -r '.AccessKey | [ "export AWS_ACCESS_KEY_ID=" + .AccessKeyId, "export AWS_SECRET_ACCESS_KEY=" + .SecretAccessKey ] | join("\n")'Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS 秘密鍵情報を含む認証情報ファイルを作成します。
構文
cat << EOF > ./credentials-velero [default] aws_access_key_id=$AWS_ACCESS_KEY_ID aws_secret_access_key=$AWS_SECRET_ACCESS_KEY EOF
cat << EOF > ./credentials-velero [default] aws_access_key_id=$AWS_ACCESS_KEY_ID aws_secret_access_key=$AWS_SECRET_ACCESS_KEY EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
cluster-adminロールを持つユーザーで OpenShift Web コンソールにログインします。 - Administrator パースペクティブで、Operators ナビゲーションメニューを展開し、OperatorHub をクリックします。
- 検索フィールドに oadp と入力し、Red Hat が提供する OADP Operator タイルをクリックします。
- Install ボタンをクリックして、Operator の詳細を表示します。
- デフォルト値を受け入れ、Install Operator ページで Install をクリックし、インストールが完了するまで待ちます。
Operator のインストールが完了したら、ワークステーションのターミナルから、AWS 認証情報を使用して OpenShift のシークレットリソースを作成します。
例
oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow - OpenShift Web コンソールから、View Operator ボタンをクリックします。
- DataProtectionApplication (DPA) タイルで Create instance をクリックします。
- Create DataProtectionApplication ページで、YAML view を選択します。
リソースファイルで次の値を編集します。
-
metadataセクションで、velero-sampleをveleroに置き換えます。 -
spec.configuration.nodeAgentセクションで、resticをkopiaに置き換えます。 -
spec.configuration.veleroセクションの下に、resourceTimeout: 10mを追加します。 -
spec.configuration.velero.defaultPluginsセクションの下に- csiを追加します。 -
spec.snapshotLocationsセクションで、us-west-2の値を AWS リージョンの値に置き換えます。 -
spec.backupLocationsセクションで、us-east-1の値を AWS リージョンの値に置き換えます。 -
spec.backupLocations.objectStorageセクションで、my-bucket-nameをバケット名に置き換えます。別の接頭辞を使用する場合は、veleroをバケット接頭辞名に置き換えます。
-
- Create ボタンをクリックします。
1.1.2. Trusted Artifact Signer データのバックアップ リンクのコピーリンクがクリップボードにコピーされました!
OpenShift API Data Protection (OADP) Operator をインストールし、インスタンスをデプロイすると、ボリュームスナップショットリソースと、Red Hat Trusted Artifact Signer データをバックアップするためのバックアップリソースを作成できます。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降。
-
cluster-adminロールでの OpenShift Web コンソールへのアクセス。 - OADP Operator のインストール。
-
ocバイナリーがインストールされているワークステーション。
手順
ワークステーションでターミナルを開き、OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
VolumeSnapshotClassリソースを見つけて編集します。例
oc get VolumeSnapshotClass -n openshift-adp oc edit VolumeSnapshotClass csi-aws-vsc -n openshift-adp
oc get VolumeSnapshotClass -n openshift-adp oc edit VolumeSnapshotClass csi-aws-vsc -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow リソースファイル内の次の値を更新します。
-
metadata.labelsセクションの下に、velero.io/csi-volumesnapshot-class: "true"ラベルを追加します。 - 変更を保存し、エディターを終了します。
-
Backupリソースを作成します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このバックアップを実行するための Cron スケジュールを有効にするには、スケジュールプロパティーを追加します。この例では、このバックアップリソースは毎日午前 7 時に実行されます。
デフォルトでは、すべてのリソースは、trusted-artifact-signer 名前空間内でバックアップされます。includeResources プロパティーまたは excludedResources プロパティーを使用して、含めるリソースまたは除外するリソースを指定できます。
重要バックアップターゲットのストレージクラスによっては、バックアップを成功させるために永続ボリュームを継続的に使用することはできません。
1.1.3. Trusted Artifact Signer データの復元 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Trusted Artifact Signer (RHTAS) および OpenShift API Data Protection (OADP) Operator がインストールされ、RHTAS 名前空間のバックアップリソースがあれば、データを OpenShift クラスターに復元できます。
前提条件
- Red Hat OpenShift Container Platform バージョン 4.15 以降。
-
cluster-adminロールでの OpenShift Web コンソールへのアクセス。 - RHTAS Operator のインストール。
- OADP Operator のインストール。
-
trusted-artifact-signer名前空間構造のバックアップリソース。 -
ocバイナリーがインストールされているワークステーション。
手順
RHTAS Operator を無効にします。
例
oc scale deploy rhtas-operator-controller-manager --replicas=0 -n openshift-operators
oc scale deploy rhtas-operator-controller-manager --replicas=0 -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Restoreリソースを作成します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHTAS データを別の OpenShift クラスターに復元する場合は、次の手順を実行します。
Trillian データベースのシークレットを削除します。
例
oc delete secret securesign-sample-trillian-db-tls oc delete pod trillian-db-xxx
oc delete secret securesign-sample-trillian-db-tls oc delete pod trillian-db-xxxCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記RHTAS Operator はシークレットを再作成し、Pod を再起動します。
-
restoreOwnerReferences.shスクリプトを実行します。
RHTAS Operator を有効にします。
例
oc scale deploy rhtas-operator-controller-manager --replicas=1 -n openshift-operators
oc scale deploy rhtas-operator-controller-manager --replicas=1 -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要復元を開始した後すぐに RHTAS Operator を起動すると、永続ボリュームの要求が確実に行われます。
1.2. The Update Framework リンクのコピーリンクがクリップボードにコピーされました!
システム管理者として、Red Hat Trusted Artifact Signer (RHTAS) 向けの The Update Framework (TUF) の Red Hat の実装を理解することは、開発者向けのセキュアなコーディング環境を維持する上で重要です。コードベースでのミックスアンドマッチ攻撃を防ぐために、TUF のルートメタデータと非ルートメタデータを定期的に更新できます。TUF メタデータを更新することで、クライアントは古くなったファイルや改ざんされたファイルを検出して拒否できるようになります。
1.2.1. Trusted Artifact Signer による The Update Framework の実装 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Trusted Artifact Signer (RHTAS) バージョン 1.1 以降では、RHTAS サービスで使用される公開鍵と証明書を保存するための信頼されたルートとして The Update Framework (TUF) を実装しました。The Update Framework は、ソフトウェア更新システムを保護するための洗練されたフレームワークであり、提供されたアーティファクトを保護するのに最適です。The Update Framework は、RHTAS サービスを信頼されたルートターゲットとして参照します。信頼できるターゲットは 4 つで、RHTAS サービスごとに 1 つずつあります (Fulcio、Certificate Transparency (CT) ログ、Rekor、および Timestamp Authority (TSA))。cosign などのクライアントソフトウェアは、RHTAS 信頼ルートターゲットを使用してアーティファクト署名に署名し、検証します。シンプルな HTTP サーバーが公開鍵と証明書をクライアントソフトウェアに配布します。このシンプルな HTTP サーバーには、個々のターゲットの TUF リポジトリーがあります。
デフォルトでは、RHTAS を Red Hat OpenShift または Red Hat Enterprise Linux にデプロイするときに、TUF リポジトリーが作成され、個々のターゲットが事前に設定されます。デフォルトでは、すべてのメタデータファイルの有効期限は、RHTAS サービスをデプロイした時点から 52 週間です。Red Hat では、有効期限を短く選択し、公開鍵と証明書を頻繁にローテーションすることを推奨しています。これらのメンテナンスタスクを定期的に実行すると、コードベースへの攻撃を防ぐことができます。
1.2.2. The Update Framework のメタデータファイルの更新 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、The Update Framework (TUF) メタデータファイルは、Red Hat Trusted Artifact Signer (RHTAS) のデプロイメント日から 52 週間後に期限切れになります。少なくとも、有効期限が切れる前に 52 週間ごとに 1 回は TUF メタデータファイルを更新する必要があります。Red Hat では、メタデータファイルを 1 年に 1 回以上更新することを推奨しています。
この手順では、ルートメタデータファイルと非ルートメタデータファイルを更新する手順を説明します。
前提条件
- Red Hat OpenShift Container Platform 上で実行される RHTAS Operator をインストールする。
- Securesign インスタンスを実行する。
-
ocバイナリーがインストールされているワークステーション。
手順
OpenShift クラスターからワークステーションに
tuftoolバイナリーをダウンロードします。重要現在、
tuftoolバイナリーは、x86_64 アーキテクチャー上の Linux オペレーティングシステムでのみ使用できます。- ホームページから ? アイコンをクリックして、Command line tools をクリックし、tuftool ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip tuftool-amd64.gz chmod +x tuftool-amd64
gunzip tuftool-amd64.gz chmod +x tuftool-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv tuftool-amd64 /usr/local/bin/tuftool
sudo mv tuftool-amd64 /usr/local/bin/tuftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
コマンドラインから OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS プロジェクトに切り替えます。
例
oc project trusted-artifact-signer
oc project trusted-artifact-signerCopy to Clipboard Copied! Toggle word wrap Toggle overflow シェル環境を設定します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要件に応じて有効期限を設定します。
一時的な TUF ディレクトリー構造を作成します。
例
mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}"oc extract --to "${KEYDIR}/" secret/tuf-root-keys oc cp "${TUF_SERVER_POD}:/var/www/html" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow タイムスタンプ、スナップショット、ターゲットのメタデータをすべて 1 つのコマンドで更新できます。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記TUF メタデータファイルのサブセットに対して TUF メタデータ更新を実行することもできます。たとえば、
timestamp.jsonメタデータファイルは、他のメタデータファイルよりも頻繁に期限切れになります。したがって、次のコマンドを実行するだけで、タイムスタンプメタデータファイルを更新できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルートの有効期限が切れそうな場合にのみ、有効期限を更新します。
例
tuftool root expire "${ROOT}" "${ROOT_EXPIRATION}"tuftool root expire "${ROOT}" "${ROOT_EXPIRATION}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ルートファイルの有効期限がまだ先の場合は、この手順をスキップできます。
ルートバージョンを更新します。
例
tuftool root bump-version "${ROOT}"tuftool root bump-version "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルートメタデータファイルに再度署名します。
例
tuftool root sign "${ROOT}" -k "${KEYDIR}/root.pem"tuftool root sign "${ROOT}" -k "${KEYDIR}/root.pem"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいルートバージョンを設定し、ルートメタデータファイルを所定の場所にコピーします。
例
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"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"Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの変更を TUF サーバーにアップロードします。
例
oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3. 証明書と鍵のローテーション リンクのコピーリンクがクリップボードにコピーされました!
システム管理者は、Red Hat OpenShift 上で実行されている Red Hat Trusted Artifact Signer (RHTAS) サービスで使用される証明書と署名者鍵をプロアクティブにローテーションできます。定期的に鍵をローテーションすることで、鍵の改ざんや盗難を防ぐことができます。これらの手順では、古い証明書と署名者鍵を期限切れにし、RHTAS を設定する基盤となるサービス用の新しい証明書と署名者鍵に置き換える手順を説明します。次のサービスの鍵と証明書をローテーションできます。
- Rekor
- Certificate Transparency ログ
- Fulcio
- タイムスタンプ機関
1.3.1. Rekor 署名者鍵のローテーション リンクのコピーリンクがクリップボードにコピーされました!
シャーディング機能を使用してログツリーをフリーズし、新しい署名者鍵を使用して新しいログツリーを作成することで、Rekor の署名者鍵を積極的にローテーションできます。この手順では、古い Rekor 署名者鍵を期限切れにし、Red Hat Trusted Artifact Signer (RHTAS) が使用する新しい署名者鍵に置き換える手順を説明します。古い Rekor 署名者鍵の有効期限が切れても、古い鍵で署名されたアーティファクトを検証することは可能です。
この手順では、Rekor サービスを停止する必要があります。
前提条件
- Red Hat OpenShift Container Platform 上で実行される RHTAS Operator をインストールする。
- Securesign インスタンスを実行する。
-
oc、openssl、cosignバイナリーがインストールされたワークステーション。
手順
OpenShift クラスターからワークステーションに
rekor-cliバイナリーをダウンロードします。- OpenShift Web コンソールにログインします。ホームページで ? アイコンをクリックし、Command line tools をクリックして rekor-cli ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip rekor-cli-amd64.gz chmod +x rekor-cli-amd64
gunzip rekor-cli-amd64.gz chmod +x rekor-cli-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv rekor-cli-amd64 /usr/local/bin/rekor-cli
sudo mv rekor-cli-amd64 /usr/local/bin/rekor-cliCopy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift クラスターからワークステーションに
tuftoolバイナリーをダウンロードします。重要tuftoolバイナリーは Linux オペレーティングシステムでのみ使用できます。- ホームページから ? アイコンをクリックして、Command line tools をクリックし、tuftool ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルから、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip tuftool-amd64.gz chmod +x tuftool-amd64
gunzip tuftool-amd64.gz chmod +x tuftool-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv tuftool-amd64 /usr/local/bin/tuftool
sudo mv tuftool-amd64 /usr/local/bin/tuftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
コマンドラインから OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS プロジェクトに切り替えます。
例
oc project trusted-artifact-signer
oc project trusted-artifact-signerCopy to Clipboard Copied! Toggle word wrap Toggle overflow Rekor URL を取得します。
例
export REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}')export REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブシャードのログツリー識別子を取得します。
例
export OLD_TREE_ID=$(rekor-cli loginfo --rekor_server $REKOR_URL --format json | jq -r .TreeID)
export OLD_TREE_ID=$(rekor-cli loginfo --rekor_server $REKOR_URL --format json | jq -r .TreeID)Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログツリーを
DRAINING状態に設定します。例
oc run --image registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- updatetree --admin_server=trillian-logserver:8091 --tree_id=${OLD_TREE_ID} --tree_state=DRAININGoc run --image registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- updatetree --admin_server=trillian-logserver:8091 --tree_id=${OLD_TREE_ID} --tree_state=DRAININGCopy to Clipboard Copied! Toggle word wrap Toggle overflow ツリーログは、drain の実行中に新しいエントリーを受け入れません。キューが空になるまで待ちます。
重要次のステップに進む前に、キューが空になるまで待つ必要があります。drain の実行中にリーフがまだ統合中の場合、このプロセス中にログツリーをフリーズすると、ログパスが最大マージ遅延 (MMD) しきい値を超える可能性があります。
ログツリーをフリーズします。
例
oc run --image registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- updatetree --admin_server=trillian-logserver:8091 --tree_id=${OLD_TREE_ID} --tree_state=FROZENoc run --image registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- updatetree --admin_server=trillian-logserver:8091 --tree_id=${OLD_TREE_ID} --tree_state=FROZENCopy to Clipboard Copied! Toggle word wrap Toggle overflow フリーズしたログツリーの長さを取得します。
例
export OLD_SHARD_LENGTH=$(rekor-cli loginfo --rekor_server $REKOR_URL --format json | jq -r .ActiveTreeSize)
export OLD_SHARD_LENGTH=$(rekor-cli loginfo --rekor_server $REKOR_URL --format json | jq -r .ActiveTreeSize)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 古いシャードの Rekor の公開鍵を取得します。
例
export OLD_PUBLIC_KEY=$(curl -s $REKOR_URL/api/v1/log/publicKey | base64 | tr -d '\n')
export OLD_PUBLIC_KEY=$(curl -s $REKOR_URL/api/v1/log/publicKey | base64 | tr -d '\n')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいログツリーを作成します。
例
export NEW_TREE_ID=$(oc run createtree --image registry.redhat.io/rhtas/createtree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- -logtostderr=false --admin_server=trillian-logserver:8091 --display_name=rekor-tree)
export NEW_TREE_ID=$(oc run createtree --image registry.redhat.io/rhtas/createtree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- -logtostderr=false --admin_server=trillian-logserver:8091 --display_name=rekor-tree)Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、ログツリーが 2 つ、フリーズしたツリーが 1 つ、およびアクティブなシャードになる新しいツリーが 1 つできました。
新しい秘密鍵を作成します。
例
openssl ecparam -genkey -name secp384r1 -noout -out new-rekor.pem
openssl ecparam -genkey -name secp384r1 -noout -out new-rekor.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要新しい鍵には一意のファイル名が必要です。
新しい署名者鍵を使用して新しいシークレットリソースを作成します。
例
oc create secret generic rekor-signer-key --from-file=private=new-rekor.pem
oc create secret generic rekor-signer-key --from-file=private=new-rekor.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいツリー識別子と古いシャーディング情報を使用して、Securesign Rekor 設定を更新します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記/spec/rekor/signer/keyPasswordRefに値が設定されている場合は、それを削除する新しい個別の更新を作成します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最初の更新を適用した後、この更新を適用します。
Securesign インスタンスを更新します。
例
oc patch Securesign securesign-sample --type='json' -p="$SECURESIGN_PATCH_1"
oc patch Securesign securesign-sample --type='json' -p="$SECURESIGN_PATCH_1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Rekor サーバーが新しい署名者鍵で再デプロイされるのを待ちます。
例
oc wait pod -l app.kubernetes.io/name=rekor-server --for=condition=Ready
oc wait pod -l app.kubernetes.io/name=rekor-server --for=condition=ReadyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい公開鍵を取得します。
例
export NEW_KEY_NAME=new-rekor.pub curl $(oc get rekor -o jsonpath='{.items[0].status.url}')/api/v1/log/publicKey -o $NEW_KEY_NAMEexport NEW_KEY_NAME=new-rekor.pub curl $(oc get rekor -o jsonpath='{.items[0].status.url}')/api/v1/log/publicKey -o $NEW_KEY_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい Rekor 公開鍵を使用するように The Update Framework (TUF) サービスを設定します。
シェル環境を設定します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一時的な TUF ディレクトリー構造を作成します。
例
mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}"oc extract --to "${KEYDIR}/" secret/tuf-root-keys oc cp "${TUF_SERVER_POD}:/var/www/html" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブな Rekor 署名者鍵ファイル名を見つけます。ローカル TUF リポジトリー内の最新のターゲットファイル (例:
1.target.json) を開きます。このファイルには、アクティブな Rekor 署名者鍵ファイル名 (例:rekor.pub) が記載されています。次のアクティブな Rekor 署名者鍵ファイル名で環境変数を設定します。例
export ACTIVE_KEY_NAME=rekor.pub
export ACTIVE_KEY_NAME=rekor.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 古い公開鍵を使用して Rekor 署名者鍵を更新します。
例
echo $OLD_PUBLIC_KEY | base64 -d > $ACTIVE_KEY_NAME
echo $OLD_PUBLIC_KEY | base64 -d > $ACTIVE_KEY_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 古い Rekor 署名者鍵を期限切れにします。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい Rekor 署名者鍵を追加します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの変更を TUF サーバーにアップロードします。
例
oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作業ディレクトリーを削除します。
例
rm -r $WORK
rm -r $WORKCopy to Clipboard Copied! Toggle word wrap Toggle overflow
更新された TUF 設定で
cosign設定を更新します。例
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow これで、新しい Rekor 署名者鍵を使用してアーティファクトに署名し、検証する準備が整いました。
1.3.2. Certificate Transparency ログ署名者アギのローテーション リンクのコピーリンクがクリップボードにコピーされました!
シャーディング機能を使用してログツリーをフリーズし、新しい署名者鍵を使用して新しいログツリーを作成することにより、Certificate Transparency (CT) ログ署名者鍵をプロアクティブにローテーションできます。この手順では、古い CT ログ署名者鍵を期限切れにし、Red Hat Trusted Artifact Signer (RHTAS) が使用する新しい署名者鍵に置き換える手順を説明します。古い CT ログ署名者鍵の有効期限が切れても、古い鍵で署名されたアーティファクトを検証することは可能です。
前提条件
- Red Hat OpenShift Container Platform 上で実行される RHTAS Operator をインストールする。
- Securesign インスタンスを実行する。
-
oc、openssl、cosignバイナリーがインストールされたワークステーション。
手順
OpenShift クラスターからワークステーションに
tuftoolバイナリーをダウンロードします。重要現在、
tuftoolバイナリーは、x86_64 アーキテクチャー上の Linux オペレーティングシステムでのみ使用できます。- ホームページから ? アイコンをクリックして、Command line tools をクリックし、tuftool ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip tuftool-amd64.gz chmod +x tuftool-amd64
gunzip tuftool-amd64.gz chmod +x tuftool-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv tuftool-amd64 /usr/local/bin/tuftool
sudo mv tuftool-amd64 /usr/local/bin/tuftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
コマンドラインから OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS プロジェクトに切り替えます。
例
oc project trusted-artifact-signer
oc project trusted-artifact-signerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 現在の CT ログ設定と鍵のバックアップを作成します。
例
export SERVER_CONFIG_NAME=$(oc get ctlog -o jsonpath='{.items[0].status.serverConfigRef.name}') oc get secret $SERVER_CONFIG_NAME -o jsonpath="{.data.config}" | base64 --decode > config.txtpb oc get secret $SERVER_CONFIG_NAME -o jsonpath="{.data.fulcio-0}" | base64 --decode > fulcio-0.pem oc get secret $SERVER_CONFIG_NAME -o jsonpath="{.data.private}" | base64 --decode > private.pem oc get secret $SERVER_CONFIG_NAME -o jsonpath="{.data.public}" | base64 --decode > public.pemexport SERVER_CONFIG_NAME=$(oc get ctlog -o jsonpath='{.items[0].status.serverConfigRef.name}') oc get secret $SERVER_CONFIG_NAME -o jsonpath="{.data.config}" | base64 --decode > config.txtpb oc get secret $SERVER_CONFIG_NAME -o jsonpath="{.data.fulcio-0}" | base64 --decode > fulcio-0.pem oc get secret $SERVER_CONFIG_NAME -o jsonpath="{.data.private}" | base64 --decode > private.pem oc get secret $SERVER_CONFIG_NAME -o jsonpath="{.data.public}" | base64 --decode > public.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 現在のツリー識別子を取得します。
例
export OLD_TREE_ID=$(oc get ctlog -o jsonpath='{.items[0].status.treeID}')export OLD_TREE_ID=$(oc get ctlog -o jsonpath='{.items[0].status.treeID}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログツリーを
DRAINING状態に設定します。例
oc run --image registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- updatetree --admin_server=trillian-logserver:8091 --tree_id=${OLD_TREE_ID} --tree_state=DRAININGoc run --image registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- updatetree --admin_server=trillian-logserver:8091 --tree_id=${OLD_TREE_ID} --tree_state=DRAININGCopy to Clipboard Copied! Toggle word wrap Toggle overflow ツリーログは、drain の実行中に新しいエントリーを受け入れません。キューが空になるまで待ちます。
重要次のステップに進む前に、キューが空になるまで待つ必要があります。drain の実行中にリーフがまだ統合中の場合、このプロセス中にログツリーをフリーズすると、ログパスが最大マージ遅延 (MMD) しきい値を超える可能性があります。
キューが完全に空になったら、ログをフリーズします。
例
oc run --image registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- updatetree --admin_server=trillian-logserver:8091 --tree_id=${OLD_TREE_ID} --tree_state=FROZENoc run --image registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- updatetree --admin_server=trillian-logserver:8091 --tree_id=${OLD_TREE_ID} --tree_state=FROZENCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい Merkle ツリーを作成し、新しいツリー識別子を取得します。
例
export NEW_TREE_ID=$(kubectl run createtree --image registry.redhat.io/rhtas/createtree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- -logtostderr=false --admin_server=trillian-logserver:8091 --display_name=ctlog-tree)
export NEW_TREE_ID=$(kubectl run createtree --image registry.redhat.io/rhtas/createtree-rhel9:1.1.0 --restart=Never --attach=true --rm=true -q -- -logtostderr=false --admin_server=trillian-logserver:8091 --display_name=ctlog-tree)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい証明書と新しい公開鍵および秘密鍵を生成します。
例
openssl ecparam -genkey -name prime256v1 -noout -out new-ctlog.pem openssl ec -in new-ctlog.pem -pubout -out new-ctlog-public.pem openssl ec -in new-ctlog.pem -out new-ctlog.pass.pem -des3 -passout pass:"CHANGE_ME"
openssl ecparam -genkey -name prime256v1 -noout -out new-ctlog.pem openssl ec -in new-ctlog.pem -pubout -out new-ctlog-public.pem openssl ec -in new-ctlog.pem -out new-ctlog.pass.pem -des3 -passout pass:"CHANGE_ME"Copy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しいパスワードに置き換えます。
重要証明書と新しい鍵には一意のファイル名が必要です。
CT ログ設定を更新します。
-
config.txtpbファイルを開いて編集します。 ログをフリーズした場合、フリーズされたログエントリーに
not_after_limitフィールドを追加し、接頭辞値を一意の名前に変更し、秘密鍵への古いパスをctfe-keys/private-0に置き換えます。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記date +%s、およびdate +%Nのコマンドを実行すると、秒とナノ秒の現在の時刻値を取得できます。重要not_after_limitフィールドは、フリーズされたログだけのタイムスタンプ範囲の終了を定義します。この時点以降の証明書は、このログに含めることができなくなります。-
凍結されたログ
configブロックをコピーして貼り付け、設定ファイルに追加して新しいエントリーを作成します。 新しい
configブロック内の次の行を変更します。log_idを新しいツリー識別子に設定し、prefixをtrusted-artifact-signer、private_keyパスをctfe-keys/privateに変更します。public_key行は削除し、not_after_limitはnot_after_startに変更して、タイムスタンプの範囲を設定します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NEW_TREE_ID を追加し、CHANGE_ME は、新しい秘密鍵のパスワードに置き換えます。ここでのパスワードは、新しい秘密鍵と公開鍵を生成するために使用したパスワードと同じものに指定する必要があります。
重要not_after_startフィールドは、タイムスタンプ範囲の開始 (開始地点を含む) を定義します。これは、この時点でログが証明書の受け入れを開始することを意味します。
-
新しいシークレットリソースを作成します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しい秘密鍵のパスワードに置き換えます。
新しい CT ログ公開鍵を使用するように The Update Framework (TUF) サービスを設定します。
シェル環境を設定します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一時的な TUF ディレクトリー構造を作成します。
例
mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}"oc extract --to "${KEYDIR}/" secret/tuf-root-keys oc cp "${TUF_SERVER_POD}:/var/www/html" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブな CT ログの公開鍵ファイル名を見つけます。ローカル TUF リポジトリー内の最新のターゲットファイル (例:
1.targets.json) を開きます。このターゲットファイルには、アクティブな CT ログ公開鍵ファイル名 (例:ctfe.pub) が含まれます。次のアクティブな CT ログ公開鍵ファイル名で環境変数を設定します。例
export ACTIVE_CTFE_NAME=ctfe.pub
export ACTIVE_CTFE_NAME=ctfe.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift からアクティブな CT ログ公開鍵を抽出します。
例
oc get secret $(oc get ctlog securesign-sample -o jsonpath='{.status.publicKeyRef.name}') -o jsonpath='{.data.public}' | base64 -d > $ACTIVE_CTFE_NAMEoc get secret $(oc get ctlog securesign-sample -o jsonpath='{.status.publicKeyRef.name}') -o jsonpath='{.data.public}' | base64 -d > $ACTIVE_CTFE_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 古い CT ログ署名者鍵を期限切れにします。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい CT ログ署名者鍵を追加します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの変更を TUF サーバーにアップロードします。
例
oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
新しいツリー識別子を使用して Securesign CT ログ設定を更新します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Securesign インスタンスにパッチを適用します。
例
oc patch Securesign securesign-sample --type='json' -p="$SECURESIGN_PATCH"
oc patch Securesign securesign-sample --type='json' -p="$SECURESIGN_PATCH"Copy to Clipboard Copied! Toggle word wrap Toggle overflow CT ログサーバーが再びデプロイされるまで待ちます。
例
oc wait pod -l app.kubernetes.io/name=ctlog --for=condition=Ready
oc wait pod -l app.kubernetes.io/name=ctlog --for=condition=ReadyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 作業ディレクトリーを削除します。
例
rm -r $WORK
rm -r $WORKCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新された TUF 設定で
cosign設定を更新します。例
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow これで、新しい CT ログ署名者鍵を使用してアーティファクトに署名し、検証する準備が整いました。
1.3.3. Fulcio 証明書のローテーション リンクのコピーリンクがクリップボードにコピーされました!
Fulcio サービスで使用される証明書をプロアクティブにローテーションできます。この手順では、古い Fulcio 証明書の有効期限を切れさせ、Red Hat Trusted Artifact Signer (RHTAS) が使用できるように新しい証明書に置き換える手順を説明します。古い Fulcio 証明書の有効期限が切れても、古い証明書で署名されたアーティファクトを検証することは可能です。
前提条件
- Red Hat OpenShift Container Platform 上で実行される RHTAS Operator をインストールする。
- Securesign インスタンスを実行する。
-
oc、openssl、cosignバイナリーがインストールされたワークステーション。
手順
OpenShift クラスターからワークステーションに
tuftoolバイナリーをダウンロードします。重要現在、
tuftoolバイナリーは、x86_64 アーキテクチャー上の Linux オペレーティングシステムでのみ使用できます。- ホームページから ? アイコンをクリックして、Command line tools をクリックし、tuftool ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip tuftool-amd64.gz chmod +x tuftool-amd64
gunzip tuftool-amd64.gz chmod +x tuftool-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv tuftool-amd64 /usr/local/bin/tuftool
sudo mv tuftool-amd64 /usr/local/bin/tuftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
コマンドラインから OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS プロジェクトに切り替えます。
例
oc project trusted-artifact-signer
oc project trusted-artifact-signerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい証明書と新しい公開鍵および秘密鍵を生成します。
例
openssl ecparam -genkey -name prime256v1 -noout -out new-fulcio.pem openssl ec -in new-fulcio.pem -pubout -out new-fulcio-public.pem openssl ec -in new-fulcio.pem -out new-fulcio.pass.pem -des3 -passout pass:"CHANGE_ME" openssl req -new -x509 -key new-fulcio.pass.pem -out new-fulcio.cert.pem
openssl ecparam -genkey -name prime256v1 -noout -out new-fulcio.pem openssl ec -in new-fulcio.pem -pubout -out new-fulcio-public.pem openssl ec -in new-fulcio.pem -out new-fulcio.pass.pem -des3 -passout pass:"CHANGE_ME" openssl req -new -x509 -key new-fulcio.pass.pem -out new-fulcio.cert.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しいパスワードに置き換えます。
重要証明書と新しい鍵には一意のファイル名が必要です。
新規シークレットを作成します。
例
oc create secret generic fulcio-config \ --from-file=private=new-fulcio.pass.pem \ --from-file=cert=new-fulcio.cert.pem \ --from-literal=password=CHANGE_ME
oc create secret generic fulcio-config \ --from-file=private=new-fulcio.pass.pem \ --from-file=cert=new-fulcio.cert.pem \ --from-literal=password=CHANGE_MECopy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しいパスワードに置き換えます。
注記ここでのパスワードは、新しい秘密鍵と公開鍵を生成するために使用したパスワードと同じものに指定する必要があります。
新しい Fulcio 証明書を使用するように The Update Framework (TUF) サービスを設定します。
シェル環境を設定します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一時的な TUF ディレクトリー構造を作成します。
例
mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}"oc extract --to "${KEYDIR}/" secret/tuf-root-keys oc cp "${TUF_SERVER_POD}:/var/www/html" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブな Fulcio 証明書ファイル名を見つけます。ローカル TUF リポジトリー内の最新のターゲットファイル (例:
1.targets.json) を開きます。このファイルには、アクティブな Fulcio 証明書ファイル名 (例:fulcio_v1.crt.pem) が記載されています。このアクティブな Fulcio 証明書ファイル名で環境変数を設定します。例
export ACTIVE_CERT_NAME=fulcio_v1.crt.pem
export ACTIVE_CERT_NAME=fulcio_v1.crt.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift からアクティブな Fulcio 証明書を抽出します。
例
oc get secret $(oc get fulcio securesign-sample -o jsonpath='{.status.certificate.caRef.name}') -o jsonpath='{.data.cert}' | base64 -d > $ACTIVE_CERT_NAMEoc get secret $(oc get fulcio securesign-sample -o jsonpath='{.status.certificate.caRef.name}') -o jsonpath='{.data.cert}' | base64 -d > $ACTIVE_CERT_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 古い証明書を期限切れにします。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい Fulcio 証明書を追加します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの変更を TUF サーバーにアップロードします。
例
oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作業ディレクトリーを削除します。
例
rm -r $WORK
rm -r $WORKCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Securesign Fulcio 設定を更新します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Securesign インスタンスにパッチを適用します。
例
oc patch Securesign securesign-sample --type='json' -p="$SECURESIGN_PATCH"
oc patch Securesign securesign-sample --type='json' -p="$SECURESIGN_PATCH"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Fulcio サーバーが再デプロイされるまで待ちます。
例
oc wait pod -l app.kubernetes.io/name=fulcio-server --for=condition=Ready oc wait pod -l app.kubernetes.io/name=ctlog --for=condition=Ready
oc wait pod -l app.kubernetes.io/name=fulcio-server --for=condition=Ready oc wait pod -l app.kubernetes.io/name=ctlog --for=condition=ReadyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新された TUF 設定で
cosign設定を更新します。例
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow これで、新しい Fulcio 証明書を使用してアーティファクトに署名し、検証する準備が整いました。
1.3.4. タイムスタンプ機関の署名者鍵と証明書チェーンのローテーション リンクのコピーリンクがクリップボードにコピーされました!
タイムスタンプ機関 (TSA) の署名者鍵と証明書チェーンをプロアクティブにローテーションできます。この手順では、古い TSA 署名者鍵と証明書チェーンを期限切れにし、Red Hat Trusted Artifact Signer (RHTAS) が使用できるように新しいものに置き換える手順を説明します。古い TSA 署名者鍵と証明書チェーンを期限切れにしても、古い鍵と証明書チェーンによって署名されたアーティファクトを検証することは可能です。
前提条件
- Red Hat OpenShift Container Platform 上で実行される RHTAS Operator をインストールする。
- Securesign インスタンスを実行する。
-
ocおよびopensslバイナリーがインストールされたワークステーション。
手順
OpenShift クラスターからワークステーションに
tuftoolバイナリーをダウンロードします。重要現在、
tuftoolバイナリーは、x86_64 アーキテクチャー上の Linux オペレーティングシステムでのみ使用できます。- ホームページから ? アイコンをクリックして、Command line tools をクリックし、tuftool ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip tuftool-amd64.gz chmod +x tuftool-amd64
gunzip tuftool-amd64.gz chmod +x tuftool-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv tuftool-amd64 /usr/local/bin/tuftool
sudo mv tuftool-amd64 /usr/local/bin/tuftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
コマンドラインから OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS プロジェクトに切り替えます。
例
oc project trusted-artifact-signer
oc project trusted-artifact-signerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい証明書チェーンと新しい署名者鍵を生成します。
重要新しい証明書と鍵には一意のファイル名が必要です。
一時作業ディレクトリーを作成します。
例
mkdir certs && cd certs
mkdir certs && cd certsCopy to Clipboard Copied! Toggle word wrap Toggle overflow ルート認証局 (CA) の秘密鍵を作成し、パスワードを設定します。
例
openssl req -x509 -newkey rsa:2048 -days 365 -sha256 -nodes \ -keyout rootCA.key.pem -out rootCA.crt.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=RootCA/CN=RootCA" \ -addext "basicConstraints=CA:true" -addext "keyUsage=cRLSign, keyCertSign"
openssl req -x509 -newkey rsa:2048 -days 365 -sha256 -nodes \ -keyout rootCA.key.pem -out rootCA.crt.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=RootCA/CN=RootCA" \ -addext "basicConstraints=CA:true" -addext "keyUsage=cRLSign, keyCertSign"Copy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しいパスワードに置き換えます。
中間 CA 秘密鍵と証明書署名要求 (CSR) を作成し、パスワードを設定します。
例
openssl req -newkey rsa:2048 -sha256 \ -keyout intermediateCA.key.pem -out intermediateCA.csr.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=IntermediateCA/CN=IntermediateCA"
openssl req -newkey rsa:2048 -sha256 \ -keyout intermediateCA.key.pem -out intermediateCA.csr.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=IntermediateCA/CN=IntermediateCA"Copy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しいパスワードに置き換えます。
ルート CA を使用して中間 CA 証明書に署名します。
例
openssl x509 -req -in intermediateCA.csr.pem -CA rootCA.crt.pem -CAkey rootCA.key.pem \ -CAcreateserial -out intermediateCA.crt.pem -days 365 -sha256 \ -extfile <(echo -e "basicConstraints=CA:true\nkeyUsage=cRLSign, keyCertSign\nextendedKeyUsage=critical,timeStamping") \ -passin pass:"CHANGE_ME"
openssl x509 -req -in intermediateCA.csr.pem -CA rootCA.crt.pem -CAkey rootCA.key.pem \ -CAcreateserial -out intermediateCA.crt.pem -days 365 -sha256 \ -extfile <(echo -e "basicConstraints=CA:true\nkeyUsage=cRLSign, keyCertSign\nextendedKeyUsage=critical,timeStamping") \ -passin pass:"CHANGE_ME"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 中間 CA 証明書に署名するには、CHANGE_ME をルート CA 秘密鍵のパスワードに置き換えます。
リーフ CA の秘密鍵と CSR を作成し、パスワードを設定します。
例
openssl req -newkey rsa:2048 -sha256 \ -keyout leafCA.key.pem -out leafCA.csr.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=LeafCA/CN=LeafCA"
openssl req -newkey rsa:2048 -sha256 \ -keyout leafCA.key.pem -out leafCA.csr.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=LeafCA/CN=LeafCA"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 中間 CA を使用してリーフ CA 証明書に署名します。
例
openssl x509 -req -in leafCA.csr.pem -CA intermediateCA.crt.pem -CAkey intermediateCA.key.pem \ -CAcreateserial -out leafCA.crt.pem -days 365 -sha256 \ -extfile <(echo -e "basicConstraints=CA:false\nkeyUsage=cRLSign, keyCertSign\nextendedKeyUsage=critical,timeStamping") \ -passin pass:"CHANGE_ME"
openssl x509 -req -in leafCA.csr.pem -CA intermediateCA.crt.pem -CAkey intermediateCA.key.pem \ -CAcreateserial -out leafCA.crt.pem -days 365 -sha256 \ -extfile <(echo -e "basicConstraints=CA:false\nkeyUsage=cRLSign, keyCertSign\nextendedKeyUsage=critical,timeStamping") \ -passin pass:"CHANGE_ME"Copy to Clipboard Copied! Toggle word wrap Toggle overflow リーフ CA 証明書に署名するには、CHANGE_ME を中間 CA 秘密鍵のパスワードに置き換えます。
新しく作成した証明書を組み合わせて証明書チェーンを作成します。
例
cat leafCA.crt.pem intermediateCA.crt.pem rootCA.crt.pem > new-tsa.certchain.pem
cat leafCA.crt.pem intermediateCA.crt.pem rootCA.crt.pem > new-tsa.certchain.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
署名者鍵を使用して新しいシークレットリソースを作成します。
例
oc create secret generic rotated-signer-key --from-file=rotated-signer-key=certs/leafCA.key.pem
oc create secret generic rotated-signer-key --from-file=rotated-signer-key=certs/leafCA.key.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい証明書チェーンを使用して新しいシークレットリソースを作成します。
例
oc create secret generic rotated-cert-chain --from-file=rotated-cert-chain=certs/new-tsa.certchain.pem
oc create secret generic rotated-cert-chain --from-file=rotated-cert-chain=certs/new-tsa.certchain.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow パスワード用の新しいシークレットリソースを作成します。
例
oc create secret generic rotated-password --from-literal=rotated-password=CHANGE_ME
oc create secret generic rotated-password --from-literal=rotated-password=CHANGE_MECopy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME を中間 CA 秘密鍵のパスワードに置き換えます。
アクティブな TSA 証明書ファイル名、TSA URL 文字列を見つけて、次の値を使用してシェル環境を設定します。
例
export ACTIVE_CERT_CHAIN_NAME=tsa.certchain.pem export TSA_URL=$(oc get timestampauthority securesign-sample -o jsonpath='{.status.url}')/api/v1/timestamp curl $TSA_URL/certchain -o $ACTIVE_CERT_CHAIN_NAMEexport ACTIVE_CERT_CHAIN_NAME=tsa.certchain.pem export TSA_URL=$(oc get timestampauthority securesign-sample -o jsonpath='{.status.url}')/api/v1/timestamp curl $TSA_URL/certchain -o $ACTIVE_CERT_CHAIN_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow Securesign TSA 設定を更新します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Securesign インスタンスにパッチを適用します。
例
oc patch Securesign securesign-sample --type='json' -p="$SECURESIGN_PATCH"
oc patch Securesign securesign-sample --type='json' -p="$SECURESIGN_PATCH"Copy to Clipboard Copied! Toggle word wrap Toggle overflow TSA サーバーが新しい署名者鍵と証明書チェーンを使用してもう一度デプロイされるのを待ちます。
例
oc get pods -w -l app.kubernetes.io/name=tsa-server
oc get pods -w -l app.kubernetes.io/name=tsa-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい証明書チェーンを取得します。
例
export NEW_CERT_CHAIN_NAME=new-tsa.certchain.pem curl $TSA_URL/certchain -o $NEW_CERT_CHAIN_NAME
export NEW_CERT_CHAIN_NAME=new-tsa.certchain.pem curl $TSA_URL/certchain -o $NEW_CERT_CHAIN_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい TSA 証明書チェーンを使用するように The Update Framework (TUF) サービスを設定します。
シェル環境を設定します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一時的な TUF ディレクトリー構造を作成します。
例
mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}"oc extract --to "${KEYDIR}/" secret/tuf-root-keys oc cp "${TUF_SERVER_POD}:/var/www/html" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 古い TSA 証明書を期限切れにします。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい TSA 証明書を追加します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの変更を TUF サーバーにアップロードします。
例
oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作業ディレクトリーを削除します。
例
rm -r $WORK
rm -r $WORKCopy to Clipboard Copied! Toggle word wrap Toggle overflow
更新された TUF 設定で
cosign設定を更新します。例
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow これで、新しい TSA 署名者鍵と証明書を使用するアーティファクトに署名して検証する準備が整いました。
1.4. 独自の認証局バンドルの使用 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat の Trusted Artifact Signer (RHTAS) サービスを使用して、ビルドアーティファクトの署名と検証に組織の認証局 (CA) バンドルを使用できます。
前提条件
- Red Hat OpenShift Container Platform 上で実行される RHTAS Operator をインストールする。
- Securesign インスタンスを実行する。
- CA ルート証明書。
-
ocバイナリーがインストールされているワークステーション。
手順
コマンドラインから OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS プロジェクトに切り替えます。
例
oc project trusted-artifact-signer
oc project trusted-artifact-signerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 組織の CA ルート証明書バンドルを使用して新しい ConfigMap を作成します。
例
oc create configmap custom-ca-bundle --from-file=ca-bundle.crt
oc create configmap custom-ca-bundle --from-file=ca-bundle.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要証明書ファイル名は
ca-bundle.crtである必要があります。編集のために Securesign リソースを開きます。
例
oc edit Securesign securesign-sample
oc edit Securesign securesign-sampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow metadata.annotationsセクションの下にrhtas.redhat.com/trusted-caを追加します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存してエディターを終了します。
Fulcio リソースを編集用に開きます。
例
oc edit Fulcio securesign-sample
oc edit Fulcio securesign-sampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow metadata.annotationsセクションの下にrhtas.redhat.com/trusted-caを追加します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存してエディターを終了します。
- アーティファクトに署名して検証する前に、RHTAS Operator が再設定するのを待ちます。
第2章 Red Hat Enterprise Linux リンクのコピーリンクがクリップボードにコピーされました!
2.1. 署名データの保護 リンクのコピーリンクがクリップボードにコピーされました!
システム管理者にとって、ハードウェア障害や誤ったデータ削除によるデータ損失が発生した場合、ソフトウェアサプライチェーンの署名データを保護することは非常に重要です。
Red Hat Enterprise Linux 上の Red Hat Trusted Artifact Signer (RHTAS) デプロイメントでは、署名データの暗号化されたバックアップをローカルファイルシステムに簡単に作成できます。
2.1.1. Trusted Artifact Signer データのバックアップ リンクのコピーリンクがクリップボードにコピーされました!
マウントされたファイルシステムへの Red Hat Trusted Artifact Signer (RHTAS) データの自動バックアップをスケジュールできます。データのバックアップは SSL で暗号化され、圧縮されます。
RHTAS サービスは、同時の手動バックアップおよび復元操作をサポートしていません。
前提条件
- Red Hat Enterprise Linux 9.4 以降。
- Ansible によって管理される Red Hat Enterprise Linux 上で実行される RHTAS のデプロイメント。
- 管理対象ノードに対するルートレベルの権限を持つ、管理対象ノードへの SSH 接続。
手順
- RHTAS Ansible Playbook を開いて編集します。
tas_single_node_backup_restore.backupセクションで、enabled変数をtrueに設定します。例
tas_single_node_backup_restore: backup: enabled: truetas_single_node_backup_restore: backup: enabled: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、毎日のバックアップジョブは毎日深夜に実行されます。スケジュールに合わせてこれを変更できます。
例
tas_single_node_backup_restore: backup: enabled: true schedule: "*-*-* 00:00:00"tas_single_node_backup_restore: backup: enabled: true schedule: "*-*-* 00:00:00"Copy to Clipboard Copied! Toggle word wrap Toggle overflow passphraseを設定し、ローカルバックアップディレクトリーを指定します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
オプション: 即時バックアップジョブを開始するには、
force_run変数をtrueに設定します。 - 変更を保存し、エディターを終了します。
変更を適用するには、RHTAS Ansible Playbook を実行します。
例
ansible-playbook -i inventory play.yml
ansible-playbook -i inventory play.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow バックアップが完了すると、暗号化され圧縮されたファイル名の形式は、
BACKUP-<date-and-time>-UTC.tar.gz.encです。
2.1.2. Trusted Artifact Signer データの復元 リンクのコピーリンクがクリップボードにコピーされました!
バックアップソースから Red Hat Trusted Artifact Signer (RHTAS) データのスナップショットを復元できます。
前提条件
- Red Hat Enterprise Linux 9.4 以降。
- Ansible によって管理される Red Hat Enterprise Linux 上で実行される RHTAS のデプロイメント。
- 管理対象ノードに対するルートレベルの権限を持つ、管理対象ノードへの SSH 接続。
- バックアップソースファイルがある。
- バックアップソースに使用されるパスフレーズを把握している。
手順
- バックアップデータファイルを Ansible コントロールノード上のディレクトリーにコピーします。
- RHTAS Ansible Playbook を開いて編集します。
tas_single_node_backup_restore.restoreセクションで、enabled変数をtrueに設定します。例
tas_single_node_backup_restore: ... restore: enabled: truetas_single_node_backup_restore: ... restore: enabled: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow バックアップファイルのソースの場所を指定し、正しいパスフレーズを入力します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
tas_single_node_backup_restore.backupセクションで、force_run変数がfalseになっていることを確認します。force_run変数がtrueの場合は、falseに設定します。 .変更を適用するには、RHTAS Ansible Playbook を実行します。
例
ansible-playbook -i inventory play.yml
ansible-playbook -i inventory play.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 復元プロセスが開始され、すべてのタスクが再実行され、RHTAS サービスの整合性が検証されます。
2.2. The Update Framework リンクのコピーリンクがクリップボードにコピーされました!
システム管理者として、Red Hat Trusted Artifact Signer (RHTAS) 向けの The Update Framework (TUF) の Red Hat の実装を理解することは、開発者向けのセキュアなコーディング環境を維持する上で重要です。コードベースでのミックスアンドマッチ攻撃を防ぐために、TUF のルートメタデータと非ルートメタデータを定期的に更新できます。TUF メタデータを更新することで、クライアントは古くなったファイルや改ざんされたファイルを検出して拒否できるようになります。
2.2.1. Trusted Artifact Signer による The Update Framework の実装 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Trusted Artifact Signer (RHTAS) バージョン 1.1 以降では、RHTAS サービスで使用される公開鍵と証明書を保存するための信頼されたルートとして The Update Framework (TUF) を実装しました。The Update Framework は、ソフトウェア更新システムを保護するための洗練されたフレームワークであり、提供されたアーティファクトを保護するのに最適です。The Update Framework は、RHTAS サービスを信頼されたルートターゲットとして参照します。信頼できるターゲットは 4 つで、RHTAS サービスごとに 1 つずつあります (Fulcio、Certificate Transparency (CT) ログ、Rekor、および Timestamp Authority (TSA))。cosign などのクライアントソフトウェアは、RHTAS 信頼ルートターゲットを使用してアーティファクト署名に署名し、検証します。シンプルな HTTP サーバーが公開鍵と証明書をクライアントソフトウェアに配布します。このシンプルな HTTP サーバーには、個々のターゲットの TUF リポジトリーがあります。
デフォルトでは、RHTAS を Red Hat OpenShift または Red Hat Enterprise Linux にデプロイするときに、TUF リポジトリーが作成され、個々のターゲットが事前に設定されます。デフォルトでは、すべてのメタデータファイルの有効期限は、RHTAS サービスをデプロイした時点から 52 週間です。Red Hat では、有効期限を短く選択し、公開鍵と証明書を頻繁にローテーションすることを推奨しています。これらのメンテナンスタスクを定期的に実行すると、コードベースへの攻撃を防ぐことができます。
2.2.2. The Update Framework のメタデータファイルの更新 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、The Update Framework (TUF) メタデータファイルは、Red Hat Trusted Artifact Signer (RHTAS) のデプロイメント日から 52 週間後に期限切れになります。少なくとも、有効期限が切れる前に 52 週間ごとに 1 回は TUF メタデータファイルを更新する必要があります。Red Hat では、メタデータファイルを 1 年に 1 回以上更新することを推奨しています。
この手順では、ルートメタデータファイルと非ルートメタデータファイルを更新する手順を説明します。
前提条件
- Ansible 管理の Red Hat Enterprise Linux (RHEL) 上で実行される RHTAS のインストール。
-
rsyncおよびpodmanバイナリーがインストールされたワークステーション。 - 管理対象ノードに対するルートレベルの権限を持つ、管理対象ノードへの SSH 接続。
手順
ローカルのコマンドラインインターフェイス (CLI) ツールのダウンロードページから
tuftoolバイナリーをワークステーションにダウンロードします。注記URL アドレスは、
tas_single_node_base_hostname変数によって定義された設定済みノードです。tas_single_node_base_hostnameの値がexample.comの場合、URL アドレスの例はhttps://cli-server.example.comです。重要現在、
tuftoolバイナリーは、x86_64 アーキテクチャー上の Linux オペレーティングシステムでのみ使用できます。- ダウンロードページから、tuftool のダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip tuftool-amd64.gz chmod +x tuftool-amd64
gunzip tuftool-amd64.gz chmod +x tuftool-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv tuftool-amd64 /usr/local/bin/tuftool
sudo mv tuftool-amd64 /usr/local/bin/tuftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
シェル環境を設定します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IP_OF_ANSIBLE_MANAGED_NODE と USER_TO_CONNECT_TO_MANAGED_NODE を適切な値に置き換えます。
要件に応じて有効期限を設定します。
一時的な TUF ディレクトリー構造を作成します。
例
mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow TUF コンテンツを一時的な TUF ディレクトリー構造にダウンロードします。
例
rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_KEYS_VOLUME}/" "${KEYDIR}" rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_TUF_VOLUME}/" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_KEYS_VOLUME}/" "${KEYDIR}" rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_TUF_VOLUME}/" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow タイムスタンプ、スナップショット、ターゲットのメタデータをすべて 1 つのコマンドで更新できます。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記TUF メタデータファイルのサブセットに対して TUF メタデータ更新を実行することもできます。たとえば、
timestamp.jsonメタデータファイルは、他のメタデータファイルよりも頻繁に期限切れになります。したがって、次のコマンドを実行するだけで、タイムスタンプメタデータファイルを更新できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルートの有効期限が切れそうな場合にのみ、有効期限を更新します。
例
tuftool root expire "${ROOT}" "${ROOT_EXPIRATION}"tuftool root expire "${ROOT}" "${ROOT_EXPIRATION}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ルートファイルの有効期限がまだ先の場合は、この手順をスキップできます。
ルートバージョンを更新します。
例
tuftool root bump-version "${ROOT}"tuftool root bump-version "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルートメタデータファイルに再度署名します。
例
tuftool root sign "${ROOT}" -k "${KEYDIR}/root.pem"tuftool root sign "${ROOT}" -k "${KEYDIR}/root.pem"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいルートバージョンを設定し、ルートメタデータファイルを所定の場所にコピーします。
例
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"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"Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの変更を TUF サーバーにアップロードします。
TUF リポジトリーの圧縮アーカイブを作成します。
例
tar -C "${WORK}" -czvf repository.tar.gz tuf-repotar -C "${WORK}" -czvf repository.tar.gz tuf-repoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次の 2 行を追加して RHTAS Ansible Playbook を更新します。
例
tas_single_node_trust_root: full_archive: "{{ lookup('file', 'repository.tar.gz') | b64encode }}"tas_single_node_trust_root: full_archive: "{{ lookup('file', 'repository.tar.gz') | b64encode }}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を適用するには、RHTAS Anisble Playbook を実行します。
例
ansible-playbook -i inventory play.yml
ansible-playbook -i inventory play.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3. 証明書と鍵のローテーション リンクのコピーリンクがクリップボードにコピーされました!
システム管理者は、Red Hat OpenShift 上で実行されている Red Hat Trusted Artifact Signer (RHTAS) サービスで使用される証明書と署名者鍵をプロアクティブにローテーションできます。定期的に鍵をローテーションすることで、鍵の改ざんや盗難を防ぐことができます。これらの手順では、古い証明書と署名者鍵を期限切れにし、RHTAS を設定する基盤となるサービス用の新しい証明書と署名者鍵に置き換える手順を説明します。次のサービスの鍵と証明書をローテーションできます。
- Rekor
- Certificate Transparency ログ
- Fulcio
- タイムスタンプ機関
2.3.1. Rekor 署名者鍵のローテーション リンクのコピーリンクがクリップボードにコピーされました!
シャーディング機能を使用してログツリーをフリーズし、新しい署名者鍵を使用して新しいログツリーを作成することで、Rekor の署名者鍵を積極的にローテーションできます。この手順では、古い Rekor 署名者鍵を期限切れにし、Red Hat Trusted Artifact Signer (RHTAS) が使用する新しい署名者鍵に置き換える手順を説明します。古い Rekor 署名者鍵の有効期限が切れても、古い鍵で署名されたアーティファクトを検証することは可能です。
この手順では、Rekor サービスを停止する必要があります。
前提条件
- Ansible 管理の Red Hat Enterprise Linux 上で実行される RHTAS のインストール。
-
rsync、openssl、cosignバイナリーがインストールされたワークステーション。 - 管理対象ノードに対するルートレベルの権限を持つ、管理対象ノードへの SSH 接続。
手順
ローカルのコマンドラインインターフェイス (CLI) ツールのダウンロードページから
rekor-cliバイナリーをワークステーションにダウンロードします。Web ブラウザーを開き、CLI サーバーの Web ページに移動します。
注記URL アドレスは、
tas_single_node_base_hostname変数によって定義された設定済みノードです。tas_single_node_base_hostnameの値がexample.comの場合、URL アドレスの例はhttps://cli-server.example.comです。- ダウンロードページから rekor-cli ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルから、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip rekor-cli-amd64.gz chmod +x rekor-cli-amd64
gunzip rekor-cli-amd64.gz chmod +x rekor-cli-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv rekor-cli-amd64 /usr/local/bin/rekor-cli
sudo mv rekor-cli-amd64 /usr/local/bin/rekor-cliCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ローカルコマンドラインインターフェイス (CLI) ツールのダウンロードページから
tuftoolバイナリーをワークステーションにダウンロードします。重要現在、
tuftoolバイナリーは、x86_64 アーキテクチャー上の Linux オペレーティングシステムでのみ使用できます。- ダウンロードページから、tuftool のダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルから、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip tuftool-amd64.gz chmod +x tuftool-amd64
gunzip tuftool-amd64.gz chmod +x tuftool-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv tuftool-amd64 /usr/local/bin/tuftool
sudo mv tuftool-amd64 /usr/local/bin/tuftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
シェル変数をベースホスト名と Rekor URL に割り当てます。
例
export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export REKOR_URL=https://rekor.${BASE_HOSTNAME}export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export REKOR_URL=https://rekor.${BASE_HOSTNAME}Copy to Clipboard Copied! Toggle word wrap Toggle overflow BASE_HOSTNAME_OF_RHTAS_SERVICE は
tas_single_node_base_hostname変数の値に置き換えます。アクティブシャードのログツリー識別子を取得します。
例
export OLD_TREE_ID=$(rekor-cli loginfo --rekor_server $REKOR_URL --format json | jq -r .TreeID)
export OLD_TREE_ID=$(rekor-cli loginfo --rekor_server $REKOR_URL --format json | jq -r .TreeID)Copy to Clipboard Copied! Toggle word wrap Toggle overflow シェル環境を設定します。
例
export MANAGED_NODE_IP=IP_OF_ANSIBLE_MANAGED_NODE export MANAGED_NODE_SSH_USER=USER_TO_CONNECT_TO_MANAGED_NODE export REMOTE_KEYS_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-signing-keys" | tr -d '[:space:]') export REMOTE_TUF_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-repository" | tr -d '[:space:]')export MANAGED_NODE_IP=IP_OF_ANSIBLE_MANAGED_NODE export MANAGED_NODE_SSH_USER=USER_TO_CONNECT_TO_MANAGED_NODE export REMOTE_KEYS_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-signing-keys" | tr -d '[:space:]') export REMOTE_TUF_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-repository" | tr -d '[:space:]')Copy to Clipboard Copied! Toggle word wrap Toggle overflow IP_OF_ANSIBLE_MANAGED_NODE と USER_TO_CONNECT_TO_MANAGED_NODE をご使用の環境の値に置き換えます。
ログツリーを
DRAINING状態に設定します。例
ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run --network=rhtas --rm registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --admin_server=trillian-logserver-pod:8091 --tree_id=${OLD_TREE_ID} --tree_state=DRAINING"ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run --network=rhtas --rm registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --admin_server=trillian-logserver-pod:8091 --tree_id=${OLD_TREE_ID} --tree_state=DRAINING"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ツリーログは、drain の実行中に新しいエントリーを受け入れません。キューが空になるまで待ちます。
重要次のステップに進む前に、キューが空になるまで待つ必要があります。drain の実行中にリーフがまだ統合中の場合、このプロセス中にログツリーをフリーズすると、ログパスが最大マージ遅延 (MMD) しきい値を超える可能性があります。
ログツリーをフリーズします。
例
ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run --network=rhtas --rm registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --tree_id=${OLD_TREE_ID} --admin_server=trillian-logserver-pod:8091 --tree_state=FROZEN"ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run --network=rhtas --rm registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --tree_id=${OLD_TREE_ID} --admin_server=trillian-logserver-pod:8091 --tree_state=FROZEN"Copy to Clipboard Copied! Toggle word wrap Toggle overflow フリーズしたログツリーの長さを取得します。
例
export OLD_SHARD_LENGTH=$(rekor-cli loginfo --rekor_server $REKOR_URL --format json | jq -r .ActiveTreeSize)
export OLD_SHARD_LENGTH=$(rekor-cli loginfo --rekor_server $REKOR_URL --format json | jq -r .ActiveTreeSize)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 古いシャードの Rekor の公開鍵を取得します。
例
export OLD_PUBLIC_KEY=$(curl -s $REKOR_URL/api/v1/log/publicKey | base64 | tr -d '\n')
export OLD_PUBLIC_KEY=$(curl -s $REKOR_URL/api/v1/log/publicKey | base64 | tr -d '\n')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいログツリーを作成します。
例
export NEW_TREE_ID=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run -q --network=rhtas --rm registry.redhat.io/rhtas/createtree-rhel9:1.1.0 --logtostderr=false --admin_server=trillian-logserver-pod:8091 --display_name=rekor-tree | tr -d '[:punct:][:blank:][:cntrl:]'")export NEW_TREE_ID=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run -q --network=rhtas --rm registry.redhat.io/rhtas/createtree-rhel9:1.1.0 --logtostderr=false --admin_server=trillian-logserver-pod:8091 --display_name=rekor-tree | tr -d '[:punct:][:blank:][:cntrl:]'")Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、ログツリーが 2 つ、フリーズしたツリーが 1 つ、およびアクティブなシャードになる新しいツリーが 1 つできました。
新しい秘密鍵と関連する公開鍵を作成します。
例
openssl ecparam -genkey -name secp384r1 -noout -out new-rekor.pem openssl ec -in new-rekor.pem -pubout -out new-rekor.pub export NEW_KEY_NAME=new-rekor.pub
openssl ecparam -genkey -name secp384r1 -noout -out new-rekor.pem openssl ec -in new-rekor.pem -pubout -out new-rekor.pub export NEW_KEY_NAME=new-rekor.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要新しい鍵には一意のファイル名が必要です。
アクティブな Rekor 署名鍵を取得し、その鍵をファイルに保存します。
例
rsync --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/certs/rekor-signer0.key ./rekor-signer0.key echo "$OLD_PUBLIC_KEY" | base64 -d > rekor.pubrsync --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/certs/rekor-signer0.key ./rekor-signer0.key echo "$OLD_PUBLIC_KEY" | base64 -d > rekor.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow RHTAS Ansible Playbook で Rekor 設定を更新します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい Rekor 公開鍵を使用するように The Update Framework (TUF) サービスを設定します。
シェル環境を設定します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一時的な TUF ディレクトリー構造を作成します。
例
mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow TUF コンテンツを一時的な TUF ディレクトリー構造にダウンロードします。
例
rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_KEYS_VOLUME}/" "${KEYDIR}" rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_TUF_VOLUME}/" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_KEYS_VOLUME}/" "${KEYDIR}" rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_TUF_VOLUME}/" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブな Rekor 署名者キーファイル名に環境変数を割り当てます。
例
export ACTIVE_KEY_NAME=rekor.pub
export ACTIVE_KEY_NAME=rekor.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 古い Rekor 署名者鍵を期限切れにします。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい Rekor 署名者鍵を追加します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新された TUF リポジトリーの圧縮アーカイブファイルを作成します。
例
tar -C "${WORK}" -czvf repository.tar.gz tuf-repotar -C "${WORK}" -czvf repository.tar.gz tuf-repoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい圧縮アーカイブファイル名を
tas_single_node_trust_root変数に追加して、RHTAS Ansible Playbook を更新します。例
tas_single_node_trust_root: full_archive: "{{ lookup('file', 'repository.tar.gz') | b64encode }}"tas_single_node_trust_root: full_archive: "{{ lookup('file', 'repository.tar.gz') | b64encode }}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作業ディレクトリーを削除します。
例
rm -r $WORK
rm -r $WORKCopy to Clipboard Copied! Toggle word wrap Toggle overflow
変更を適用するには、RHTAS Ansible Playbook を実行します。
例
ansible-playbook -i inventory play.yml
ansible-playbook -i inventory play.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新された TUF 設定で
cosign設定を更新します。例
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow これで、新しい Rekor 署名者鍵を使用してアーティファクトに署名し、検証する準備が整いました。
2.3.2. Certificate Transparency ログ署名者アギのローテーション リンクのコピーリンクがクリップボードにコピーされました!
シャーディング機能を使用してログツリーをフリーズし、新しい署名者鍵を使用して新しいログツリーを作成することにより、Certificate Transparency (CT) ログ署名者鍵をプロアクティブにローテーションできます。この手順では、古い CT ログ署名者鍵を期限切れにし、Red Hat Trusted Artifact Signer (RHTAS) が使用する新しい署名者鍵に置き換える手順を説明します。古い CT ログ署名者鍵の有効期限が切れても、古い鍵で署名されたアーティファクトを検証することは可能です。
前提条件
- Ansible 管理の Red Hat Enterprise Linux 上で実行される RHTAS のインストール。
-
rsync、openssl、cosignバイナリーがインストールされたワークステーション。 - 管理対象ノードに対するルートレベルの権限を持つ、管理対象ノードへの SSH 接続。
手順
ローカルコマンドラインインターフェイス (CLI) ツールのダウンロードページから
tuftoolバイナリーをワークステーションにダウンロードします。注記URL アドレスは、
tas_single_node_base_hostname変数によって定義された設定済みノードです。tas_single_node_base_hostnameの値がexample.comの場合、URL アドレスの例はhttps://cli-server.example.comです。重要現在、
tuftoolバイナリーは、x86_64 アーキテクチャー上の Linux オペレーティングシステムでのみ使用できます。- ダウンロードページから、tuftool のダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip tuftool-amd64.gz chmod +x tuftool-amd64
gunzip tuftool-amd64.gz chmod +x tuftool-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv tuftool-amd64 /usr/local/bin/tuftool
sudo mv tuftool-amd64 /usr/local/bin/tuftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
シェル環境を設定します。
例
export MANAGED_NODE_IP=IP_OF_ANSIBLE_MANAGED_NODE export MANAGED_NODE_SSH_USER=USER_TO_CONNECT_TO_MANAGED_NODE export REMOTE_KEYS_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-signing-keys" | tr -d '[:space:]') export REMOTE_TUF_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-repository" | tr -d '[:space:]') export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICEexport MANAGED_NODE_IP=IP_OF_ANSIBLE_MANAGED_NODE export MANAGED_NODE_SSH_USER=USER_TO_CONNECT_TO_MANAGED_NODE export REMOTE_KEYS_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-signing-keys" | tr -d '[:space:]') export REMOTE_TUF_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-repository" | tr -d '[:space:]') export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICECopy to Clipboard Copied! Toggle word wrap Toggle overflow BASE_HOSTNAME_OF_RHTAS_SERVICE は
tas_single_node_base_hostname変数の値に置き換えます。CTlog configuration map、CTlog キー、および Fulcio ルート証明書をワークステーションにダウンロードします。
例
rsync --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/configs/ctlog-config.yaml ./ctlog-config.yaml rsync --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/certs/ctlog0.key ./ctfe.key rsync --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/certs/ctlog0.pub ./ctfe.pub rsync --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/certs/fulcio.pem ./fulcio-0.pemrsync --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/configs/ctlog-config.yaml ./ctlog-config.yaml rsync --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/certs/ctlog0.key ./ctfe.key rsync --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/certs/ctlog0.pub ./ctfe.pub rsync --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/certs/fulcio.pem ./fulcio-0.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 現在のツリー識別子を取得します。
例
export OLD_TREE_ID=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo cat /etc/rhtas/configs/ctlog-treeid-config.yaml | grep 'tree_id:' | awk '{print \$2}'" | tr -d '[:punct:][:blank:][:cntrl:]')export OLD_TREE_ID=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo cat /etc/rhtas/configs/ctlog-treeid-config.yaml | grep 'tree_id:' | awk '{print \$2}'" | tr -d '[:punct:][:blank:][:cntrl:]')Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログツリーを
DRAINING状態に設定します。例
ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run --network=rhtas --rm registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --tree_id=${OLD_TREE_ID} --admin_server=trillian-logserver-pod:8091 --tree_state=DRAINING"ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run --network=rhtas --rm registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --tree_id=${OLD_TREE_ID} --admin_server=trillian-logserver-pod:8091 --tree_state=DRAINING"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ツリーログは、drain の実行中に新しいエントリーを受け入れません。キューが空になるまで待ちます。
重要次のステップに進む前に、キューが空になるまで待つ必要があります。drain の実行中にリーフがまだ統合中の場合、このプロセス中にログツリーをフリーズすると、ログパスが最大マージ遅延 (MMD) しきい値を超える可能性があります。
キューが完全に空になったら、ログをフリーズします。
例
ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run --network=rhtas --rm registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --tree_id=${OLD_TREE_ID} --admin_server=trillian-logserver-pod:8091 --tree_state=FROZEN"ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run --network=rhtas --rm registry.redhat.io/rhtas/updatetree-rhel9:1.1.0 --tree_id=${OLD_TREE_ID} --admin_server=trillian-logserver-pod:8091 --tree_state=FROZEN"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい Merkle ツリーを作成し、新しいツリー識別子を取得します。
例
export NEW_TREE_ID=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run -q --network=rhtas --rm registry.redhat.io/rhtas/createtree-rhel9:1.1.0 --logtostderr=false --admin_server=trillian-logserver-pod:8091 --display_name=ctlog-tree" | tr -d '[:punct:][:blank:][:cntrl:]')export NEW_TREE_ID=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman run -q --network=rhtas --rm registry.redhat.io/rhtas/createtree-rhel9:1.1.0 --logtostderr=false --admin_server=trillian-logserver-pod:8091 --display_name=ctlog-tree" | tr -d '[:punct:][:blank:][:cntrl:]')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい証明書と新しい公開鍵および秘密鍵を生成します。
例
openssl ecparam -genkey -name prime256v1 -noout -out new-ctlog.pem openssl ec -in new-ctlog.pem -pubout -out new-ctlog-public.pem openssl ec -in new-ctlog.pem -out new-ctlog.pass.pem -des3 -passout pass:"CHANGE_ME"
openssl ecparam -genkey -name prime256v1 -noout -out new-ctlog.pem openssl ec -in new-ctlog.pem -pubout -out new-ctlog-public.pem openssl ec -in new-ctlog.pem -out new-ctlog.pass.pem -des3 -passout pass:"CHANGE_ME"Copy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しいパスワードに置き換えます。
重要証明書と新しい鍵には一意のファイル名が必要です。
CT ログ設定を更新します。
- RHTAS Ansible Playbook を開いて編集します。
CTlog 署名者キーのローテーションを初めて設定する場合は、
tas_single_node_ctlog.sharding_configセクションに以下を追加する必要があります。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OLD_TREE_ID は、
$OLD_TREE_ID環境変数に含まれる内容に置き換えます。注記date +%s、およびdate +%Nのコマンドを実行すると、秒とナノ秒の現在の時刻値を取得できます。重要not_after_limitフィールドは、フリーズされたログだけのタイムスタンプ範囲の終了を定義します。この時点以降の証明書は、このログに含めることができなくなります。-
フリーズされたログブロックをコピーして貼り付け、
tas_single_node_ctlog.sharding_configセクションに追加して、新しいエントリーを作成します。 新しいログブロック内の次の行を変更します。
treeidを新しいツリー識別子に設定します。prefixはtrusted-artifact-signerに、private_keyパスはprivate-1に、not_after_limitはnot_after_startに変更してタイムスタンプの範囲を設定し、Fulcio が新しいログを利用できるようにtas_single_node_fulcio.ct_log_prefixを更新します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しい秘密鍵のパスワードに置き換えます。ここでのパスワードは、新しい秘密鍵と公開鍵を生成するために使用したパスワードと同じものに指定する必要があります。
重要not_after_startフィールドは、タイムスタンプ範囲の開始 (開始地点を含む) を定義します。これは、この時点でログが証明書の受け入れを開始することを意味します。
CTlog の
tas_single_node_ctlogセクションを更新して、新しいキーを管理対象ノードに配布します。例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい CT ログ公開鍵を使用するように The Update Framework (TUF) サービスを設定します。
シェル環境を設定します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一時的な TUF ディレクトリー構造を作成します。
例
mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow TUF コンテンツを一時的な TUF ディレクトリー構造にダウンロードします。
例
rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_KEYS_VOLUME}/" "${KEYDIR}" rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_TUF_VOLUME}/" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_KEYS_VOLUME}/" "${KEYDIR}" rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_TUF_VOLUME}/" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブな CT ログ署名者キーファイル名に環境変数を割り当てます。
例
export ACTIVE_CTFE_NAME=ctfe.pub
export ACTIVE_CTFE_NAME=ctfe.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 古い CT ログ署名者鍵を期限切れにします。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい CT ログ署名者鍵を追加します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新された TUF リポジトリーの圧縮アーカイブファイルを作成します。
例
tar -C "${WORK}" -czvf repository.tar.gz tuf-repotar -C "${WORK}" -czvf repository.tar.gz tuf-repoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい圧縮アーカイブファイル名を
tas_single_node_trust_root変数に追加して、RHTAS Ansible Playbook を更新します。例
tas_single_node_trust_root: full_archive: "{{ lookup('file', 'repository.tar.gz') | b64encode }}"tas_single_node_trust_root: full_archive: "{{ lookup('file', 'repository.tar.gz') | b64encode }}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Playbook への変更を保存し、テキストエディターを閉じます。
RHTAS Ansible Playbook を実行して変更を適用します。
例
ansible-playbook -i inventory play.yml
ansible-playbook -i inventory play.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 作業ディレクトリーを削除します。
例
rm -r $WORK
rm -r $WORKCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新された TUF 設定で
cosign設定を更新します。例
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow これで、新しい CT ログ署名者鍵を使用してアーティファクトに署名し、検証する準備が整いました。
2.3.3. Fulcio 証明書のローテーション リンクのコピーリンクがクリップボードにコピーされました!
Fulcio サービスで使用される証明書をプロアクティブにローテーションできます。この手順では、古い Fulcio 証明書の有効期限を切れさせ、Red Hat Trusted Artifact Signer (RHTAS) が使用できるように新しい証明書に置き換える手順を説明します。古い Fulcio 証明書の有効期限が切れても、古い証明書で署名されたアーティファクトを検証することは可能です。
前提条件
- Ansible 管理の Red Hat Enterprise Linux 上で実行される RHTAS のインストール。
-
rsync、openssl、cosignバイナリーがインストールされたワークステーション。 - 管理対象ノードに対するルートレベルの権限を持つ、管理対象ノードへの SSH 接続。
手順
ローカルコマンドラインインターフェイス (CLI) ツールのダウンロードページから
tuftoolバイナリーをワークステーションにダウンロードします。注記URL アドレスは、
tas_single_node_base_hostname変数によって定義された設定済みノードです。tas_single_node_base_hostnameの値がexample.comの場合、URL アドレスの例はhttps://cli-server.example.comです。重要現在、
tuftoolバイナリーは、x86_64 アーキテクチャー上の Linux オペレーティングシステムでのみ使用できます。- ダウンロードページから、tuftool のダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip tuftool-amd64.gz chmod +x tuftool-amd64
gunzip tuftool-amd64.gz chmod +x tuftool-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv tuftool-amd64 /usr/local/bin/tuftool
sudo mv tuftool-amd64 /usr/local/bin/tuftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
新しい証明書と新しい公開鍵および秘密鍵を生成します。
例
openssl ecparam -genkey -name prime256v1 -noout -out new-fulcio.pem openssl ec -in new-fulcio.pem -pubout -out new-fulcio-public.pem openssl ec -in new-fulcio.pem -out new-fulcio.pass.pem -des3 -passout pass:"CHANGE_ME" openssl req -new -x509 -key new-fulcio.pass.pem -out new-fulcio.cert.pem
openssl ecparam -genkey -name prime256v1 -noout -out new-fulcio.pem openssl ec -in new-fulcio.pem -pubout -out new-fulcio-public.pem openssl ec -in new-fulcio.pem -out new-fulcio.pass.pem -des3 -passout pass:"CHANGE_ME" openssl req -new -x509 -key new-fulcio.pass.pem -out new-fulcio.cert.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しいパスワードに置き換えます。
重要証明書と新しい鍵には一意のファイル名が必要です。
新しい秘密鍵ファイル名、新しい証明書の内容、およびパスワードを
tas_single_node_fulcio変数に追加して、RHTAS Ansible Playbook を更新します。例
tas_single_node_fulcio: root_ca: "{{ lookup('file', 'new-fulcio.cert.pem') }}" private_key: "{{ lookup('file', 'new-fulcio.pass.pem') }}" ca_passphrase: CHANGE_MEtas_single_node_fulcio: root_ca: "{{ lookup('file', 'new-fulcio.cert.pem') }}" private_key: "{{ lookup('file', 'new-fulcio.pass.pem') }}" ca_passphrase: CHANGE_MECopy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しいパスワードに置き換えます。
注記ここでのパスワードは、新しい秘密鍵と公開鍵を生成するために使用したパスワードと同じものに指定する必要があります。
注記パスフレーズはファイルから取得するか、Ansible Vault を使用して暗号化することを推奨します。
新しい Fulcio 証明書を使用するように The Update Framework (TUF) サービスを設定します。
シェル環境を設定します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一時的な TUF ディレクトリー構造を作成します。
例
mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow TUF コンテンツを一時的な TUF ディレクトリー構造にダウンロードします。
例
rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_KEYS_VOLUME}/" "${KEYDIR}" rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_TUF_VOLUME}/" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_KEYS_VOLUME}/" "${KEYDIR}" rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_TUF_VOLUME}/" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブな Fulcio 証明書ファイル名を見つけます。ローカル TUF リポジトリー内の最新のターゲットファイル (例:
1.targets.json) を開きます。このファイルには、アクティブな Fulcio 証明書ファイル名 (例:fulcio_v1.crt.pem) が記載されています。このアクティブな Fulcio 証明書ファイル名で環境変数を設定します。例
export ACTIVE_CERT_NAME=fulcio_v1.crt.pem
export ACTIVE_CERT_NAME=fulcio_v1.crt.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 管理対象ノードからアクティブな Fulico 証明書を取得します。
例
rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/certs/fulcio.pem "${ACTIVE_CERT_NAME}"rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:/etc/rhtas/certs/fulcio.pem "${ACTIVE_CERT_NAME}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 古い証明書を期限切れにします。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい Fulcio 証明書を追加します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新された TUF リポジトリーの圧縮アーカイブファイルを作成します。
例
tar -C "${WORK}" -czvf repository.tar.gz tuf-repotar -C "${WORK}" -czvf repository.tar.gz tuf-repoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい圧縮アーカイブファイルの内容を
tas_single_node_trust_root変数に追加して、RHTAS Ansible Playbook を更新します。例
tas_single_node_trust_root: full_archive: "{{ lookup('file', 'repository.tar.gz') | b64encode }}"tas_single_node_trust_root: full_archive: "{{ lookup('file', 'repository.tar.gz') | b64encode }}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作業ディレクトリーを削除します。
例
rm -r $WORK
rm -r $WORKCopy to Clipboard Copied! Toggle word wrap Toggle overflow
変更を適用するには、RHTAS Ansible Playbook を実行します。
例
ansible-playbook -i inventory play.yml
ansible-playbook -i inventory play.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新された TUF 設定で
cosign設定を更新します。例
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow これで、新しい Fulcio 証明書を使用してアーティファクトに署名し、検証する準備が整いました。
2.3.4. タイムスタンプ機関の署名者鍵と証明書チェーンのローテーション リンクのコピーリンクがクリップボードにコピーされました!
タイムスタンプ機関 (TSA) の署名者鍵と証明書チェーンをプロアクティブにローテーションできます。この手順では、古い TSA 署名者鍵と証明書チェーンを期限切れにし、Red Hat Trusted Artifact Signer (RHTAS) が使用できるように新しいものに置き換える手順を説明します。古い TSA 署名者鍵と証明書チェーンを期限切れにしても、古い鍵と証明書チェーンによって署名されたアーティファクトを検証することは可能です。
前提条件
- Ansible 管理の Red Hat Enterprise Linux 上で実行される RHTAS のインストール。
-
rsync、openssl、cosignバイナリーがインストールされたワークステーション。 - 管理対象ノードに対するルートレベルの権限を持つ、管理対象ノードへの SSH 接続。
手順
ローカルコマンドラインインターフェイス (CLI) ツールのダウンロードページから
tuftoolバイナリーをワークステーションにダウンロードします。注記URL アドレスは、
tas_single_node_base_hostname変数によって定義された設定済みノードです。tas_single_node_base_hostnameの値がexample.comの場合、URL アドレスの例はhttps://cli-server.example.comです。重要現在、
tuftoolバイナリーは、x86_64 アーキテクチャー上の Linux オペレーティングシステムでのみ使用できます。- ダウンロードページから、tuftool のダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gzファイルを展開し、実行ビットを設定します。例
gunzip tuftool-amd64.gz chmod +x tuftool-amd64
gunzip tuftool-amd64.gz chmod +x tuftool-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow バイナリーを
$PATH環境内の場所に移動し、名前を変更します。例
sudo mv tuftool-amd64 /usr/local/bin/tuftool
sudo mv tuftool-amd64 /usr/local/bin/tuftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
新しい証明書チェーンと新しい署名者鍵を生成します。
重要新しい証明書と鍵には一意のファイル名が必要です。
一時作業ディレクトリーを作成します。
例
mkdir certs && cd certs
mkdir certs && cd certsCopy to Clipboard Copied! Toggle word wrap Toggle overflow ルート認証局 (CA) の秘密鍵を作成し、パスワードを設定します。
例
openssl req -x509 -newkey rsa:2048 -days 365 -sha256 -nodes \ -keyout rootCA.key.pem -out rootCA.crt.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=RootCA/CN=RootCA" \ -addext "basicConstraints=CA:true" -addext "keyUsage=cRLSign, keyCertSign"
openssl req -x509 -newkey rsa:2048 -days 365 -sha256 -nodes \ -keyout rootCA.key.pem -out rootCA.crt.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=RootCA/CN=RootCA" \ -addext "basicConstraints=CA:true" -addext "keyUsage=cRLSign, keyCertSign"Copy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しいパスワードに置き換えます。
中間 CA 秘密鍵と証明書署名要求 (CSR) を作成し、パスワードを設定します。
例
openssl req -newkey rsa:2048 -sha256 \ -keyout intermediateCA.key.pem -out intermediateCA.csr.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=IntermediateCA/CN=IntermediateCA"
openssl req -newkey rsa:2048 -sha256 \ -keyout intermediateCA.key.pem -out intermediateCA.csr.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=IntermediateCA/CN=IntermediateCA"Copy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、新しいパスワードに置き換えます。
ルート CA を使用して中間 CA 証明書に署名します。
例
openssl x509 -req -in intermediateCA.csr.pem -CA rootCA.crt.pem -CAkey rootCA.key.pem \ -CAcreateserial -out intermediateCA.crt.pem -days 365 -sha256 \ -extfile <(echo -e "basicConstraints=CA:true\nkeyUsage=cRLSign, keyCertSign\nextendedKeyUsage=critical,timeStamping") \ -passin pass:"CHANGE_ME"
openssl x509 -req -in intermediateCA.csr.pem -CA rootCA.crt.pem -CAkey rootCA.key.pem \ -CAcreateserial -out intermediateCA.crt.pem -days 365 -sha256 \ -extfile <(echo -e "basicConstraints=CA:true\nkeyUsage=cRLSign, keyCertSign\nextendedKeyUsage=critical,timeStamping") \ -passin pass:"CHANGE_ME"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 中間 CA 証明書に署名するには、CHANGE_ME をルート CA 秘密鍵のパスワードに置き換えます。
リーフ CA の秘密鍵と CSR を作成し、パスワードを設定します。
例
openssl req -newkey rsa:2048 -sha256 \ -keyout leafCA.key.pem -out leafCA.csr.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=LeafCA/CN=LeafCA"
openssl req -newkey rsa:2048 -sha256 \ -keyout leafCA.key.pem -out leafCA.csr.pem \ -passout pass:"CHANGE_ME" \ -subj "/C=CC/ST=state/L=Locality/O=RH/OU=LeafCA/CN=LeafCA"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 中間 CA を使用してリーフ CA 証明書に署名します。
例
openssl x509 -req -in leafCA.csr.pem -CA intermediateCA.crt.pem -CAkey intermediateCA.key.pem \ -CAcreateserial -out leafCA.crt.pem -days 365 -sha256 \ -extfile <(echo -e "basicConstraints=CA:false\nkeyUsage=cRLSign, keyCertSign\nextendedKeyUsage=critical,timeStamping") \ -passin pass:"CHANGE_ME"
openssl x509 -req -in leafCA.csr.pem -CA intermediateCA.crt.pem -CAkey intermediateCA.key.pem \ -CAcreateserial -out leafCA.crt.pem -days 365 -sha256 \ -extfile <(echo -e "basicConstraints=CA:false\nkeyUsage=cRLSign, keyCertSign\nextendedKeyUsage=critical,timeStamping") \ -passin pass:"CHANGE_ME"Copy to Clipboard Copied! Toggle word wrap Toggle overflow リーフ CA 証明書に署名するには、CHANGE_ME を中間 CA 秘密鍵のパスワードに置き換えます。
新しく作成した証明書を組み合わせて証明書チェーンを作成します。
例
cat leafCA.crt.pem intermediateCA.crt.pem rootCA.crt.pem > new-tsa.certchain.pem
cat leafCA.crt.pem intermediateCA.crt.pem rootCA.crt.pem > new-tsa.certchain.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
新しい証明書チェーン、秘密鍵、およびパスワードを使用して RHTAS Playbook を更新します。
例
tas_single_node_tsa: certificate_chain: "{{ lookup('file', 'new-tsa.certchain.pem') }}" signer_private_key: "{{ lookup('file', 'leafCA.key.pem') }}" ca_passphrase: CHANGE_MEtas_single_node_tsa: certificate_chain: "{{ lookup('file', 'new-tsa.certchain.pem') }}" signer_private_key: "{{ lookup('file', 'leafCA.key.pem') }}" ca_passphrase: CHANGE_MECopy to Clipboard Copied! Toggle word wrap Toggle overflow CHANGE_ME は、リーフ CA 秘密鍵のパスワードに置き換えます。
注記Red Hat では、パスフレーズをファイルから取得するか、Ansible Vault を使用して暗号化することを推奨しています。
アクティブな TSA 証明書ファイル名、TSA URL 文字列を見つけて、次の値を使用してシェル環境を設定します。
例
export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export ACTIVE_CERT_CHAIN_NAME=tsa.certchain.pem export TSA_URL=https://tsa.${BASE_HOSTNAME}/api/v1/timestamp curl $TSA_URL/certchain -o $ACTIVE_CERT_CHAIN_NAMEexport BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export ACTIVE_CERT_CHAIN_NAME=tsa.certchain.pem export TSA_URL=https://tsa.${BASE_HOSTNAME}/api/v1/timestamp curl $TSA_URL/certchain -o $ACTIVE_CERT_CHAIN_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい TSA 証明書チェーンを使用するように The Update Framework (TUF) サービスを設定します。
シェル環境を設定します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一時的な TUF ディレクトリー構造を作成します。
例
mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow TUF コンテンツを一時的な TUF ディレクトリー構造にダウンロードします。
例
export REMOTE_KEYS_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-signing-keys" | tr -d '[:space:]') export REMOTE_TUF_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-repository" | tr -d '[:space:]') rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_KEYS_VOLUME}/" "${KEYDIR}" rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_TUF_VOLUME}/" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"export REMOTE_KEYS_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-signing-keys" | tr -d '[:space:]') export REMOTE_TUF_VOLUME=$(ssh ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP} -t "sudo podman volume mount tuf-repository" | tr -d '[:space:]') rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_KEYS_VOLUME}/" "${KEYDIR}" rsync -r --rsync-path="sudo rsync" ${MANAGED_NODE_SSH_USER}@${MANAGED_NODE_IP}:"${REMOTE_TUF_VOLUME}/" "${TUF_REPO}" cp "${TUF_REPO}/root.json" "${ROOT}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 古い TSA 証明書を期限切れにします。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい TSA 証明書を追加します。
例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新された TUF リポジトリーの圧縮アーカイブファイルを作成します。
例
tar -C "${WORK}" -czvf repository.tar.gz tuf-repotar -C "${WORK}" -czvf repository.tar.gz tuf-repoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい圧縮アーカイブファイル名を
tas_single_node_trust_root変数に追加して、RHTAS Ansible Playbook を更新します。例
tas_single_node_trust_root: full_archive: "{{ lookup('file', 'repository.tar.gz') | b64encode }}"tas_single_node_trust_root: full_archive: "{{ lookup('file', 'repository.tar.gz') | b64encode }}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作業ディレクトリーを削除します。
例
rm -r $WORK
rm -r $WORKCopy to Clipboard Copied! Toggle word wrap Toggle overflow
変更を適用するには、RHTAS Ansible Playbook を実行します。
例
ansible-playbook -i inventory play.yml
ansible-playbook -i inventory play.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新された TUF 設定で
cosign設定を更新します。例
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow これで、新しい TSA 署名者鍵と証明書を使用するアーティファクトに署名して検証する準備が整いました。
2.4. 独自の認証局バンドルの使用 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat の Trusted Artifact Signer (RHTAS) サービスを使用して、ビルドアーティファクトの署名と検証に組織の認証局 (CA) バンドルを使用できます。
前提条件
- Ansible 管理の Red Hat Enterprise Linux 上で実行される RHTAS のインストール。
- CA ルート証明書。
手順
- RHTAS Ansible Playbook を開いて編集します。
tas_single_node_fulcioセクションで、カスタム CA バンドルファイルを使用して、trusted_caを更新します。例
... tas_single_node_fulcio: trusted_ca: "{{ lookup('file', 'ca-bundle.crt') }}" ...... tas_single_node_fulcio: trusted_ca: "{{ lookup('file', 'ca-bundle.crt') }}" ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要証明書ファイル名は
ca-bundle.crtである必要があります。- 保存してエディターを終了します。
変更を適用するには、RHTAS Ansible Playbook を実行します。
例
ansible-playbook -i inventory play.yml
$ ansible-playbook -i inventory play.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第3章 オフライン環境で署名されたアーティファクトを検証する リンクのコピーリンクがクリップボードにコピーされました!
場合によっては、アーティファクトの信頼性を検証する必要がありますが、そのアーティファクトに署名した Red Hat Trusted Artifact Signer (RHTAS) サービスにアクセスできないことがあります。このような場合でも、オフライン検証を行うことでアーティファクトの署名を検証できます。
オフラインでのアーティファクト検証を開始する前に、RHTAS 署名環境とイメージレジストリーへのアクセスが必要です。オフライン環境では、署名環境と同じイメージレジストリーへのアクセスのみが必要です。
前提条件
- Red Hat OpenShift Container Platform 上、または Ansible 管理の Red Hat Enterprise Linux (RHEL) 上で実行される RHTAS のインストール。
-
cosign、tuftool、tar、sha256sumバイナリーがインストールされたワークステーション。 -
現在の署名環境での
cosignの初期化。
手順
署名環境で、次の手順を実行します。
cosignを使用してイメージに署名します。構文
cosign sign IMAGE_NAME:TAG
cosign sign IMAGE_NAME:TAGCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例
cosign sign -y ttl.sh/rhtas/example-image:1h
cosign sign -y ttl.sh/rhtas/example-image:1hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 信頼ルート URL を取得します。
Red Hat Enterprise Linux 上の RHTAS デプロイメントの場合:
例
export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export TUF_SERVER_URL=https://tuf.${BASE_HOSTNAME}export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export TUF_SERVER_URL=https://tuf.${BASE_HOSTNAME}Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat OpenShift Container Platform 上の RHTAS デプロイメントの場合:
例
export TUF_SERVER_URL="$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)"export TUF_SERVER_URL="$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
信頼ルートのクローンをローカルに作成します。
例
export TUF_REPOSITORY="${HOME}/repository" tuftool clone --allow-root-download --metadata-dir "${TUF_REPOSITORY}" --targets-dir "${TUF_REPOSITORY}/targets" --metadata-url "${TUF_SERVER_URL}" --targets-url "${TUF_SERVER_URL}/targets"export TUF_REPOSITORY="${HOME}/repository" tuftool clone --allow-root-download --metadata-dir "${TUF_REPOSITORY}" --targets-dir "${TUF_REPOSITORY}/targets" --metadata-url "${TUF_SERVER_URL}" --targets-url "${TUF_SERVER_URL}/targets"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 信頼ルートの圧縮アーカイブファイルを作成します。
例
tar -czvf repository.tar.gz "${TUF_REPOSITORY}" sha256sum repository.tar.gztar -czvf repository.tar.gz "${TUF_REPOSITORY}" sha256sum repository.tar.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow 後でオフライン環境で使用するために、チェックサムの出力をメモしておきます。
圧縮されたアーカイブファイルをオフライン環境にコピーします。
重要The Update Framework (TUF) メタデータファイルを更新するたび、または RHTAS コンポーネントキーと証明書をローテーションするたびに、Trust Root の圧縮アーカイブファイルをコピーする必要があります。
オフライン環境では、次の手順を実行します。
- 信頼ルートの圧縮アーカイブファイルをコピーしたディレクトリーに変更します。
署名環境のチェックサム値を使用してチェックサムを検証します。
例
echo "SHA256_CHECKSUM repository.tar.gz" > checksum.txt sha256sum --check checksum.txt || echo "Archive integrity compromised, don't continue with the procedure\!"
echo "SHA256_CHECKSUM repository.tar.gz" > checksum.txt sha256sum --check checksum.txt || echo "Archive integrity compromised, don't continue with the procedure\!"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要整合性チェックが成功した場合のみ続行します。
圧縮されたアーカイブファイルを展開します。
例
tar -xzvf repository.tar.gz
tar -xzvf repository.tar.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow
cosignを初期化します。例
cd repository/ cosign initialize --mirror=file://$(pwd)/ --root=$(pwd)/1.root.json
cd repository/ cosign initialize --mirror=file://$(pwd)/ --root=$(pwd)/1.root.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 署名されたアーティファクトを検証します。
例
export IMAGE="IMAGE_NAME:TAG" export SIGNING_EMAIL_ADDR=SIGNING_EMAIL_ADDRESS export SIGNING_OIDC_ISSUER=OIDC_ISSUER_URL cosign verify --certificate-identity="${SIGNING_EMAIL_ADDR}" --certificate-oidc-issuer="${SIGNING_OIDC_ISSUER}" "${IMAGE}"export IMAGE="IMAGE_NAME:TAG" export SIGNING_EMAIL_ADDR=SIGNING_EMAIL_ADDRESS export SIGNING_OIDC_ISSUER=OIDC_ISSUER_URL cosign verify --certificate-identity="${SIGNING_EMAIL_ADDR}" --certificate-oidc-issuer="${SIGNING_OIDC_ISSUER}" "${IMAGE}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
付録A 所有者参照の復元スクリプト リンクのコピーリンクがクリップボードにコピーされました!
この Bash スクリプトは、Red Hat Trusted Artifact Signer (RHTAS) データを別の OpenShift クラスターに復元するときに、ownerReferences を復元するためのものです。