デプロイメントガイド
Red Hat プラットフォーム用の Trusted Artifact Signer サービスのインストールと設定
概要
はじめに
Red Hat Trusted Artifact Signer デプロイメントガイドへようこそ。
これらの手順は、完全な Trusted Artifact Signer (RHTAS) ソフトウェアスタックのデプロイと、そのデプロイメントの確認に役立ちます。インストールプラットフォーム別に整理されたコンテンツ:
公式の RHTAS リリースノートは、こちら で確認できます。
第1章 Red Hat OpenShift Container Platform
1.1. OpenShift へのデプロイに関するリソースの推奨事項
ワークロードを最適化するには、Red Hat OpenShift に Red Hat Trusted Artifact Signer (RHTAS) をデプロイする前にインフラストラクチャーリソースのサイズを決定する方法を理解することが重要です。考慮すべき重要なインフラストラクチャー部分は、Trillian データベースで使用できる CPU の数とメモリーです。署名および検証の要求の数が増えると、CPU の負荷が増加し、Trillian データベースのメモリー使用量が増加します。
RHTAS で使用される Trillian データベースを実装するには、専用データベースと管理対象データベースの 2 つのオプションがあります。Red Hat では、実稼働環境のワークロードには専用のデータベースを、非実稼働環境のワークロードにはマネージドデータベースを推奨しています。最初に使用できるベースラインの CPU およびメモリーリソースは次のとおりです。
Dedicated
- 2 CPU コア
- 1 GB の RAM
- 5 GB のストレージ
Managed
- 4 CPU コア
- 2GB の RAM
- 10 GB のストレージ
1.2. Operator Lifecycle Manager を使用した Trusted Artifact Signer のインストール
Red Hat Trusted Artifact Signer (RHTAS) Operator をインストールし、OpenShift の Operator Lifecycle Manager (OLM) を使用して RHTAS サービスをデプロイできます。このデプロイメントは、OpenID Connect (OIDC) プロバイダーを選択できる基本的な署名フレームワークを提供します。Red Hat Single Sign-On (SSO)、Google、Amazon Secure Token Service (STS)、または GitHub のいずれかの OIDC プロバイダーを少なくとも 1 つ設定する必要があります。デフォルトを使用しない場合は、オプションでデータベースソリューションをカスタマイズすることもできます。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降。
-
cluster-admin
ロールでの OpenShift Web コンソールへのアクセス。 -
oc
バイナリーがインストールされているワークステーション。
手順
-
cluster-admin
ロールを持つユーザーで OpenShift Web コンソールにログインします。 - Administrator パースペクティブで、Operators ナビゲーションメニューを展開し、OperatorHub をクリックします。
- 検索フィールドに trusted と入力し、Red Hat Trusted Artifact Signer タイルをクリックします。
- Install ボタンをクリックして、Operator の詳細を表示します。
デフォルト値を受け入れ、Install Operator ページで Install をクリックし、インストールが完了するまで待ちます。
重要インストールが完了すると、新しいプロジェクトが自動的に作成されます。新しいプロジェクト名は
trusted-artifact-signer
です。注記Trusted Artifact Signer Operator は
openshift-operators
namespace にインストールされ、すべての依存関係が自動的にインストールされます。- オプション: デフォルトのデータベースの代わりに、Trusted Artifact Signer サービスに別のデータベースプロバイダーを使用できます。Amazon の Relational Database Service (RDS)、または OpenShift 上のデータベース (セルフマネージド) を使用する場合は、まずそちらの手順のいずれかを実行してから、このインストールを続行してください。他のデータベースプロバイダーのいずれかの設定が完了したら、この手順の次の手順に進むことができます。
Trusted Artifact Signer サービスをデプロイします。
- OpenShift Web コンソール内で、ナビゲーションメニューから Operator を展開し、Installed Operator をクリックします。
-
プロジェクトのドロップダウンボックスから、
trusted-artifact-signer
を選択します。 - Red Hat Trusted Artifact Signer をクリックします。
- Securesign タブをクリックし、Create Securesign ボタンをクリックします。
- Create Securesign ページで、YAML view を選択します。
このデプロイメント中に、Google OAuth、Amazon STS、Red Hat の SSO、Microsoft の Entra ID、GitHub OAuth などのさまざまな OIDC プロバイダーを初期 OIDC プロバイダーとして設定できます。
spec.fulcio.config.OIDCIssuers
セクションで、OIDC プロバイダー URL を含む次の 3 行を編集し、ClientID
を適切に設定します。例
... OIDCIssuers: - Issuer: 'OIDC_ISSUER_URL': ClientID: CLIENT_ID IssuerURL: 'OIDC_ISSUER_URL' Type: email ...
... OIDCIssuers: - Issuer: 'OIDC_ISSUER_URL': ClientID: CLIENT_ID IssuerURL: 'OIDC_ISSUER_URL' Type: email ...
Copy to Clipboard Copied! 注記Red Hat の SSO がすでに OIDC プロバイダーとして実装されている場合は、次のコマンドを実行して発行者の URL を見つけます。
echo https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer
echo https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer
Copy to Clipboard Copied! ClientID
をtrusted-artifact-signer
に設定します。重要同じ設定で複数の異なる OIDC プロバイダーを定義できます。
オプション: デフォルト以外のデータベースを使用することを選択した場合は、
spec.trillian
セクションでcreate
をfalse
に設定し、データベースシークレットオブジェクトの名前を指定します。例
... trillian: database: create: false databaseSecretRef: name: trillian-mysql ...
... trillian: database: create: false databaseSecretRef: name: trillian-mysql ...
Copy to Clipboard Copied! - Create ボタンをクリックします。
All instances タブをクリックして、CTlog、Fulcio、Rekor、Trillian、および TUF インスタンスの準備ができるまでデプロイメントステータスを監視します。
注記Securesign インスタンスからは、ステータスはわかりません。
- OpenShift コンソールで Prometheus を使用すると、新しい Trusted Artifact Signer サービスの健全性を確認できます。ナビゲーションメニューから Observe を展開し、Dashboards をクリックします。
- コンテナーイメージ または Git コミット に署名して、インストールを検証します。
1.3. 信頼できるアーティファクト署名のインストールの確認
システム管理者として、Red Hat OpenShift Container Platform 上で実行されている Red Hat Trusted Artifact Signer (RHTAS) のデプロイメントが成功したかどうかを確認できます。
テストコンテナーイメージに署名し、その署名の信頼性を検証して、環境内での RHTAS のデプロイメントを検証できます。
コードパイプラインからアーティファクトビルドに署名する方法は 2 つ、検証する方法は 3 つあります。cosign
と gitsign
を使用して署名および検証できますが、検証できるのは Enterprise Contract のみです。
1.3.1. コマンドラインインターフェイスから Cosign を使用したコンテナーの署名と検証
cosign
ツールを使用すると、Red Hat の Trusted Artifact Signer (RHTAS) サービスを使用して、Open Container Initiative (OCI) コンテナーイメージや他のビルドアーティファクトに署名し、検証する機能が提供されます。
RHTAS の場合、cosign
バージョン 2.2 以降を使用する必要があります。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降への RHTAS インストール。
- OpenShift Web コンソールへのアクセス。
-
oc
およびpodman
バイナリーがインストールされたワークステーション。
手順
OpenShift クラスターからワークステーションに
cosign
バイナリーをダウンロードします。- OpenShift Web コンソールにログインします。ホームページから ? アイコンをクリックして、Command line tools をクリックし、cosign ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gz
ファイルを展開し、実行ビットを設定します。例
gunzip cosign-amd64.gz chmod +x cosign-amd64
gunzip cosign-amd64.gz chmod +x cosign-amd64
Copy to Clipboard Copied! バイナリーを
$PATH
環境内の場所に移動し、名前を変更します。例
sudo mv cosign-amd64 /usr/local/bin/cosign
sudo mv cosign-amd64 /usr/local/bin/cosign
Copy to Clipboard Copied!
OpenShift クラスターにログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS プロジェクトに切り替えます。
構文
oc project PROJECT_NAME
oc project PROJECT_NAME
Copy to Clipboard Copied! 例
oc project trusted-artifact-signer
oc project trusted-artifact-signer
Copy to Clipboard Copied! 注記RHTAS インストールのプロジェクト名を使用します。
コンテナーイメージの署名と検証を行うためにシェル環境を設定します。
例
export TUF_URL="https://tuf.${BASE_HOSTNAME}" export OIDC_ISSUER_URL=https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
export TUF_URL="https://tuf.${BASE_HOSTNAME}" export OIDC_ISSUER_URL=https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
Copy to Clipboard Copied! The Update Framework (TUF) システムを初期化します。
例
cosign initialize
cosign initialize
Copy to Clipboard Copied! テストコンテナーイメージに署名します。
空のコンテナーイメージを作成します。
例
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 空のコンテナーイメージを
ttl.sh
一時レジストリーにプッシュします。例
podman push ttl.sh/rhtas/test-image:1h
podman push ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! コンテナーイメージに署名します。
構文
cosign sign -y IMAGE_NAME:TAG
cosign sign -y IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign sign -y ttl.sh/rhtas/test-image:1h
cosign sign -y ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Web ブラウザーが開いて、コンテナーイメージをメールアドレスで署名できます。
一時的な Docker ファイルを削除します。
例
rm ./tmp.Dockerfile
rm ./tmp.Dockerfile
Copy to Clipboard Copied!
証明書 ID と発行者を使用して、署名済みコンテナーイメージを確認します。
構文
cosign verify --certificate-identity=SIGNING_EMAIL_ADDR IMAGE_NAME:TAG
cosign verify --certificate-identity=SIGNING_EMAIL_ADDR IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign verify --certificate-identity=jdoe@redhat.com ttl.sh/rhtas/test-image:1h
cosign verify --certificate-identity=jdoe@redhat.com ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 注記cosign
コマンドと--certificate-identity-regexp
および--certificate-oidc-issuer-regexp
オプションを使用して、証明書の ID と発行者に正規表現を使用することもできます。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-amd64
Copy to Clipboard Copied! バイナリーを
$PATH
環境内の場所に移動し、名前を変更します。例
sudo mv rekor-cli-amd64 /usr/local/bin/rekor-cli
sudo mv rekor-cli-amd64 /usr/local/bin/rekor-cli
Copy to Clipboard Copied!
Rekor コマンドラインインターフェイスを使用して透明性ログをクエリーします。
ログインデックスに基づき検索します。
例
rekor-cli get --log-index 0 --rekor_server $COSIGN_REKOR_URL --format json | jq
rekor-cli get --log-index 0 --rekor_server $COSIGN_REKOR_URL --format json | jq
Copy to Clipboard Copied! ユニバーサルユニーク ID (UUID) を取得するために、メールアドレスを検索します。
構文
rekor-cli search --email SIGNING_EMAIL_ADDR --rekor_server $COSIGN_REKOR_URL --format json | jq
rekor-cli search --email SIGNING_EMAIL_ADDR --rekor_server $COSIGN_REKOR_URL --format json | jq
Copy to Clipboard Copied! 例
rekor-cli search --email jdoe@redhat.com --rekor_server $COSIGN_REKOR_URL --format json | jq
rekor-cli search --email jdoe@redhat.com --rekor_server $COSIGN_REKOR_URL --format json | jq
Copy to Clipboard Copied! このコマンドは、次の手順で使用する UUID を返します。
UUID を使用してトランザクションの詳細を取得します。
構文
rekor-cli get --uuid UUID --rekor_server $COSIGN_REKOR_URL --format json | jq
rekor-cli get --uuid UUID --rekor_server $COSIGN_REKOR_URL --format json | jq
Copy to Clipboard Copied! 例
rekor-cli get --uuid 24296fb24b8ad77a71b9c1374e207537bafdd75b4f591dcee10f3f697f150d7cc5d0b725eea641e7 --rekor_server $COSIGN_REKOR_URL --format json | jq
rekor-cli get --uuid 24296fb24b8ad77a71b9c1374e207537bafdd75b4f591dcee10f3f697f150d7cc5d0b725eea641e7 --rekor_server $COSIGN_REKOR_URL --format json | jq
Copy to Clipboard Copied!
1.3.2. コマンドラインインターフェイスから Gitsign を使用したコミットの署名および検証
gitsign
ツールを使用すると、Red Hat の Trusted Artifact Signer (RHTAS) サービスを使用して、Git リポジトリーのコミットに署名し、検証することができます。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降への RHTAS インストール。
- OpenShift Web コンソールへのアクセス。
oc
、git
、cosign
バイナリーがインストールされたワークステーション。-
cosign
バージョン 2.2 以降を使用する必要があります。
-
手順
OpenShift クラスターからワークステーションに
gitsign
バイナリーをダウンロードします。- OpenShift Web コンソールにログインします。ホームページから、? をクリックします。アイコンをクリックして、Command line tools をクリックし、gitsign ダウンロードセクションに移動して、お使いのプラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、.gz ファイルを展開して、実行ビットを設定します。
例
gunzip gitsign-amd64.gz chmod +x gitsign-amd64
gunzip gitsign-amd64.gz chmod +x gitsign-amd64
Copy to Clipboard Copied! バイナリーを
$PATH
環境内の場所に移動し、名前を変更します。例
sudo mv gitsign-amd64 /usr/local/bin/gitsign
sudo mv gitsign-amd64 /usr/local/bin/gitsign
Copy to Clipboard Copied!
OpenShift クラスターにログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS プロジェクトに切り替えます。
構文
oc project PROJECT_NAME
oc project PROJECT_NAME
Copy to Clipboard Copied! 例
oc project trusted-artifact-signer
oc project trusted-artifact-signer
Copy to Clipboard Copied! 注記RHTAS インストールのプロジェクト名を使用します。
コミットの署名と検証を行うためにシェル環境を設定します。
例
export TUF_URL=$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export OIDC_ISSUER_URL=https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
export TUF_URL=$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export OIDC_ISSUER_URL=https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
Copy to Clipboard Copied! RHTAS サービスを使用してコミットに署名するようにローカルリポジトリー設定を指定します。
例
git config --local commit.gpgsign true git config --local tag.gpgsign true git config --local gpg.x509.program gitsign git config --local gpg.format x509 git config --local gitsign.fulcio $SIGSTORE_FULCIO_URL git config --local gitsign.rekor $SIGSTORE_REKOR_URL git config --local gitsign.issuer $SIGSTORE_OIDC_ISSUER git config --local gitsign.clientID trusted-artifact-signer
git config --local commit.gpgsign true git config --local tag.gpgsign true git config --local gpg.x509.program gitsign git config --local gpg.format x509 git config --local gitsign.fulcio $SIGSTORE_FULCIO_URL git config --local gitsign.rekor $SIGSTORE_REKOR_URL git config --local gitsign.issuer $SIGSTORE_OIDC_ISSUER git config --local gitsign.clientID trusted-artifact-signer
Copy to Clipboard Copied! ローカルリポジトリーにコミットを作成します。
例
git commit --allow-empty -S -m “Test of a signed commit”
git commit --allow-empty -S -m “Test of a signed commit”
Copy to Clipboard Copied! Web ブラウザーが開いて、メールアドレスでコミットに署名できます。
The Update Framework (TUF) システムを初期化します。
例
cosign initialize
cosign initialize
Copy to Clipboard Copied! コミットを確認します。
構文
gitsign verify --certificate-identity=SIGNING_EMAIL --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
gitsign verify --certificate-identity=SIGNING_EMAIL --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
Copy to Clipboard Copied! 例
gitsign verify --certificate-identity=jdoe@redhat.com --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
gitsign verify --certificate-identity=jdoe@redhat.com --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
Copy to Clipboard Copied!
1.3.3. エンタープライズコントラクトを使用したコンテナーイメージの署名の検証
Enterprise Contract (EC) は、ソフトウェアサプライチェーンのセキュリティーを維持するためのツールであり、これを使用してコンテナーイメージのポリシーを定義および適用できます。ec
バイナリーを使用すると、Red Hat の Trusted Artifact Signer (RHTAS) 署名フレームワークを使用するコンテナーイメージのアテステーションと署名を検証できます。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降への RHTAS インストール。
- OpenShift Web コンソールへのアクセス。
oc
、cosign
、およびpodman
バイナリーがインストールされたワークステーション。-
cosign
バージョン 2.2 以降を使用する必要があります。
-
手順
OpenShift クラスターから
ec
バイナリーをダウンロードします。- OpenShift Web コンソールにログインします。ホームページから ? アイコンをクリックし、Command line tools をクリックして、ec ダウンロードセクションに移動してから、お使いのプラットフォームへのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー .gz ファイルを展開し、実行ビットを設定します。
例
gunzip ec-amd64.gz chmod +x ec-amd64
gunzip ec-amd64.gz chmod +x ec-amd64
Copy to Clipboard Copied! バイナリーを
$PATH
環境内の場所に移動し、名前を変更します。例
sudo mv ec-amd64 /usr/local/bin/ec
sudo mv ec-amd64 /usr/local/bin/ec
Copy to Clipboard Copied!
OpenShift クラスターにログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS プロジェクトに切り替えます。
構文
oc project PROJECT_NAME
oc project PROJECT_NAME
Copy to Clipboard Copied! 例
oc project trusted-artifact-signer
oc project trusted-artifact-signer
Copy to Clipboard Copied! 注記RHTAS インストールのプロジェクト名を使用します。
コンテナーイメージの署名と検証を行うためにシェル環境を設定します。
例
export TUF_URL=$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export OIDC_ISSUER_URL=https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
export TUF_URL=$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export OIDC_ISSUER_URL=https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
Copy to Clipboard Copied! The Update Framework (TUF) システムを初期化します。
例
cosign initialize
cosign initialize
Copy to Clipboard Copied! テストコンテナーイメージに署名します。
空のコンテナーイメージを作成します。
例
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 空のコンテナーイメージを
ttl.sh
一時レジストリーにプッシュします。例
podman push ttl.sh/rhtas/test-image:1h
podman push ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! コンテナーイメージに署名します。
構文
cosign sign -y IMAGE_NAME:TAG
cosign sign -y IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign sign -y ttl.sh/rhtas/test-image:1h
cosign sign -y ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Web ブラウザーが開いて、コンテナーイメージをメールアドレスで署名できます。
一時的な Docker ファイルを削除します。
例
rm ./tmp.Dockerfile
rm ./tmp.Dockerfile
Copy to Clipboard Copied!
predicate.json
ファイルを作成します。例
{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://example.com/tekton-pipeline", "invocation": {}, "buildConfig": {}, "metadata": { "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] }
{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://example.com/tekton-pipeline", "invocation": {}, "buildConfig": {}, "metadata": { "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] }
Copy to Clipboard Copied! スキーマレイアウトの詳細は、SLSA provenance predicate specifications を参照してください。
predicate.json
ファイルをコンテナーイメージに関連付けます。構文
cosign attest -y --predicate ./predicate.json --type slsaprovenance IMAGE_NAME:TAG
cosign attest -y --predicate ./predicate.json --type slsaprovenance IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign attest -y --predicate ./predicate.json --type slsaprovenance ttl.sh/rhtas/test-image:1h
cosign attest -y --predicate ./predicate.json --type slsaprovenance ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! コンテナーイメージにアテステーションと署名が 1 つ以上含まれていることを確認します。
構文
cosign tree IMAGE_NAME:TAG
cosign tree IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign tree ttl.sh/rhtas/test-image:1h 📦 Supply Chain Security Related artifacts for an image: ttl.sh/rhtas/test-image@sha256:7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35 └── 💾 Attestations for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.att └── 🍒 sha256:40d94d96a6d3ab3d94b429881e1b470ae9a3cac55a3ec874051bdecd9da06c2e └── 🔐 Signatures for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.sig └── 🍒 sha256:f32171250715d4538aec33adc40fac2343f5092631d4fc2457e2116a489387b7
cosign tree ttl.sh/rhtas/test-image:1h 📦 Supply Chain Security Related artifacts for an image: ttl.sh/rhtas/test-image@sha256:7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35 └── 💾 Attestations for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.att └── 🍒 sha256:40d94d96a6d3ab3d94b429881e1b470ae9a3cac55a3ec874051bdecd9da06c2e └── 🔐 Signatures for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.sig └── 🍒 sha256:f32171250715d4538aec33adc40fac2343f5092631d4fc2457e2116a489387b7
Copy to Clipboard Copied! Enterprise Contact を使用してコンテナーイメージを確認します。
構文
ec validate image --image IMAGE_NAME:TAG --certificate-identity-regexp 'SIGNER_EMAIL_ADDR' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes
ec validate image --image IMAGE_NAME:TAG --certificate-identity-regexp 'SIGNER_EMAIL_ADDR' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes
Copy to Clipboard Copied! 例
ec validate image --image ttl.sh/rhtas/test-image:1h --certificate-identity-regexp 'jdoe@example.com' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes success: true successes: - metadata: code: builtin.attestation.signature_check msg: Pass - metadata: code: builtin.attestation.syntax_check msg: Pass - metadata: code: builtin.image.signature_check msg: Pass ec-version: v0.1.2427-499ef12 effective-time: "2024-01-21T19:57:51.338191Z" key: "" policy: {} success: true
ec validate image --image ttl.sh/rhtas/test-image:1h --certificate-identity-regexp 'jdoe@example.com' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes success: true successes: - metadata: code: builtin.attestation.signature_check msg: Pass - metadata: code: builtin.attestation.syntax_check msg: Pass - metadata: code: builtin.image.signature_check msg: Pass ec-version: v0.1.2427-499ef12 effective-time: "2024-01-21T19:57:51.338191Z" key: "" policy: {} success: true
Copy to Clipboard Copied! エンタープライズコントラクトは、セキュリティー違反の詳細を含む pass-fail レポートを生成します。
--info
フラグを追加すると、レポートには、検出された違反に対する詳細と考えられる解決策が含まれます。
関連情報
- 詳細は、Conforma の Web サイト を参照してください。
1.4. 追加の OpenID Connect プロバイダーの設定
システム管理者は、Red Hat の Trusted Artifact Signer サービスで使用するために、さまざまな OpenID Connect (OIDC) プロバイダーを設定できます。ユーザーを認証するために、次の OIDC プロバイダーを設定できます。
- Red Hat build of Keycloak
- Red Hat Single Sign-on (SSO)
- Amazon Security Token Service (STS)
- Microsoft Entra ID
- GitHub
1.4.1. Google を Trusted Artifact Signer の OpenID Connect プロバイダーとして設定する手順
Google OAuth 2.0 を Red Hat の Trusted Artifact Signer (RHTAS) サービスの OpenID Connect (OIDC) プロバイダーとして使用できます。RHTAS のデプロイメント中、または後で Google OAuth を設定するかどうかを決定できます。
同じ設定で複数の異なる OIDC プロバイダーを定義できます。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降。
-
cluster-admin
ロールでの OpenShift Web コンソールへのアクセス。 -
oc
およびpodman
バイナリーがインストールされたワークステーション。 Google Cloud Console から、次の設定を使用して OAuth クライアント ID を作成している。
- アプリケーションタイプを “Web Application” に設定します。
- 承認されたリダイレクト URI には http://localhost/auth/callback が含まれている必要があります。
手順
ワークステーションでターミナルを開き、OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS 設定を更新します。
Securesign
リソースを開いて編集します。構文
oc edit Securesign NAME -n NAMESPACE
oc edit Securesign NAME -n NAMESPACE
Copy to Clipboard Copied! 例
oc edit Securesign securesign-sample -n trusted-artifact-signer
oc edit Securesign securesign-sample -n trusted-artifact-signer
Copy to Clipboard Copied! 注記RHTAS インストール用に作成されたプロジェクト名を namespace として使用する必要があります。
OIDCIssuers
セクションで、Google クライアント ID、発行者の URL を含む新しいサブセクションを追加し、Type
値をemail
に設定します。構文
... OIDCIssuers: - Issuer: "https://accounts.google.com" IssuerURL: "https://accounts.google.com" ClientID: "CLIENT_ID" Type: email ...
... OIDCIssuers: - Issuer: "https://accounts.google.com" IssuerURL: "https://accounts.google.com" ClientID: "CLIENT_ID" Type: email ...
Copy to Clipboard Copied! Google クライアント識別子を
ClientID
フィールドに追加します。- 変更を保存し、エディターを終了します。数秒後、Operator は RHTAS ソフトウェアスタックを自動的に再設定します。
OIDC 発行者とクライアント ID 環境変数を Google を使用するように変更します。
例
export OIDC_ISSUER_URL=https://accounts.google.com export COSIGN_OIDC_CLIENT_ID="314919563931-35zke44ouf2oiztjg7v8o8c2ge9usnd1.apps.googleexample.com"
export OIDC_ISSUER_URL=https://accounts.google.com export COSIGN_OIDC_CLIENT_ID="314919563931-35zke44ouf2oiztjg7v8o8c2ge9usnd1.apps.googleexample.com"
Copy to Clipboard Copied! Google コンソールからプレーンテキストファイルにシークレットをコピーして貼り付けます。
構文
echo SECRET > my-google-client-secret
echo SECRET > my-google-client-secret
Copy to Clipboard Copied! RHTAS サービスがすでに実行されている場合は、テストコンテナーイメージに署名して更新された設定を確認できます。
空のコンテナーイメージを作成します。
例
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 空のコンテナーイメージを
ttl.sh
一時レジストリーにプッシュします。例
podman push ttl.sh/rhtas/test-image:1h
podman push ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 一時的な Docker ファイルを削除します。
例
rm ./tmp.Dockerfile
rm ./tmp.Dockerfile
Copy to Clipboard Copied! コンテナーイメージに署名します。
構文
cosign sign -y --oidc-client-secret-file=SECRET_FILE IMAGE_NAME:TAG
cosign sign -y --oidc-client-secret-file=SECRET_FILE IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign sign -y --oidc-client-secret-file=my-google-client-secret ttl.sh/rhtas/test-image:1h
cosign sign -y --oidc-client-secret-file=my-google-client-secret ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Web ブラウザーが開いて、コンテナーイメージをメールアドレスで署名できます。
1.4.2. Red Hat SSO を Trusted Artifact Signer の OpenID Connect プロバイダーとして設定する手順
Red Hat Single Sign-On (SSO) を、Red Hat Trusted Artifact Signer (RHTAS) サービスの OpenID Connect プロバイダーとして使用できます。これにより、アプリケーションと安全なサービスに Keycloak 認証環境が提供されます。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降。
-
cluster-admin
ロールでの OpenShift Web コンソールへのアクセス。 - Keycloak PostgreSQL データベース用に 1 GB のコンテナーストレージを使用できる。
-
oc
バイナリーがインストールされているワークステーション。
手順
-
cluster-admin
ロールを持つユーザーで OpenShift Web コンソールにログインします。 Keycloak サービスをデプロイする新規プロジェクトを作成します。
- Administrator パースペクティブのナビゲーションメニューから Home を展開し、Projects をクリックします。
- Create Project ボタンをクリックします。
-
新しい project name は
keycloak-system
で、Create ボタンをクリックします。
- ナビゲーションメニューから Operators を展開し、OperatorHub をクリックします。
- 検索フィールドに sso と入力し、Red Hat Single Sign-on タイルをクリックします。
- Install ボタンをクリックして、Operator の詳細を表示します。
-
まだ設定されていない場合は、Installed Namespace ドロップダウンメニューから
keycloak-system
を選択します。 - Install Operator ページで Install をクリックし、インストールが完了するまで待ちます。
- インストールが完了したら、View Operator をクリックします。
ワークステーションターミナルから、OpenShift クラスターにログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
Keycloak プロジェクトに切り替えます。
例
oc project keycloak-system
oc project keycloak-system
Copy to Clipboard Copied! Keycloak インスタンスを作成します。
例
cat <<EOF | oc apply -f - apiVersion: keycloak.org/v1alpha1 kind: Keycloak metadata: labels: app: sso name: keycloak spec: externalAccess: enabled: true instances: 1 keycloakDeploymentSpec: imagePullPolicy: Always postgresDeploymentSpec: imagePullPolicy: Always EOF
cat <<EOF | oc apply -f - apiVersion: keycloak.org/v1alpha1 kind: Keycloak metadata: labels: app: sso name: keycloak spec: externalAccess: enabled: true instances: 1 keycloakDeploymentSpec: imagePullPolicy: Always postgresDeploymentSpec: imagePullPolicy: Always EOF
Copy to Clipboard Copied! Keycloak レルムを作成します。
例
cat <<EOF | oc apply -f - apiVersion: keycloak.org/v1alpha1 kind: KeycloakRealm metadata: labels: app: sso name: trusted-artifact-signer spec: instanceSelector: matchLabels: app: sso realm: displayName: Red-Hat-Trusted-Artifact-Signer enabled: true id: trusted-artifact-signer realm: trusted-artifact-signer sslRequired: none EOF
cat <<EOF | oc apply -f - apiVersion: keycloak.org/v1alpha1 kind: KeycloakRealm metadata: labels: app: sso name: trusted-artifact-signer spec: instanceSelector: matchLabels: app: sso realm: displayName: Red-Hat-Trusted-Artifact-Signer enabled: true id: trusted-artifact-signer realm: trusted-artifact-signer sslRequired: none EOF
Copy to Clipboard Copied! Keycloak クライアントを作成します。
例
cat <<EOF | oc apply -f - apiVersion: keycloak.org/v1alpha1 kind: KeycloakClient metadata: labels: app: sso name: trusted-artifact-signer spec: client: attributes: request.object.signature.alg: RS256 user.info.response.signature.alg: RS256 clientAuthenticatorType: client-secret clientId: trusted-artifact-signer defaultClientScopes: - profile - email description: Client for Red Hat Trusted Artifact Signer authentication directAccessGrantsEnabled: true implicitFlowEnabled: false name: trusted-artifact-signer protocol: openid-connect protocolMappers: - config: claim.name: email id.token.claim: "true" jsonType.label: String user.attribute: email userinfo.token.claim: "true" name: email protocol: openid-connect protocolMapper: oidc-usermodel-property-mapper - config: claim.name: email-verified id.token.claim: "true" user.attribute: emailVerified userinfo.token.claim: "true" name: email-verified protocol: openid-connect protocolMapper: oidc-usermodel-property-mapper - config: claim.name: aud claim.value: trusted-artifact-signer id.token.claim: "true" access.token.claim: "true" userinfo.token.claim: "true" name: audience protocol: openid-connect protocolMapper: oidc-hardcoded-claim-mapper publicClient: true standardFlowEnabled: true redirectUris: - "*" realmSelector: matchLabels: app: sso EOF
cat <<EOF | oc apply -f - apiVersion: keycloak.org/v1alpha1 kind: KeycloakClient metadata: labels: app: sso name: trusted-artifact-signer spec: client: attributes: request.object.signature.alg: RS256 user.info.response.signature.alg: RS256 clientAuthenticatorType: client-secret clientId: trusted-artifact-signer defaultClientScopes: - profile - email description: Client for Red Hat Trusted Artifact Signer authentication directAccessGrantsEnabled: true implicitFlowEnabled: false name: trusted-artifact-signer protocol: openid-connect protocolMappers: - config: claim.name: email id.token.claim: "true" jsonType.label: String user.attribute: email userinfo.token.claim: "true" name: email protocol: openid-connect protocolMapper: oidc-usermodel-property-mapper - config: claim.name: email-verified id.token.claim: "true" user.attribute: emailVerified userinfo.token.claim: "true" name: email-verified protocol: openid-connect protocolMapper: oidc-usermodel-property-mapper - config: claim.name: aud claim.value: trusted-artifact-signer id.token.claim: "true" access.token.claim: "true" userinfo.token.claim: "true" name: audience protocol: openid-connect protocolMapper: oidc-hardcoded-claim-mapper publicClient: true standardFlowEnabled: true redirectUris: - "*" realmSelector: matchLabels: app: sso EOF
Copy to Clipboard Copied! Keycloak ユーザーを作成します。
例
cat <<EOF | oc apply -f - apiVersion: keycloak.org/v1alpha1 kind: KeycloakUser metadata: labels: app: sso name: jdoe spec: realmSelector: matchLabels: app: sso user: email: jdoe@redhat.com enabled: true emailVerified: true credentials: - type: "password" value: "secure" firstName: Jane lastName: Doe username: jdoe EOF
cat <<EOF | oc apply -f - apiVersion: keycloak.org/v1alpha1 kind: KeycloakUser metadata: labels: app: sso name: jdoe spec: realmSelector: matchLabels: app: sso user: email: jdoe@redhat.com enabled: true emailVerified: true credentials: - type: "password" value: "secure" firstName: Jane lastName: Doe username: jdoe EOF
Copy to Clipboard Copied! ユーザー名、ユーザーのメールアドレス、パスワードを設定するか、秘密オブジェクトを参照します。
- OpenShift Web コンソールに戻り、All instances タブをクリックして監視し、Keycloak システムが正常に初期化されるまで待ちます。
1.4.3. Red Hat build of Keycloak を Trusted Artifact Signer の OpenID Connect プロバイダーとして設定する手順
Red Hat’s build of Keycloak (RHBK) を Red Hat Trusted Artifact Signer (RHTAS) サービスの OpenID Connect (OIDC) として設定できます。この手順では、RHBK と RHTAS を統合する方法を説明します。
同じ SecureSign 設定で、Fulcio の複数の異なる OIDC プロバイダーを定義できます。
前提条件
手順
-
cluster-admin
ロールを持つユーザーで OpenShift Web コンソールにログインします。 Keycloak サービスをデプロイする新規プロジェクトを作成します。
- Administrator パースペクティブのナビゲーションメニューから Home を展開し、Projects をクリックします。
- Create Project ボタンをクリックします。
-
新しいプロジェクト名は
keycloak-system
で、Create ボタンをクリックします。
永続データを保存するために Keycloak が使用する PostgreSQL インスタンスをデプロイします。
重要Keycloak で使用するデータベースがすでに存在する場合は、データベースインスタンスに対応する
Secret
リソースのusername
、password
およびdatabase
名の値を置き換えます。PostgreSQL サービスと StatefulSet の作成手順をスキップして、次の手順に進むことができます。データベース情報を保存するための
Secret
リソースを作成します。- ナビゲーションメニューから Workloads を展開し、Secrets をクリックします。
-
Project ドロップダウンメニューから
keycloak-system
を選択します。 - Create ドロップダウンメニューをクリックし、Key/Value secret を選択します。
-
Secret name フィールドに
postgresql-db
と入力します。 -
Key フィールドに
username
を入力します。 -
Value フィールドに
keycloak
と入力します。これは、Keycloak が PostgreSQL データベースインスタンスへの認証に使用するユーザー名です。 - 別のキーと値のペアを追加するには、Add key/value リンクをクリックします。
-
Key フィールドに
password
を入力します。 - Value フィールドに任意のパスワードを入力します。これは、Keycloak が PostgreSQL データベースインスタンスへの認証に使用するパスワードです。
- 別のキーと値のペアを追加するには、Add key/value リンクをクリックします。
-
Key フィールドに
database
を入力します。 -
Value フィールドに
keycloak
と入力します。これは、PostgreSQL データベースインスタンス内に Keycloak データを格納するためのデータベースの名前です。 - Create ボタンをクリックします。
PostgreSQL サービスと StatefulSet を作成します。
- + アイコンをクリックします。
- Service および StatefulSet YAML 設定テキスト をコピーし、Import YAML ページでテキストエディターボックスに テキストを貼り付けます。
-
Create ボタンをクリックして、Service と StatefulSet を
keycloak-system
プロジェクトに追加します。
ワークステーションからターミナルを開き、OpenShift クラスターにログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
Transport Layer Security (TLS) 証明書と対応する秘密鍵を含めて、新しい
Secret
リソースを作成します。構文
oc create secret tls SECRET_NAME -n NAMESPACE --cert CERTIFICATE_FILE_NAME --key PRIVATE_KEY_FILE_NAME
oc create secret tls SECRET_NAME -n NAMESPACE --cert CERTIFICATE_FILE_NAME --key PRIVATE_KEY_FILE_NAME
Copy to Clipboard Copied! 例
oc create secret tls keycloak-tls -n keycloak-system --cert certificate.pem --key key.pem
oc create secret tls keycloak-tls -n keycloak-system --cert certificate.pem --key key.pem
Copy to Clipboard Copied! 注記OpenShift のサービス提供証明書は、Keycloak で使用する TLS 証明書の生成と管理を自動化できます。詳細は 付録 を参照してください。
- OpenShift Web コンソールで、ナビゲーションメニューから Operator を展開し、OperatorHub をクリックします。
- 検索フィールドに keycloak と入力し、認定済みの Red Hat カタログから Keycloak Operator タイルをクリックします。
- Install ボタンをクリックして、Operator の詳細を表示します。
-
Install Operator ページで、Installed Namespace ドロップダウンメニューから
keycloak-system
を選択し、Install ボタンをクリックします。インストールが完了するまで待ちます。 - インストールが完了したら、View Operator ボタンをクリックします。
- Keycloak タイルで Create instance をクリックします。
Create Keycloak ページで、YAML view を選択します。
-
name
の行で、example-keycloak
をカスタム名 (例:keycloak
) に置き換えます。 ホスト名は、
hostname
プロパティー内で明示的に指定することも、他のルートと同様に自動的に生成することもできます。hostname
の行で、example.org
をカスタムホスト名に置き換えます。注記OpenShift で Keycloak インスタンスのホスト名を生成するために必要な手順は、付録 を参照してください。
spec
セクションの下に、データベースの詳細を追加します。例
spec: ... db: vendor: postgres host: postgresql-db usernameSecret: name: postgresql-db key: username passwordSecret: name: postgresql-db key: password ...
spec: ... db: vendor: postgres host: postgresql-db usernameSecret: name: postgresql-db key: username passwordSecret: name: postgresql-db key: password ...
Copy to Clipboard Copied! また、
spec
セクションのhttp
プロパティーに、TLS 証明書を含むSecret
リソースの名前を指定します。例
spec: ... http: tlsSecret: keycloak-tls ...
spec: ... http: tlsSecret: keycloak-tls ...
Copy to Clipboard Copied! - Create ボタンをクリックします。
-
- Networking ナビゲーションメニューを展開し、Routes をクリックします。
- Keycloak 管理コンソールを開くには、Keycloak インスタンスに関連付けられたルートへのリンクをクリックします。
-
admin
ユーザーのデフォルトの認証情報は keycloak-initial-admin という Secret に保存されます。パスワードを見つけるには、Workloads ナビゲーションメニューを展開し、Secrets をクリックします。 - keycloak-initial-admin シークレットを選択します。
-
Data セクションでパスワードキーを見つけて、
アイコンをクリックします。
-
Keycloak 管理コンソールのログインページで、ユーザー名として
admin
と入力し、前の手順の内容をパスワードとして貼り付けます。 trusted-artifact-signer
という新しいレルムを作成します。- ナビゲーションメニューで、Red Hat build of Keycloak ドロップダウンメニューを選択します。
- Create Realm を選択します。
-
リソース名 として
trusted-artifact-signer
と入力します。 - Create をクリックして新しいレルムを作成します。
新しい ユーザー を作成します。新しいユーザーは、Keycloak 管理コンソールにログインでき、RHTAS を使用してコンテナーとコミットに署名することもできます。
- ナビゲーションメニューの Manage セクションで、Clients を選択します。
- Create Client ボタンをクリックします
-
Client Id フィールドに、
trusted-artifact-signer
と入力します。 - オプションで、対応するフィールドに 名前 と 説明 を入力できます。
- Next をクリックします。
- 新しいクライアント作成プロセスの Capability Config ステップでデフォルトオプションを確定します。
- Next をクリックします。
-
Valid redirect URIs フィールドに
*
と入力します。 - Save をクリックしてクライアントを作成します。
-
ナビゲーションメニューの Configure セクションで、Realm Settings を選択して、
trusted-artifact-signer
レルムの Issuer URL を見つけます。 - Endpoints の横にある OpenID Endpoint Configuration リンクをクリックします。
-
issuer
プロパティーから URL をコピーします。 RHTAS の
SecureSign
リソースの.spec.fulcio.config.OIDCIssuers
セクションで、CLIENT_ID をtrusted-artifact-signer
に置き換え、URL コンテンツを貼り付けてRHBK_REALM_ISSUER_URL を置き換えます。構文
spec: ... fulcio: config: OIDCIssuers: - ClientID: CLIENT_ID Issuer: 'RHBK_REALM_ISSUER_URL' IssuerURL: 'RHBK_REALM_ISSUER_URL' Type: email ...
spec: ... fulcio: config: OIDCIssuers: - ClientID: CLIENT_ID Issuer: 'RHBK_REALM_ISSUER_URL' IssuerURL: 'RHBK_REALM_ISSUER_URL' Type: email ...
Copy to Clipboard Copied! 例
spec: ... fulcio: config: OIDCIssuers: - ClientID: trusted-artifact-signer Issuer: 'https://keycloak-ingress-keycloak-system.apps.openshift.example.com/realms/trusted-artifact-signer' IssuerURL: 'https://keycloak-ingress-keycloak-system.apps.openshift.example.com/realms/trusted-artifact-signer' Type: email ...
spec: ... fulcio: config: OIDCIssuers: - ClientID: trusted-artifact-signer Issuer: 'https://keycloak-ingress-keycloak-system.apps.openshift.example.com/realms/trusted-artifact-signer' IssuerURL: 'https://keycloak-ingress-keycloak-system.apps.openshift.example.com/realms/trusted-artifact-signer' Type: email ...
Copy to Clipboard Copied!
1.4.4. Amazon STS を Trusted Artifact Signer の OpenID Connect プロバイダーとして設定する手順
Amazon の Security Token Service (STS) を、Red Hat Trusted Artifact Signer (RHTAS) サービスの OpenID Connect (OIDC) プロバイダーとして使用できます。RHTAS のデプロイメント時に、または後で Amazon STS を設定できます。
同じ設定で複数の異なる OIDC プロバイダーを定義できます。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降。
-
cluster-admin
ロールでの OpenShift Web コンソールへのアクセス。 -
oc
、podman
、aws
バイナリーがインストールされたワークステーション。 - OpenShift 環境用に管理対象の Amazon Web Service (AWS) リソースを有効にする。
完全な権限を持つ 作成された Amazon アイデンティティーおよびアクセス管理 (IAM) ユーザー。これにより、IAM 操作の実行が可能になります。
- このユーザーのアクセスキーを作成している。
手順
ワークステーションでターミナルを開き、OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
AWS OIDC プロバイダー URL を検索します。
例
oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}'
oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}'
Copy to Clipboard Copied! RHTAS の設定を更新します。
Securesign
リソースを開いて編集します。構文
oc edit Securesign NAME -n NAMESPACE
oc edit Securesign NAME -n NAMESPACE
Copy to Clipboard Copied! 例
oc edit Securesign securesign-sample -n trusted-artifact-signer
oc edit Securesign securesign-sample -n trusted-artifact-signer
Copy to Clipboard Copied! 注記RHTAS インストール用に作成されたプロジェクト名を namespace として使用する必要があります。
OIDCIssuers
セクションで、AWS STS クライアント識別子、発行者の URL を含む新しいサブセクションを追加し、Type
の値をkubernetes
に設定します。例
... OIDCIssuers: - Issuer: "https://example.s3.us-east-1.aws.com/47bd6cg0vs5nn01mue83fbof94dj4m9c" IssuerURL: "https://example.s3.us-east-1.aws.com/47bd6cg0vs5nn01mue83fbof94dj4m9c" ClientID: "trusted-artifact-signer" Type: kubernetes ...
... OIDCIssuers: - Issuer: "https://example.s3.us-east-1.aws.com/47bd6cg0vs5nn01mue83fbof94dj4m9c" IssuerURL: "https://example.s3.us-east-1.aws.com/47bd6cg0vs5nn01mue83fbof94dj4m9c" ClientID: "trusted-artifact-signer" Type: kubernetes ...
Copy to Clipboard Copied! - 変更を保存し、エディターを終了します。数秒後、Operator は RHTAS ソフトウェアスタックを自動的に再設定します。
アクセスキー、シークレットキー、デフォルトのリージョン、および出力形式を入力して、AWS コマンドラインツールを設定します。
例
aws configure
aws configure
Copy to Clipboard Copied! 以下の環境変数を設定します。
例
export account_id=$(aws sts get-caller-identity --query "Account" --output text) export oidc_provider="$(oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}' | cut -d '/' -f3-)" export role_name=rhtas-sts export namespace=rhtas-sts export service_account=cosign-sts
export account_id=$(aws sts get-caller-identity --query "Account" --output text) export oidc_provider="$(oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}' | cut -d '/' -f3-)" export role_name=rhtas-sts export namespace=rhtas-sts export service_account=cosign-sts
Copy to Clipboard Copied! 新しく作成された IAM ロールに関連付けられる信頼ポリシーを作成します。
例
cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${account_id}:oidc-provider/${oidc_provider}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${oidc_provider}:aud": "trusted-artifact-signer" } } } ] } EOF
cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${account_id}:oidc-provider/${oidc_provider}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${oidc_provider}:aud": "trusted-artifact-signer" } } } ] } EOF
Copy to Clipboard Copied! 信頼ポリシーを使用して、RHTAS サービスの新しい IAM ロールを作成します。
例
aws iam create-role --role-name rhtas-sts --assume-role-policy-document file://trust-relationship.json --description "Red Hat Trusted Artifact Signer STS Role"
aws iam create-role --role-name rhtas-sts --assume-role-policy-document file://trust-relationship.json --description "Red Hat Trusted Artifact Signer STS Role"
Copy to Clipboard Copied! STS が有効になっている OpenShift クラスターで、新しいプロジェクト namespace を作成します。
構文
oc new-project NAMESPACE
oc new-project NAMESPACE
Copy to Clipboard Copied! 例
oc new-project rhtas-sts
oc new-project rhtas-sts
Copy to Clipboard Copied! IAM ロールを一時的に設定して、OpenShift プロジェクトの namespace でワークロードを実行するサービスアカウントを作成します。
サービスアカウントマニフェストを作成します。
例
cat >service_account.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: $service_account namespace: $namespace annotations: eks.amazonaws.com/role-arn: "arn:aws:iam::${account_id}:role/${role_name}" # optional: Defaults to "sts.amazonaws.com" if not set eks.amazonaws.com/audience: "trusted-artifact-signer" # optional: When "true", adds AWS_STS_REGIONAL_ENDPOINTS env var to containers eks.amazonaws.com/sts-regional-endpoints: "true" # optional: Defaults to 86400 for expirationSeconds if not set eks.amazonaws.com/token-expiration: "86400" EOF
cat >service_account.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: $service_account namespace: $namespace annotations: eks.amazonaws.com/role-arn: "arn:aws:iam::${account_id}:role/${role_name}" # optional: Defaults to "sts.amazonaws.com" if not set eks.amazonaws.com/audience: "trusted-artifact-signer" # optional: When "true", adds AWS_STS_REGIONAL_ENDPOINTS env var to containers eks.amazonaws.com/sts-regional-endpoints: "true" # optional: Defaults to 86400 for expirationSeconds if not set eks.amazonaws.com/token-expiration: "86400" EOF
Copy to Clipboard Copied! サービスアカウントマニフェストを OpenShift に適用します。
例
oc apply -f service_account.yaml
oc apply -f service_account.yaml
Copy to Clipboard Copied!
イメージレジストリーに、コンテナーイメージに署名するデプロイメントワークロードを新たに作成します。
デプロイメントマニフェストを作成します。
例
cat >deployment.yaml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: cosign-sts namespace: ${namespace} spec: selector: matchLabels: app: cosign-sts template: metadata: labels: app: cosign-sts spec: securityContext: runAsNonRoot: true serviceAccountName: cosign-sts containers: - args: - -c - env; cosign initialize --mirror=\$COSIGN_MIRROR --root=\$COSIGN_ROOT; while true; do sleep 86400; done command: - /bin/sh name: cosign image: registry.redhat.io/rhtas-tech-preview/cosign-rhel9@sha256:f4c2cec3fc1e24bbe094b511f6fe2fe3c6fa972da0edacaf6ac5672f06253a3e pullPolicy: IfNotPresent env: - name: AWS_ROLE_SESSION_NAME value: signer-identity-session - name: AWS_REGION value: us-east-1 - name: OPENSHIFT_APPS_SUBDOMAIN value: $(oc get cm -n openshift-config-managed console-public -o go-template="{{ .data.consoleURL }}" | sed 's@https://@@; s/^[^.]*\.//') - name: OIDC_AUTHENTICATION_REALM value: "trusted-artifact-signer" - name: COSIGN_FULCIO_URL value: $(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) - name: COSIGN_OIDC_ISSUER value: $(oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}') - name: COSIGN_CERTIFICATE_OIDC_ISSUER value: $(oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}') - name: COSIGN_REKOR_URL value: $(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) - name: COSIGN_MIRROR value: $(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) - name: COSIGN_ROOT value: "$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)/root.json" - name: COSIGN_YES value: "true" securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: runAsNonRoot: true serviceAccount: ${service_account} serviceAccountName: ${service_account} terminationGracePeriodSeconds: 30 EOF
cat >deployment.yaml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: cosign-sts namespace: ${namespace} spec: selector: matchLabels: app: cosign-sts template: metadata: labels: app: cosign-sts spec: securityContext: runAsNonRoot: true serviceAccountName: cosign-sts containers: - args: - -c - env; cosign initialize --mirror=\$COSIGN_MIRROR --root=\$COSIGN_ROOT; while true; do sleep 86400; done command: - /bin/sh name: cosign image: registry.redhat.io/rhtas-tech-preview/cosign-rhel9@sha256:f4c2cec3fc1e24bbe094b511f6fe2fe3c6fa972da0edacaf6ac5672f06253a3e pullPolicy: IfNotPresent env: - name: AWS_ROLE_SESSION_NAME value: signer-identity-session - name: AWS_REGION value: us-east-1 - name: OPENSHIFT_APPS_SUBDOMAIN value: $(oc get cm -n openshift-config-managed console-public -o go-template="{{ .data.consoleURL }}" | sed 's@https://@@; s/^[^.]*\.//') - name: OIDC_AUTHENTICATION_REALM value: "trusted-artifact-signer" - name: COSIGN_FULCIO_URL value: $(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) - name: COSIGN_OIDC_ISSUER value: $(oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}') - name: COSIGN_CERTIFICATE_OIDC_ISSUER value: $(oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}') - name: COSIGN_REKOR_URL value: $(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) - name: COSIGN_MIRROR value: $(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) - name: COSIGN_ROOT value: "$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer)/root.json" - name: COSIGN_YES value: "true" securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: runAsNonRoot: true serviceAccount: ${service_account} serviceAccountName: ${service_account} terminationGracePeriodSeconds: 30 EOF
Copy to Clipboard Copied! デプロイメントマニフェストを OpenShift に適用します。
例
oc apply -f deployment.yaml
oc apply -f deployment.yaml
Copy to Clipboard Copied!
署名するテストコンテナーイメージを作成します。
空のコンテナーイメージを作成します。
例
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 空のコンテナーイメージを
ttl.sh
一時レジストリーにプッシュします。例
podman push ttl.sh/rhtas/test-image:1h
podman push ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 一時的な Docker ファイルを削除します。
例
rm ./tmp.Dockerfile
rm ./tmp.Dockerfile
Copy to Clipboard Copied!
テストコンテナーイメージに署名して検証することで、設定を検証します。
実行中の Pod 内でリモートシェルセッションを開きます。
構文
oc rsh -n NAMESPACE deployment/cosign-sts env IMAGE=IMAGE_NAME:TAG /bin/sh
oc rsh -n NAMESPACE deployment/cosign-sts env IMAGE=IMAGE_NAME:TAG /bin/sh
Copy to Clipboard Copied! 例
oc rsh -n rhtas-sts deployment/cosign-sts env IMAGE=ttl.sh/rhtas/test-image:1h /bin/sh
oc rsh -n rhtas-sts deployment/cosign-sts env IMAGE=ttl.sh/rhtas/test-image:1h /bin/sh
Copy to Clipboard Copied! コンテナーイメージに署名します。
例
cosign sign -y --identity-token=$(cat $AWS_WEB_IDENTITY_TOKEN_FILE) ttl.sh/rhtas/test-image:1h
cosign sign -y --identity-token=$(cat $AWS_WEB_IDENTITY_TOKEN_FILE) ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 署名済みコンテナーイメージを確認します。
例
cosign verify --certificate-identity=https://kubernetes.io/namespaces/$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)/serviceaccounts/cosign-sts --certificate-oidc-issuer=$COSIGN_CERTIFICATE_OIDC_ISSUER ttl.sh/rhtas/test-image:1h
cosign verify --certificate-identity=https://kubernetes.io/namespaces/$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)/serviceaccounts/cosign-sts --certificate-oidc-issuer=$COSIGN_CERTIFICATE_OIDC_ISSUER ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied!
1.4.5. GitHub を Trusted Artifact Signer の OpenID Connect プロバイダーとして設定する手順
Red Hat Trusted Artifact Signer (RHTAS) サービスの OpenID Connect (OIDC) プロバイダーとして Red Hat のシングルサインオン (SSO) サービスと連携する場合は、GitHub OAuth 2.0 を使用できます。この手順では、OpenShift 上の既存の Red Hat SSO デプロイメントと GitHub OAuth を統合する方法を説明します。
同じ設定で複数の異なる OIDC プロバイダーを定義できます。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降。
- 実行中の Red Hat SSO インスタンス。
-
oc
バイナリーがインストールされているワークステーション。 GitHub OAuth アプリを作成 し、アプリケーションを登録した後、クライアント識別子とシークレットの値をメモします。
重要新しい GitHub OAuth アプリケーションを登録するときは、ホームページ URL と 認証コールバック URL を指定する必要があります。これらの両方のフィールドにプレースホルダー値を入力します (例:
https://localhost:8080
)。この手順の後半では、これらのフィールドの目的の値を使用して GitHub OAuth アプリケーションを変更します。
手順
ワークステーションでターミナルを開き、OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
Red Hat SSO コンソールにログインします。
コマンドラインから Red Hat SSO コンソール URL を見つけます。
例
oc get routes -n keycloak-system keycloak -o jsonpath='https://{.spec.host}'
oc get routes -n keycloak-system keycloak -o jsonpath='https://{.spec.host}'
Copy to Clipboard Copied! - Red Hat SSO コンソールの URL をコピーして、Web ブラウザーに貼り付けます。
- Administration Console をクリックします。
コマンドラインから
admin
パスワードを取得します。例
oc get secret/credential-keycloak -n keycloak-system -o jsonpath='{ .data.ADMIN_PASSWORD }' | base64 -d
oc get secret/credential-keycloak -n keycloak-system -o jsonpath='{ .data.ADMIN_PASSWORD }' | base64 -d
Copy to Clipboard Copied! このコマンドの出力をコピーします。
-
Web ブラウザーから
admin
ユーザーとしてログインし、対応するフィールドにパスワードを貼り付けます。Sign In ボタンをクリックします。
- ナビゲーションメニューのドロップダウンからレルムを選択します。
GitHub アイデンティティープロバイダーを追加します。
- ナビゲーションメニューから、Identity Providers をクリックします。
- Add provider… ドロップダウンメニューから、GitHub を選択します。
- GitHub OAuth クライアント識別子を Client ID フィールドに追加します。
- GitHub OAuth クライアントシークレットを Client Secret フィールドに追加します。
- Trust Email オプションを on にします。
- Save ボタンをクリックします。
新しく作成されたアイデンティティープロバイダーにアイデンティティープロバイダーマッパーを追加します。
- Mapper タブをクリックします。
- Create ボタンをクリックします。
- 新しいマッパーに Name を付けます。
- Mapper Type を Hardcoded Attribute に変更します。
-
User Attribute フィールドを
emailVerified
に設定します。 -
User Attribute Value フィールドを
true
に設定します。 - Save ボタンをクリックします。
-
GitHub Identity Provider Settings ページから、Redirect URI 値をコピーし、GitHub OAuth アプリケーション Authorization Callback URL フィールドに貼り付けます。また、同じ値を Homepage URL フィールドに貼り付けますが、URL 文字列の
broker/github/endpoint
の部分を削除します。 - Update Application をクリックします。GitHub を OIDC プロバイダーとして使用して、コミット や コンテナー に署名できるようになりました。
- アーティファクトに署名すると、Web ブラウザーが開き、Red Hat SSO アカウントにサインインするように求められます。GitHub ボタンをクリックして、認証情報でサインインします。
- Authorize ボタンをクリックして、Red Hat SSO が GitHub ユーザーの詳細にアクセスできるようにします。
1.4.6. Microsoft Entra ID を Trusted Artifact Signer の OpenID Connect プロバイダーとして設定する
Microsoft Entra ID を、Red Hat の Trusted Artifact Signer (RHTAS) サービスの OpenID Connect (OIDC) プロバイダーとして使用できます。Microsoft Entra ID は RHTAS のデプロイ中または後に設定できます。
Microsoft Entra ID を RHTAS に統合するのにサブスクリプションは必要ありません。
同じ設定で複数の異なる OIDC プロバイダーを定義できます。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降。
- リソースを作成する権限を持つ Microsoft Azure アカウント
- アーティファクトに署名するユーザーの Azure 検証済みメールアドレス
- Microsoft Azure コマンドラインインターフェイスへのアクセス
-
oc
、cosign
、podman
、az
バイナリーがインストールされたワークステーション
手順
- ワークステーションでターミナルを開きます。
クライアントを表す Microsoft Entra ID 内にアプリケーション登録を作成します。
例
export RHTAS_APP_REGISTRATION=$(az ad app create --display-name=rhtas --web-redirect-uris=http://localhost:0/auth/callback --enable-id-token-issuance --query appId -o tsv)
export RHTAS_APP_REGISTRATION=$(az ad app create --display-name=rhtas --web-redirect-uris=http://localhost:0/auth/callback --enable-id-token-issuance --query appId -o tsv)
Copy to Clipboard Copied! ユーザーがアプリケーション登録を使用して ID トークンを取得できるようにする新しいクライアントシークレットを作成します。
例
export RHTAS_APP_REGISTRATION_CLIENT_SECRET=$(az ad app credential reset --id=$RHTAS_APP_REGISTRATION --display-name="RHTAS Client Secret" -o tsv --query 'password')
export RHTAS_APP_REGISTRATION_CLIENT_SECRET=$(az ad app credential reset --id=$RHTAS_APP_REGISTRATION --display-name="RHTAS Client Secret" -o tsv --query 'password')
Copy to Clipboard Copied! 注記デフォルトでは、クライアントシークレットの有効期間は 1 年間のみです。この値は
--years
または--end-date
フラグを使用してカスタマイズできます。新しいクレームマッピングポリシーを作成して、
email_verified
という名前の新しい JWT クレームを定義し、静的な値true
を使用します。例
az rest -m post --headers Content-Type=application/json --uri https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies --body '{"definition": ["{\"ClaimsMappingPolicy\":{\"Version\":1,\"IncludeBasicClaimSet\":\"true\", \"ClaimsSchema\":[{\"value\":\"true\",\"JwtClaimType\":\"email_verified\"}]}}"],"displayName": "EmailVerified"}'
az rest -m post --headers Content-Type=application/json --uri https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies --body '{"definition": ["{\"ClaimsMappingPolicy\":{\"Version\":1,\"IncludeBasicClaimSet\":\"true\", \"ClaimsSchema\":[{\"value\":\"true\",\"JwtClaimType\":\"email_verified\"}]}}"],"displayName": "EmailVerified"}'
Copy to Clipboard Copied! アプリケーション登録オブジェクト ID を取得します。
例
export RHTAS_APP_REGISTRATION_OBJ_ID=$(az ad app show --id $RHTAS_APP_REGISTRATION --output tsv --query id)
export RHTAS_APP_REGISTRATION_OBJ_ID=$(az ad app show --id $RHTAS_APP_REGISTRATION --output tsv --query id)
Copy to Clipboard Copied! アプリケーション登録のマニフェストを更新します。
例
az rest --method PATCH --uri https://graph.microsoft.com/v1.0/applications/${RHTAS_APP_REGISTRATION_OBJ_ID} --headers 'Content-Type=application/json' --body "{\"api\":{\"acceptMappedClaims\":true}}"
az rest --method PATCH --uri https://graph.microsoft.com/v1.0/applications/${RHTAS_APP_REGISTRATION_OBJ_ID} --headers 'Content-Type=application/json' --body "{\"api\":{\"acceptMappedClaims\":true}}"
Copy to Clipboard Copied! 新しいサービスプリンシパルを作成し、それをアプリケーション登録に関連付けます。
例
export SERVICE_PRINCIPAL_ID=$(az ad sp create --id=${RHTAS_APP_REGISTRATION} -o tsv --query 'id')
export SERVICE_PRINCIPAL_ID=$(az ad sp create --id=${RHTAS_APP_REGISTRATION} -o tsv --query 'id')
Copy to Clipboard Copied! クレームマッピングポリシー ID を取得します。
例
export CLAIM_MAPPING_POLICY_ID=$(az rest --uri https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies -o tsv --query "value[?displayName=='EmailVerified'] | [0].id")
export CLAIM_MAPPING_POLICY_ID=$(az rest --uri https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies -o tsv --query "value[?displayName=='EmailVerified'] | [0].id")
Copy to Clipboard Copied! クレームマッピングポリシーをサービスプリンシパルに関連付けます。
例
az rest -m post --headers Content-Type=application/json --uri "https://graph.microsoft.com/v1.0/servicePrincipals/${SERVICE_PRINCIPAL_ID}/claimsMappingPolicies/\$ref" --body "{\"@odata.id\": \"https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/${CLAIM_MAPPING_POLICY_ID}\"}"
az rest -m post --headers Content-Type=application/json --uri "https://graph.microsoft.com/v1.0/servicePrincipals/${SERVICE_PRINCIPAL_ID}/claimsMappingPolicies/\$ref" --body "{\"@odata.id\": \"https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/${CLAIM_MAPPING_POLICY_ID}\"}"
Copy to Clipboard Copied! テナント ID を取得します。
例
export TENANT_ID=$(az account show -o tsv --query tenantId)
export TENANT_ID=$(az account show -o tsv --query tenantId)
Copy to Clipboard Copied! OIDC エンドポイントを取得します。
例
export ENTRA_ID_OIDC_ENDPOINT=$(echo https://login.microsoftonline.com/${TENANT_ID}/v2.0)
export ENTRA_ID_OIDC_ENDPOINT=$(echo https://login.microsoftonline.com/${TENANT_ID}/v2.0)
Copy to Clipboard Copied! RHTAS 設定を更新します。
Securesign
リソースを開いて編集します。構文
oc edit Securesign NAME -n NAMESPACE
oc edit Securesign NAME -n NAMESPACE
Copy to Clipboard Copied! 例
oc edit Securesign securesign-sample -n trusted-artifact-signer
oc edit Securesign securesign-sample -n trusted-artifact-signer
Copy to Clipboard Copied! 注記RHTAS インストール用に作成されたプロジェクト名を namespace として使用する必要があります。
OIDCIssuers
セクションで、クライアント ID、発行者の URL を含む新しいサブセクションを追加し、Type
値をemail
に設定します。構文
... OIDCIssuers: - Issuer: "${ENTRA_ID_OIDC_ENDPOINT}" IssuerURL: "${ENTRA_ID_OIDC_ENDPOINT}" ClientID: "${RHTAS_APP_REGISTRATION}" Type: email ...
... OIDCIssuers: - Issuer: "${ENTRA_ID_OIDC_ENDPOINT}" IssuerURL: "${ENTRA_ID_OIDC_ENDPOINT}" ClientID: "${RHTAS_APP_REGISTRATION}" Type: email ...
Copy to Clipboard Copied! - 変更を保存し、エディターを終了します。数秒後、Operator は RHTAS ソフトウェアスタックを自動的に再設定します。
ローカルクライアントシークレットファイルを作成します。
例
echo $RHTAS_APP_REGISTRATION_CLIENT_SECRET > rhtas-entra-id-client-secret
echo $RHTAS_APP_REGISTRATION_CLIENT_SECRET > rhtas-entra-id-client-secret
Copy to Clipboard Copied! アーティファクトに署名するためのシェル環境を設定します。
例
export TUF_URL=$(oc get tuf -n trusted-artifact-signer -o jsonpath='{.items[0].status.url}') export OIDC_ISSUER_URL=$(oc get securesign -n trusted-artifact-signer rhtas -o jsonpath='{ .spec.fulcio.config.OIDCIssuers[0].Issuer }') export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID=$RHTAS_APP_REGISTRATION export SIGSTORE_OIDC_CLIENT_ID=$COSIGN_OIDC_CLIENT_ID export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export COSIGN_OIDC_CLIENT_SECRET_FILE=$(pwd)/rhtas-entra-id-client-secret
export TUF_URL=$(oc get tuf -n trusted-artifact-signer -o jsonpath='{.items[0].status.url}') export OIDC_ISSUER_URL=$(oc get securesign -n trusted-artifact-signer rhtas -o jsonpath='{ .spec.fulcio.config.OIDCIssuers[0].Issuer }') export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID=$RHTAS_APP_REGISTRATION export SIGSTORE_OIDC_CLIENT_ID=$COSIGN_OIDC_CLIENT_ID export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export COSIGN_OIDC_CLIENT_SECRET_FILE=$(pwd)/rhtas-entra-id-client-secret
Copy to Clipboard Copied! 署名のためにローカルマシンを初期化します。
例
cosign initialize
$ cosign initialize
Copy to Clipboard Copied! テストコンテナーイメージに署名して、更新された設定を確認します。
空のコンテナーイメージを作成します。
例
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 空のコンテナーイメージを
ttl.sh
一時レジストリーにプッシュします。例
podman push ttl.sh/rhtas/test-image:1h
podman push ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 一時的な Docker ファイルを削除します。
例
rm ./tmp.Dockerfile
rm ./tmp.Dockerfile
Copy to Clipboard Copied! コンテナーイメージに署名します。
構文
cosign sign -y --oidc-client-secret-file=SECRET_FILE IMAGE_NAME:TAG
cosign sign -y --oidc-client-secret-file=SECRET_FILE IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign sign -y --oidc-client-secret-file=rhtas-entra-id-client-secret ttl.sh/rhtas/test-image:1h
cosign sign -y --oidc-client-secret-file=rhtas-entra-id-client-secret ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Web ブラウザーが開いて、コンテナーイメージをメールアドレスで署名できます。
1.5. Trusted Artifact Signer の代替データベースの設定
Trillian の Red Hat Trusted Artifact Signer (RHTAS) デフォルトデータベースを、外部で管理されている MariaDB データベースインスタンスに置き換えることができます。データベースインスタンスとして、Amazon の Relational Database Service (RDS) などのクラウドホスト型データベースプロバイダー、または OpenShift での独自のデータベースデプロイメントなどが使用できます。
1.5.1. 前提条件
- Red Hat OpenShift Container Platform バージョン 4.13、4.14、または 4.15。
1.5.2. Trusted Artifact Signer のための Amazon RDS の設定
この手順を使用すると、Trillian 用の Red Hat の Trusted Artifact Signer (RHTAS) デフォルトデータベースを、Amazon の Relational Database Service (RDS) で管理されている MariaDB インスタンスに置き換えることができます。
Red Hat では、実稼働環境のワークロードには可用性の高い MariaDB データベースを使用することを推奨しています。
前提条件
- Amazon RDS コンソールにアクセスできる Amazon Web Services (AWS) アカウント。
-
cluster-admin
ロールでの OpenShift Web コンソールへのアクセス。 -
oc
、curl
、およびmysql
バイナリーがインストールされているワークステーション。 - データベースを作成し、MariaDB インスタンスにデータを入力する権限を持つコマンドラインアクセス。
手順
Amazon RDS コンソール を開き、新しい MariaDB インスタンスを 作成 します。
- MariaDB インスタンスがデプロイされ、利用可能になるまで待ちます。
ワークステーションから、リージョンエンドポイント、ポート、およびユーザー認証情報を指定して、新しいデータベースにログインします。
構文
mysql -h REGIONAL_ENDPOINT -P 3306 -u USER_NAME -p
mysql -h REGIONAL_ENDPOINT -P 3306 -u USER_NAME -p
Copy to Clipboard Copied! 例
mysql -h exampledb.1234.us-east-1.rds.amazonaws.com -P 3306 -u admin -p
mysql -h exampledb.1234.us-east-1.rds.amazonaws.com -P 3306 -u admin -p
Copy to Clipboard Copied! trillian という名前の新規データベースを作成します。
例
create database trillian;
create database trillian;
Copy to Clipboard Copied! 新規作成したデータベースに切り替えます。
例
use trillian;
use trillian;
Copy to Clipboard Copied! trillian
という名前の新しいデータベースユーザーを作成し、新しく作成したユーザーに PASSWORD を設定します。構文
CREATE USER trillian@'%' IDENTIFIED BY 'PASSWORD'; GRANT ALL PRIVILEGES ON trillian.* TO 'trillian'@'%'; FLUSH PRIVILEGES;
CREATE USER trillian@'%' IDENTIFIED BY 'PASSWORD'; GRANT ALL PRIVILEGES ON trillian.* TO 'trillian'@'%'; FLUSH PRIVILEGES;
Copy to Clipboard Copied! データベースから切断します。
例
EXIT
EXIT
Copy to Clipboard Copied! データベース設定ファイルをダウンロードします。
例
curl -o dbconfig.sql https://raw.githubusercontent.com/securesign/trillian/main/storage/mysql/schema/storage.sql
curl -o dbconfig.sql https://raw.githubusercontent.com/securesign/trillian/main/storage/mysql/schema/storage.sql
Copy to Clipboard Copied! データベース設定を新しいデータベースに適用します。
構文
mysql -h FQDN_or_SERVICE_ADDR -P 3306 -u USER_NAME -p PASSWORD -D DB_NAME < PATH_TO_CONFIG_FILE
mysql -h FQDN_or_SERVICE_ADDR -P 3306 -u USER_NAME -p PASSWORD -D DB_NAME < PATH_TO_CONFIG_FILE
Copy to Clipboard Copied! 例
mysql -h rhtasdb.example.com -P 3306 -u trillian -p mypassword123 -D trillian < dbconfig.sql
mysql -h rhtasdb.example.com -P 3306 -u trillian -p mypassword123 -D trillian < dbconfig.sql
Copy to Clipboard Copied! ワークステーションでターミナルを開き、OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
以前に作成した MariaDB インスタンス内の Trillian データベースの認証情報を含む新しい Secret を作成します。
構文
oc create secret generic OBJECT_NAME \ --from-literal=mysql-database=trillian \ --from-literal=mysql-host=FQDN_or_SERVICE_ADDR \ --from-literal=mysql-password=PASSWORD \ --from-literal=mysql-port=3306 \ --from-literal=mysql-root-password=PASSWORD \ --from-literal=mysql-user=USER_NAME
oc create secret generic OBJECT_NAME \ --from-literal=mysql-database=trillian \ --from-literal=mysql-host=FQDN_or_SERVICE_ADDR \ --from-literal=mysql-password=PASSWORD \ --from-literal=mysql-port=3306 \ --from-literal=mysql-root-password=PASSWORD \ --from-literal=mysql-user=USER_NAME
Copy to Clipboard Copied! 例
oc create secret generic trillian-mysql \ --from-literal=mysql-database=trillian \ --from-literal=mysql-host=mariadb.trusted-artifact-signer.svc.cluster.local \ --from-literal=mysql-password=mypassword123 \ --from-literal=mysql-port=3306 \ --from-literal=mysql-root-password=myrootpassword123 \ --from-literal=mysql-user=trillian
oc create secret generic trillian-mysql \ --from-literal=mysql-database=trillian \ --from-literal=mysql-host=mariadb.trusted-artifact-signer.svc.cluster.local \ --from-literal=mysql-password=mypassword123 \ --from-literal=mysql-port=3306 \ --from-literal=mysql-root-password=myrootpassword123 \ --from-literal=mysql-user=trillian
Copy to Clipboard Copied! MariaDB インスタンスには OpenShift 内部サービス名を使用できます。
- これで、このデータベースを使用するために Trusted Artifact Signer サービスをデプロイできるようになりました。Trusted Artifact Signer のインストール手順に従っていた場合は、次の手順 に進むことができます。
1.5.3. Trusted Artifact Signer 用の OpenShift でのデータベース設定
この手順を使用すると、Trillian 用の Red Hat の Trusted Artifact Signer (RHTAS) デフォルトデータベースを、Amazon の Relational Database Service (RDS) で管理されている MariaDB インスタンスに置き換えることができます。
Red Hat では、実稼働環境のワークロードには可用性の高い MariaDB データベースを使用することを推奨しています。
前提条件
- OpenShift プロジェクトを作成して OpenShift サンプルカタログからデータベースインスタンスをデプロイする権限。
-
cluster-admin
ロールでの OpenShift Web コンソールへのアクセス。 -
oc
、curl
、およびmysql
バイナリーがインストールされているワークステーション。 - データベースを作成し、MariaDB インスタンスにデータを入力する権限を持つコマンドラインアクセス。
手順
- RHTAS サービスをデプロイしている OpenShift Web コンソールにログインします。
- Developer パースペクティブに切り替えます。
プロジェクトがすでに存在する場合は、
trusted-artifact-signer
プロジェクトを選択し、存在しない場合はデータベース用に新しいプロジェクトを作成します。- 新規プロジェクトを作成するには、ドロップダウンプロジェクトメニューをクリックして、Create Project ボタンをクリックします。
-
新規プロジェクトに
trusted-artifact-signer
という名前を付けて、Create ボタンをクリックします。
- Developer Catalog カードで Database をクリックします。
MariaDB を選択し、Instantiate Template ボタンをクリックします。
重要MariaDB (Ephemeral) を選択しないでください。
Instantiate Template ページで、以下のフィールドを設定します。
-
MariaDB データベース名 フィールドに
trillian
と入力します。 -
Volume Capacity フィールドに
5Gi
を入力します。 - Create ボタンをクリックします。
-
MariaDB データベース名 フィールドに
リモートシェルセッションを開始します。
- Topology ページで MariaDB Pod を選択するとサイドパネルが表示されるので、Resources タブをクリックします。
- Pods セクションで、MariaDB の Pod 名をクリックします。
- Terminal タブをクリックして、MariaDB Pod へのリモートシェルセッションを開始します。
リモートシェルセッションで、Trillian データベースに接続できることを確認します。
例
mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -D$MYSQL_DATABASE
$ mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -D$MYSQL_DATABASE
Copy to Clipboard Copied! 注記認証情報は、サービス名 (
mariadb
) と一緒にシークレットオブジェクトに保存され、これにはデータベースの名前、ユーザー名、およびデータベースのルートパスワードが含まれます。これらの認証情報は、後でデータベースシークレットオブジェクトを作成するときに使用されるため、メモしておいてください。データベースから切断します。
例
EXIT
EXIT
Copy to Clipboard Copied! データベース設定ファイルをダウンロードします。
例
curl -o dbconfig.sql https://raw.githubusercontent.com/securesign/trillian/main/storage/mysql/schema/storage.sql
curl -o dbconfig.sql https://raw.githubusercontent.com/securesign/trillian/main/storage/mysql/schema/storage.sql
Copy to Clipboard Copied! データベース設定を新しいデータベースに適用します。
構文
mysql -h FQDN_or_SERVICE_ADDR -P 3306 -u USER_NAME -p PASSWORD -D DB_NAME < PATH_TO_CONFIG_FILE
mysql -h FQDN_or_SERVICE_ADDR -P 3306 -u USER_NAME -p PASSWORD -D DB_NAME < PATH_TO_CONFIG_FILE
Copy to Clipboard Copied! 例
mysql -h rhtasdb.example.com -P 3306 -u trillian -p mypassword123 -D trillian < dbconfig.sql
mysql -h rhtasdb.example.com -P 3306 -u trillian -p mypassword123 -D trillian < dbconfig.sql
Copy to Clipboard Copied! ワークステーションでターミナルを開き、OpenShift にログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! 例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! 注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
以前に作成した MariaDB インスタンス内の Trillian データベースの認証情報を含む新しい Secret を作成します。
構文
oc create secret generic OBJECT_NAME \ --from-literal=mysql-database=trillian \ --from-literal=mysql-host=FQDN_or_SERVICE_ADDR \ --from-literal=mysql-password=PASSWORD \ --from-literal=mysql-port=3306 \ --from-literal=mysql-root-password=PASSWORD \ --from-literal=mysql-user=USER_NAME
oc create secret generic OBJECT_NAME \ --from-literal=mysql-database=trillian \ --from-literal=mysql-host=FQDN_or_SERVICE_ADDR \ --from-literal=mysql-password=PASSWORD \ --from-literal=mysql-port=3306 \ --from-literal=mysql-root-password=PASSWORD \ --from-literal=mysql-user=USER_NAME
Copy to Clipboard Copied! 例
oc create secret generic trillian-mysql \ --from-literal=mysql-database=trillian \ --from-literal=mysql-host=mariadb.trusted-artifact-signer.svc.cluster.local \ --from-literal=mysql-password=mypassword123 \ --from-literal=mysql-port=3306 \ --from-literal=mysql-root-password=myrootpassword123 \ --from-literal=mysql-user=trillian
oc create secret generic trillian-mysql \ --from-literal=mysql-database=trillian \ --from-literal=mysql-host=mariadb.trusted-artifact-signer.svc.cluster.local \ --from-literal=mysql-password=mypassword123 \ --from-literal=mysql-port=3306 \ --from-literal=mysql-root-password=myrootpassword123 \ --from-literal=mysql-user=trillian
Copy to Clipboard Copied! MariaDB インスタンスには OpenShift 内部サービス名を使用できます。
- これで、このデータベースを使用するために Trusted Artifact Signer サービスをデプロイできるようになりました。Trusted Artifact Signer のインストール手順に従っていた場合は、次の手順 に進むことができます。
1.6. Keycloak の TLS 証明書を生成するための OpenShift サービス提供証明書の設定
OpenShift のサービス提供証明書は、Keycloak で使用するための Transport Layer Security (TLS) 証明書の生成と管理を自動化できます。OpenShift クラスター内の Ingress Controller などのインフラストラクチャーコンポーネントは、これらの TLS 証明書を信頼します。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降。
- RHBK Operator のインストール。
-
cluster-admin
ロールでの OpenShift Web コンソールへのアクセス。
手順
- OpenShift Web コンソールの Administrator パースペクティブで、ナビゲーションメニューから Home を展開し、Projects をクリックします。
-
keycloak
を検索し、keycloak-system
名前空間を選択します。 新しいサービスを作成します。
- + アイコンをクリックします。
Import YAML テキストボックスで、例をコピーしてテキストボックスに貼り付けます。
例
apiVersion: v1 kind: Service metadata: annotations: service.beta.openshift.io/serving-cert-secret-name: keycloak-tls labels: app: keycloak app.kubernetes.io/instance: keycloak name: keycloak-service-trusted namespace: keycloak-system spec: internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: https port: 8443 selector: app: keycloak app.kubernetes.io/instance: keycloak
apiVersion: v1 kind: Service metadata: annotations: service.beta.openshift.io/serving-cert-secret-name: keycloak-tls labels: app: keycloak app.kubernetes.io/instance: keycloak name: keycloak-service-trusted namespace: keycloak-system spec: internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: https port: 8443 selector: app: keycloak app.kubernetes.io/instance: keycloak
Copy to Clipboard Copied! - Create ボタンをクリックします。
- ナビゲーションメニューから Operator を展開し、Installed Operator をクリックして、Keycloak Operator をクリックします。
Keycloak
リソースの YAML view のspec
セクションに、Ingress
プロパティーを追加します。例
spec: ... ingress: annotations: route.openshift.io/destination-ca-certificate-secret: keycloak-tls route.openshift.io/termination: reencrypt ...
spec: ... ingress: annotations: route.openshift.io/destination-ca-certificate-secret: keycloak-tls route.openshift.io/termination: reencrypt ...
Copy to Clipboard Copied! デフォルトでは、Keycloak Operator はルートではなく Ingress リソースを作成します。OpenShift は Ingress 定義に基づいてルートを自動的に作成します。
spec
セクションに、TLS 証明書を含むシークレットの名前を指定します。例
spec: ... http: tlsSecret: keycloak-tls ...
spec: ... http: tlsSecret: keycloak-tls ...
Copy to Clipboard Copied! Keycloak が起動すると、OpenShift のサービス提供証明書が Keycloak の TLS 証明書の生成を開始します。
1.7. Keycloak ホスト名の自動生成
OpenShift ルートは、設定されたパターンを使用してホスト名を自動的に生成する機能をサポートしています。この機能は、OpenShift 上で実行されている Red Hat’s build of Keycloak (RHBK) operator と統合できます。
前提条件
- Red Hat OpenShift Container Platform 4.15 以降。
- RHBK Operator のインストール。
-
cluster-admin
ロールでの OpenShift Web コンソールへのアクセス。 -
oc
バイナリーがインストールされているワークステーション。
手順
自動生成されたルートホスト名機能を有効にします。
.spec
セクションの下で、hostname
セクション全体を削除し、Keycloak
リソース内のIngress
セクションとclassName
プロパティーに置き換えます。例
spec: ... hostname: hostname: example.com ...
spec: ... hostname: hostname: example.com ...
Copy to Clipboard Copied! 例
spec: ... ingress: className: openshift-default ...
spec: ... ingress: className: openshift-default ...
Copy to Clipboard Copied! 注記利用可能なすべての Ingress クラスを表示するには、次のコマンドを実行します。
oc get ingressclass
oc get ingressclass
Copy to Clipboard Copied! - Save ボタンをクリックします。
最新の設定を表示するには、Reload ボタンをクリックして、自動的に生成された
hostname
を確認します。例
spec: ... hostname: hostname: example-keycloak-ingress-keycloak-system.apps.rhtas.example.com ...
spec: ... hostname: hostname: example-keycloak-ingress-keycloak-system.apps.rhtas.example.com ...
Copy to Clipboard Copied!
第2章 Red Hat Enterprise Linux
2.1. Ansible を使用した Trusted Artifact Signer のインストール
Red Hat が提供する Ansible Playbook を使用して、Red Hat Enterprise Linux に Red Hat Trusted Artifact Signer (RHTAS) をインストールできます。このデプロイメントでは、Keycloak を OpenID Connect (OIDC) プロバイダーとして使用した基本的な署名フレームワークが提供されます。
Red Hat は、実稼働環境では Ansible ロギングを詳細モードまたはデバッグモードで使用しないことを推奨しています。
詳細は、Ansible の ドキュメント を参照してください。
前提条件
- Red Hat Enterprise Linux バージョン 9.4 以降。
- Red Hat Hybrid Cloud Console にアクセスする Red Hat ユーザーアカウント。
手順
- Red Hat 認証情報を使用して Red Hat Hybrid Cloud コンソール にログインします。
- ホームページから、Services ドロップダウンメニューをクリックし、Red Hat Ansible Automation Platform をクリックします。
- ナビゲーションメニューから Automation Hub を展開し、Collections をクリックします。
- 検索フィールドに rhtas と入力し、Enter キーを押します。
- Red Hat Trusted Artifact Signer タイルの artifact_signer リンクをクリックします。
Documentation タブをクリックし、そこに記載されている手順に従って、Red Hat Enterprise Linux への RHTAS のインストールを完了します。
注記すべての設定パラメーターの詳細な概要は、Roles セクションの tas_single_node リンクをクリックしてください。
2.2. 信頼できるアーティファクト署名のインストールの確認
システム管理者として、Red Hat Enterprise Linux 上で実行されている Red Hat Trusted Artifact Signer (RHTAS) のデプロイメントが成功したかどうかを確認できます。
テストコンテナーイメージに署名し、その署名の信頼性を検証して、環境内での RHTAS のデプロイメントを検証できます。
コードパイプラインからアーティファクトビルドに署名する方法は 2 つ、検証する方法は 3 つあります。cosign
と gitsign
を使用して署名および検証できますが、検証できるのは Enterprise Contract のみです。
2.2.1. コマンドラインインターフェイスから Cosign を使用したコンテナーの署名と検証
cosign
ツールを使用すると、Red Hat の Trusted Artifact Signer (RHTAS) サービスを使用して、Open Container Initiative (OCI) コンテナーイメージや他のビルドアーティファクトに署名し、検証する機能が提供されます。
RHTAS の場合、cosign
バージョン 2.2 以降を使用する必要があります。
前提条件
- Ansible によって管理される Red Hat Enterprise Linux 9.4 以降で実行される RHTAS のインストール。
-
podman
バイナリーがインストールされたワークステーション。
手順
ローカルのコマンドラインインターフェイス (CLI) ツールのダウンロードページから
cosign
バイナリーをワークステーションにダウンロードします。注記URL アドレスは、
tas_single_node_base_hostname
変数によって定義された設定済みノードです。tas_single_node_base_hostname
の値がexample.com
の場合、URL アドレスの例はhttps://cli-server.example.com
です。- ダウンロードページから、cosign ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー
.gz
ファイルを展開し、実行ビットを設定します。例
gunzip cosign-amd64.gz chmod +x cosign-amd64
gunzip cosign-amd64.gz chmod +x cosign-amd64
Copy to Clipboard Copied! バイナリーを
$PATH
環境内の場所に移動し、名前を変更します。例
sudo mv cosign-amd64 /usr/local/bin/cosign
sudo mv cosign-amd64 /usr/local/bin/cosign
Copy to Clipboard Copied!
コンテナーイメージの署名と検証を行うためにシェル環境を設定します。
例
export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export TUF_URL="https://tuf.${BASE_HOSTNAME}" export OIDC_ISSUER_URL=OIDC_ISSUER_URL export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}" export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}" export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export TUF_URL="https://tuf.${BASE_HOSTNAME}" export OIDC_ISSUER_URL=OIDC_ISSUER_URL export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}" export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}" export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
Copy to Clipboard Copied! BASE_HOSTNAME_OF_RHTAS_SERVICE は
tas_single_node_base_hostname
変数の値に置き換え、OIDC_ISSUER_URL は OpenID Connect (OIDC) プロバイダーの URL 文字列に置き換えます。The Update Framework (TUF) システムを初期化します。
例
cosign initialize
cosign initialize
Copy to Clipboard Copied! テストコンテナーイメージに署名します。
空のコンテナーイメージを作成します。
例
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 空のコンテナーイメージを
ttl.sh
一時レジストリーにプッシュします。例
podman push ttl.sh/rhtas/test-image:1h
podman push ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! コンテナーイメージに署名します。
構文
cosign sign -y IMAGE_NAME:TAG
cosign sign -y IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign sign -y ttl.sh/rhtas/test-image:1h
cosign sign -y ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Web ブラウザーが開いて、コンテナーイメージをメールアドレスで署名できます。
一時的な Docker ファイルを削除します。
例
rm ./tmp.Dockerfile
rm ./tmp.Dockerfile
Copy to Clipboard Copied!
証明書 ID と発行者を使用して、署名済みコンテナーイメージを確認します。
構文
cosign verify --certificate-identity=SIGNING_EMAIL_ADDR IMAGE_NAME:TAG
cosign verify --certificate-identity=SIGNING_EMAIL_ADDR IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign verify --certificate-identity=jdoe@redhat.com ttl.sh/rhtas/test-image:1h
cosign verify --certificate-identity=jdoe@redhat.com ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 注記cosign
コマンドと--certificate-identity-regexp
および--certificate-oidc-issuer-regexp
オプションを使用して、証明書の ID と発行者に正規表現を使用することもできます。ローカルのコマンドラインインターフェイス (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-amd64
Copy to Clipboard Copied! バイナリーを
$PATH
環境内の場所に移動し、名前を変更します。例
sudo mv rekor-cli-amd64 /usr/local/bin/rekor-cli
sudo mv rekor-cli-amd64 /usr/local/bin/rekor-cli
Copy to Clipboard Copied!
Rekor コマンドラインインターフェイスを使用して透明性ログをクエリーします。
ログインデックスに基づき検索します。
例
rekor-cli get --log-index 0 --rekor_server $COSIGN_REKOR_URL --format json | jq
rekor-cli get --log-index 0 --rekor_server $COSIGN_REKOR_URL --format json | jq
Copy to Clipboard Copied! ユニバーサルユニーク ID (UUID) を取得するために、メールアドレスを検索します。
構文
rekor-cli search --email SIGNING_EMAIL_ADDR --rekor_server $COSIGN_REKOR_URL --format json | jq
rekor-cli search --email SIGNING_EMAIL_ADDR --rekor_server $COSIGN_REKOR_URL --format json | jq
Copy to Clipboard Copied! 例
rekor-cli search --email jdoe@redhat.com --rekor_server $COSIGN_REKOR_URL --format json | jq
rekor-cli search --email jdoe@redhat.com --rekor_server $COSIGN_REKOR_URL --format json | jq
Copy to Clipboard Copied! このコマンドは、次の手順で使用する UUID を返します。
UUID を使用してトランザクションの詳細を取得します。
構文
rekor-cli get --uuid UUID --rekor_server $COSIGN_REKOR_URL --format json | jq
rekor-cli get --uuid UUID --rekor_server $COSIGN_REKOR_URL --format json | jq
Copy to Clipboard Copied! 例
rekor-cli get --uuid 24296fb24b8ad77a71b9c1374e207537bafdd75b4f591dcee10f3f697f150d7cc5d0b725eea641e7 --rekor_server $COSIGN_REKOR_URL --format json | jq
rekor-cli get --uuid 24296fb24b8ad77a71b9c1374e207537bafdd75b4f591dcee10f3f697f150d7cc5d0b725eea641e7 --rekor_server $COSIGN_REKOR_URL --format json | jq
Copy to Clipboard Copied!
2.2.2. コマンドラインインターフェイスから Gitsign を使用したコミットの署名および検証
gitsign
ツールを使用すると、Red Hat の Trusted Artifact Signer (RHTAS) サービスを使用して、Git リポジトリーのコミットに署名し、検証することができます。
前提条件
- Ansible によって管理される Red Hat Enterprise Linux 9.4 以降で実行される RHTAS のインストール。
git
およびcosign
バイナリーがインストールされたワークステーション。-
cosign
バージョン 2.2 以降を使用する必要があります。
-
手順
ローカルのコマンドラインインターフェイス (CLI) ツールのダウンロードページから
gitsign
バイナリーをワークステーションにダウンロードします。注記URL アドレスは、
tas_single_node_base_hostname
変数によって定義された設定済みノードです。tas_single_node_base_hostname
の値がexample.com
の場合、URL アドレスの例はhttps://cli-server.example.com
です。- ダウンロードページから、gitsign ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、.gz ファイルを展開して、実行ビットを設定します。
例
gunzip gitsign-amd64.gz chmod +x gitsign-amd64
gunzip gitsign-amd64.gz chmod +x gitsign-amd64
Copy to Clipboard Copied! バイナリーを
$PATH
環境内の場所に移動し、名前を変更します。例
sudo mv gitsign-amd64 /usr/local/bin/gitsign
sudo mv gitsign-amd64 /usr/local/bin/gitsign
Copy to Clipboard Copied!
コミットの署名と検証を行うためにシェル環境を設定します。
例
export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export TUF_URL="https://tuf.${BASE_HOSTNAME}" export OIDC_ISSUER_URL=OIDC_ISSUER_URL export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}" export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}" export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export TUF_URL="https://tuf.${BASE_HOSTNAME}" export OIDC_ISSUER_URL=OIDC_ISSUER_URL export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}" export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}" export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
Copy to Clipboard Copied! BASE_HOSTNAME_OF_RHTAS_SERVICE は
tas_single_node_base_hostname
変数の値に置き換え、OIDC_ISSUER_URL は OpenID Connect (OIDC) プロバイダーの URL 文字列に置き換えます。RHTAS サービスを使用してコミットに署名するようにローカルリポジトリー設定を指定します。
例
git config --local commit.gpgsign true git config --local tag.gpgsign true git config --local gpg.x509.program gitsign git config --local gpg.format x509 git config --local gitsign.fulcio $SIGSTORE_FULCIO_URL git config --local gitsign.rekor $SIGSTORE_REKOR_URL git config --local gitsign.issuer $SIGSTORE_OIDC_ISSUER git config --local gitsign.clientID trusted-artifact-signer
git config --local commit.gpgsign true git config --local tag.gpgsign true git config --local gpg.x509.program gitsign git config --local gpg.format x509 git config --local gitsign.fulcio $SIGSTORE_FULCIO_URL git config --local gitsign.rekor $SIGSTORE_REKOR_URL git config --local gitsign.issuer $SIGSTORE_OIDC_ISSUER git config --local gitsign.clientID trusted-artifact-signer
Copy to Clipboard Copied! ローカルリポジトリーにコミットを作成します。
例
git commit --allow-empty -S -m “Test of a signed commit”
git commit --allow-empty -S -m “Test of a signed commit”
Copy to Clipboard Copied! Web ブラウザーが開いて、メールアドレスでコミットに署名できます。
The Update Framework (TUF) システムを初期化します。
例
cosign initialize
cosign initialize
Copy to Clipboard Copied! コミットを確認します。
構文
gitsign verify --certificate-identity=SIGNING_EMAIL --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
gitsign verify --certificate-identity=SIGNING_EMAIL --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
Copy to Clipboard Copied! 例
gitsign verify --certificate-identity=jdoe@redhat.com --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
gitsign verify --certificate-identity=jdoe@redhat.com --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
Copy to Clipboard Copied!
2.2.3. エンタープライズコントラクトを使用したコンテナーイメージの署名の検証
Enterprise Contract (EC) は、ソフトウェアサプライチェーンのセキュリティーを維持するためのツールであり、これを使用してコンテナーイメージのポリシーを定義および適用できます。ec
バイナリーを使用すると、Red Hat の Trusted Artifact Signer (RHTAS) 署名フレームワークを使用するコンテナーイメージのアテステーションと署名を検証できます。
前提条件
- Ansible によって管理される Red Hat Enterprise Linux 9.4 以降で実行される RHTAS のインストール。
cosign
およびpodman
バイナリーがインストールされたワークステーション。-
cosign
バージョン 2.2 以降を使用する必要があります。
-
手順
ローカルコマンドラインインターフェイス (CLI) ツールのダウンロードページから
ec
バイナリーをワークステーションにダウンロードします。注記URL アドレスは、
tas_single_node_base_hostname
変数によって定義された設定済みノードです。tas_single_node_base_hostname
の値がexample.com
の場合、URL アドレスの例はhttps://cli-server.example.com
です。- ダウンロードページから、ec ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー .gz ファイルを展開し、実行ビットを設定します。
例
gunzip ec-amd64.gz chmod +x ec-amd64
gunzip ec-amd64.gz chmod +x ec-amd64
Copy to Clipboard Copied! バイナリーを
$PATH
環境内の場所に移動し、名前を変更します。例
sudo mv ec-amd64 /usr/local/bin/ec
sudo mv ec-amd64 /usr/local/bin/ec
Copy to Clipboard Copied!
コンテナーイメージの署名と検証を行うためにシェル環境を設定します。
例
export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export TUF_URL="https://tuf.${BASE_HOSTNAME}" export OIDC_ISSUER_URL=OIDC_ISSUER_URL export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}" export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}" export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE export TUF_URL="https://tuf.${BASE_HOSTNAME}" export OIDC_ISSUER_URL=OIDC_ISSUER_URL export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}" export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}" export COSIGN_MIRROR=$TUF_URL export COSIGN_ROOT=$TUF_URL/root.json export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL export COSIGN_YES="true" export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
Copy to Clipboard Copied! BASE_HOSTNAME_OF_RHTAS_SERVICE は
tas_single_node_base_hostname
変数の値に置き換え、OIDC_ISSUER_URL は OpenID Connect (OIDC) プロバイダーの URL 文字列に置き換えます。The Update Framework (TUF) システムを初期化します。
例
cosign initialize
cosign initialize
Copy to Clipboard Copied! テストコンテナーイメージに署名します。
空のコンテナーイメージを作成します。
例
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! 空のコンテナーイメージを
ttl.sh
一時レジストリーにプッシュします。例
podman push ttl.sh/rhtas/test-image:1h
podman push ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! コンテナーイメージに署名します。
構文
cosign sign -y IMAGE_NAME:TAG
cosign sign -y IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign sign -y ttl.sh/rhtas/test-image:1h
cosign sign -y ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Web ブラウザーが開いて、コンテナーイメージをメールアドレスで署名できます。
一時的な Docker ファイルを削除します。
例
rm ./tmp.Dockerfile
rm ./tmp.Dockerfile
Copy to Clipboard Copied!
predicate.json
ファイルを作成します。例
{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://example.com/tekton-pipeline", "invocation": {}, "buildConfig": {}, "metadata": { "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] }
{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://example.com/tekton-pipeline", "invocation": {}, "buildConfig": {}, "metadata": { "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] }
Copy to Clipboard Copied! スキーマレイアウトの詳細は、SLSA provenance predicate specifications を参照してください。
predicate.json
ファイルをコンテナーイメージに関連付けます。構文
cosign attest -y --predicate ./predicate.json --type slsaprovenance IMAGE_NAME:TAG
cosign attest -y --predicate ./predicate.json --type slsaprovenance IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign attest -y --predicate ./predicate.json --type slsaprovenance ttl.sh/rhtas/test-image:1h
cosign attest -y --predicate ./predicate.json --type slsaprovenance ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! コンテナーイメージにアテステーションと署名が 1 つ以上含まれていることを確認します。
構文
cosign tree IMAGE_NAME:TAG
cosign tree IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign tree ttl.sh/rhtas/test-image:1h 📦 Supply Chain Security Related artifacts for an image: ttl.sh/rhtas/test-image@sha256:7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35 └── 💾 Attestations for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.att └── 🍒 sha256:40d94d96a6d3ab3d94b429881e1b470ae9a3cac55a3ec874051bdecd9da06c2e └── 🔐 Signatures for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.sig └── 🍒 sha256:f32171250715d4538aec33adc40fac2343f5092631d4fc2457e2116a489387b7
cosign tree ttl.sh/rhtas/test-image:1h 📦 Supply Chain Security Related artifacts for an image: ttl.sh/rhtas/test-image@sha256:7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35 └── 💾 Attestations for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.att └── 🍒 sha256:40d94d96a6d3ab3d94b429881e1b470ae9a3cac55a3ec874051bdecd9da06c2e └── 🔐 Signatures for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.sig └── 🍒 sha256:f32171250715d4538aec33adc40fac2343f5092631d4fc2457e2116a489387b7
Copy to Clipboard Copied! Enterprise Contact を使用してコンテナーイメージを確認します。
構文
ec validate image --image IMAGE_NAME:TAG --certificate-identity-regexp 'SIGNER_EMAIL_ADDR' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes
ec validate image --image IMAGE_NAME:TAG --certificate-identity-regexp 'SIGNER_EMAIL_ADDR' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes
Copy to Clipboard Copied! 例
ec validate image --image ttl.sh/rhtas/test-image:1h --certificate-identity-regexp 'jdoe@example.com' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes success: true successes: - metadata: code: builtin.attestation.signature_check msg: Pass - metadata: code: builtin.attestation.syntax_check msg: Pass - metadata: code: builtin.image.signature_check msg: Pass ec-version: v0.1.2427-499ef12 effective-time: "2024-01-21T19:57:51.338191Z" key: "" policy: {} success: true
ec validate image --image ttl.sh/rhtas/test-image:1h --certificate-identity-regexp 'jdoe@example.com' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes success: true successes: - metadata: code: builtin.attestation.signature_check msg: Pass - metadata: code: builtin.attestation.syntax_check msg: Pass - metadata: code: builtin.image.signature_check msg: Pass ec-version: v0.1.2427-499ef12 effective-time: "2024-01-21T19:57:51.338191Z" key: "" policy: {} success: true
Copy to Clipboard Copied! エンタープライズコントラクトは、セキュリティー違反の詳細を含む pass-fail レポートを生成します。
--info
フラグを追加すると、レポートには、検出された違反に対する詳細と考えられる解決策が含まれます。
関連情報
- 詳細は、Conforma の Web サイト を参照してください。
付録A Red Hat build of Keycloak のサービスと StatefulSet YAML 設定
Red Hat の Trusted Artifact Signer (RHTAS) サービス用に Red Hat’s build of Keycloak (RHBK) を設定するときに使用されるサービスおよび StatefulSet YAML リソース設定です。
--- apiVersion: v1 kind: Service metadata: name: postgresql-db namespace: keycloak-system spec: internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - port: 5432 selector: app: postgresql-db --- apiVersion: apps/v1 kind: StatefulSet metadata: name: postgresql-db namespace: keycloak-system spec: persistentVolumeClaimRetentionPolicy: whenDeleted: Retain whenScaled: Retain podManagementPolicy: OrderedReady replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: postgresql-db serviceName: postgresql-db template: metadata: labels: app: postgresql-db spec: containers: - env: - name: POSTGRESQL_USER valueFrom: secretKeyRef: key: username name: postgresql-db - name: POSTGRESQL_PASSWORD valueFrom: secretKeyRef: key: password name: postgresql-db - name: POSTGRESQL_DATABASE valueFrom: secretKeyRef: key: database name: postgresql-db image: registry.redhat.io/rhel9/postgresql-15:latest imagePullPolicy: IfNotPresent livenessProbe: exec: command: - /usr/libexec/check-container - --live failureThreshold: 3 initialDelaySeconds: 120 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 10 name: postgresql-db readinessProbe: exec: command: - /usr/libexec/check-container failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /var/lib/pgsql/data name: data dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault terminationGracePeriodSeconds: 30 updateStrategy: rollingUpdate: partition: 0 type: RollingUpdate volumeClaimTemplates: - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: data spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi volumeMode: Filesystem
---
apiVersion: v1
kind: Service
metadata:
name: postgresql-db
namespace: keycloak-system
spec:
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- port: 5432
selector:
app: postgresql-db
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgresql-db
namespace: keycloak-system
spec:
persistentVolumeClaimRetentionPolicy:
whenDeleted: Retain
whenScaled: Retain
podManagementPolicy: OrderedReady
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: postgresql-db
serviceName: postgresql-db
template:
metadata:
labels:
app: postgresql-db
spec:
containers:
- env:
- name: POSTGRESQL_USER
valueFrom:
secretKeyRef:
key: username
name: postgresql-db
- name: POSTGRESQL_PASSWORD
valueFrom:
secretKeyRef:
key: password
name: postgresql-db
- name: POSTGRESQL_DATABASE
valueFrom:
secretKeyRef:
key: database
name: postgresql-db
image: registry.redhat.io/rhel9/postgresql-15:latest
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- /usr/libexec/check-container
- --live
failureThreshold: 3
initialDelaySeconds: 120
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 10
name: postgresql-db
readinessProbe:
exec:
command:
- /usr/libexec/check-container
failureThreshold: 3
initialDelaySeconds: 5
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/lib/pgsql/data
name: data
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
terminationGracePeriodSeconds: 30
updateStrategy:
rollingUpdate:
partition: 0
type: RollingUpdate
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
volumeMode: Filesystem
付録B Trusted Artifact Signer のコンポーネントとバージョン番号
次の表には、Red Hat の Trusted Artifact Signer (RHTAS) ソフトウェアコンポーネントと、1.2.1 リリースの対応するバージョン番号がリスト表示されています。
バイナリー | バージョン |
---|---|
| 2.4.3 |
| 0.12.0 |
| 1.3.9 |
| 0.6 |
| 1.7.1 |
| 1.7.1 |
| 0.12.0 |
| 0.17.1 |
| 1.2.4 |
コンポーネント | バージョン |
---|---|
logserver | 1.7.1 |
logsigner | 1.7.1 |
database | 1.7.1 |
redis | 1.7.1 |
コンポーネント | バージョン |
---|---|
rekor-server | 1.3.9 |
backfill-redis | 1.3.9 |
rekor-search-ui | 1.3.9 |
コンポーネント | バージョン |
---|---|
fulcio-server | 1.6.6 |
コンポーネント | バージョン |
---|---|
certificate-transparency-go | 1.3.1 |
コンポーネント | バージョン |
---|---|
timestamp-authority | 1.2.4 |