10.7.2.4. SPIRE での JSON Web Token 認証の設定
アプリケーションが SPIFFE のアイデンティティーを使用して Vault にセキュアにログインできるように、JSON Web Token (JWT) 認証を設定する必要があります。
前提条件
- Vault が初期化およびアンシールされていることを確認する。
- テストシークレットがキー値シークレットエンジンに保存されていることを確認します。
手順
ローカルマシンで、次のコマンドを実行して SPIRE 認証局 (CA) バンドルを取得し、ファイルに保存します。
$ oc get cm -n zero-trust-workload-identity-manager spire-bundle -o jsonpath='{ .data.bundle\.crt }' > oidc_provider_ca.pemVault Pod シェルに戻り、次のコマンドを実行して一時ファイルを作成し、
oidc_provider_ca.pemの内容をそのファイルに貼り付けます。$ cat << EOF > /tmp/oidc_provider_ca.pem -----BEGIN CERTIFICATE----- <Paste-Your-Certificate-Content-Here> -----END CERTIFICATE----- EOF次のコマンドを実行して、JWT 設定に必要な環境変数を設定します。
$ export APP_DOMAIN=<Your-App-Domain>$ export JWT_ISSUER_ENDPOINT="oidc-discovery.$APP_DOMAIN"$ export OIDC_URL="https://$JWT_ISSUER_ENDPOINT"$ export OIDC_CA_PEM="$(cat /tmp/oidc_provider_ca.pem)"次のコマンドを実行して、新しい環境変数を作成します。
$ export ROLE="${NAME}-role"次のコマンドを実行して、JWT 認証方法を有効にします。
$ vault auth enable jwt次のコマンドを実行して、ODIC 認証方法を設定します。
$ vault write auth/jwt/config \ oidc_discovery_url=$OIDC_URL \ oidc_discovery_ca_pem="$OIDC_CA_PEM" \ default_role=$ROLE次のコマンドを実行して、
ztwim-policyという名前のポリシーを作成します。$ export POLICY="${NAME}-policy"次のコマンドを実行して、先ほど作成したシークレットへの読み取りアクセス権を付与します。
$ vault policy write $POLICY -<<EOF path "secret/$NAME" { capabilities = ["read"] } EOF次のコマンドを実行して、以下の環境変数を作成します。
$ export APP_NAME=client$ export APP_NAMESPACE=demo$ export AUDIENCE=$APP_NAME次のコマンドを実行して、特定の SPIFFE ID を持つワークロードにポリシーをバインドする JWT ロールを作成します。
$ vault write auth/jwt/role/$ROLE -<<EOF { "role_type": "jwt", "user_claim": "sub", "bound_audiences": "$AUDIENCE", "bound_claims_type": "glob", "bound_claims": { "sub": "spiffe://$APP_DOMAIN/ns/$APP_NAMESPACE/sa/$APP_NAME" }, "token_ttl": "24h", "token_policies": "$POLICY" } EOF