3.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.13 以降
- リソースを作成する権限を持つ 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)
ユーザーがアプリケーション登録を使用して 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')
注記デフォルトでは、クライアントシークレットの有効期間は 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"}'
アプリケーション登録オブジェクト ID を取得します。
例
$ export RHTAS_APP_REGISTRATION_OBJ_ID=$(az ad app show --id $RHTAS_APP_REGISTRATION --output tsv --query id)
アプリケーション登録のマニフェストを更新します。
例
$ 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}}"
新しいサービスプリンシパルを作成し、それをアプリケーション登録に関連付けます。
例
$ export SERVICE_PRINCIPAL_ID=$(az ad sp create --id=${RHTAS_APP_REGISTRATION} -o tsv --query 'id')
クレームマッピングポリシー 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")
クレームマッピングポリシーをサービスプリンシパルに関連付けます。
例
$ 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}\"}"
テナント ID を取得します。
例
$ export TENANT_ID=$(az account show -o tsv --query tenantId)
OIDC エンドポイントを取得します。
例
$ export ENTRA_ID_OIDC_ENDPOINT=$(echo https://login.microsoftonline.com/${TENANT_ID}/v2.0)
RHTAS 設定を更新します。
Securesign
リソースを開いて編集します。構文
oc edit Securesign NAME -n NAMESPACE
例
$ oc edit Securesign securesign-sample -n trusted-artifact-signer
注記RHTAS インストール用に作成されたプロジェクト名を namespace として使用する必要があります。
OIDCIssuers
セクションで、クライアント ID、発行者の URL を含む新しいサブセクションを追加し、Type
値をemail
に設定します。構文
... OIDCIssuers: - Issuer: "${ENTRA_ID_OIDC_ENDPOINT}" IssuerURL: "${ENTRA_ID_OIDC_ENDPOINT}" ClientID: "${RHTAS_APP_REGISTRATION}" Type: email ...
- 変更を保存し、エディターを終了します。数秒後、Operator は RHTAS ソフトウェアスタックを自動的に再設定します。
ローカルクライアントシークレットファイルを作成します。
例
$ echo $RHTAS_APP_REGISTRATION_CLIENT_SECRET > 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
署名のためにローカルマシンを初期化します。
例
$ cosign initialize
テストコンテナーイメージに署名して、更新された設定を確認します。
空のコンテナーイメージを作成します。
例
$ echo "FROM scratch" > ./tmp.Dockerfile $ podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
空のコンテナーイメージを
ttl.sh
一時レジストリーにプッシュします。例
$ podman push ttl.sh/rhtas/test-image:1h
一時的な Docker ファイルを削除します。
例
$ rm ./tmp.Dockerfile
コンテナーイメージに署名します。
構文
cosign sign -y --oidc-client-secret-file=SECRET_FILE IMAGE_NAME:TAG
例
$ cosign sign -y --oidc-client-secret-file=rhtas-entra-id-client-secret ttl.sh/rhtas/test-image:1h
Web ブラウザーが開いて、コンテナーイメージをメールアドレスで署名できます。