SPIRE: v1.0.2 変更内容

## はじめに

SPIRE v1.0.2 の変更内容を紹介します。
https://github.com/spiffe/spire/releases/tag/v1.0.2

:pencil: がついた文章は、CHANGELOG の公式内容ではなく筆者の補足です。

## Added

- Open Policy Agent (OPA) をベースにしたアクセス制御が実験的にサポートされました。([#2416](https://github.com/spiffe/spire/pull/2416))
    - :pencil: 大規模なリファクタリングを経て、遂に SPIRE Server の API にリソース志向なアクセス制御機能が提供されました。詳細な解説は https://qiita.com/hiyosi/items/536a582ee526725bc07c を参照してください。
- SPIRE Server で監査ログを発行できるようになりました。([#2297](https://github.com/spiffe/spire/pull/2297), [#2391](https://github.com/spiffe/spire/pull/2391), [#2394](https://github.com/spiffe/spire/pull/2394), [#2396](https://github.com/spiffe/spire/pull/2396), [#2442](https://github.com/spiffe/spire/pull/2442), [#2458](https://github.com/spiffe/spire/pull/2458))
    - :pencil: SPIRE Server に通常のログと同じように監査用途のログを発行できる機能が提供されました。詳細な解説は https://qiita.com/inajob/items/eee2f62e1c17acdeb53e を参照してください。
- SPIRE Agent が提供する Envoy SDS v3 API で SPIFFE Certificate Validator がサポートされました。([#2435](https://github.com/spiffe/spire/pull/2435), [#2460](https://github.com/spiffe/spire/pull/2460))
    - :pencil: [SPIFFE Certificate Validator](https://www.envoyproxy.io/docs/envoy/v1.18.2/api-v3/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.proto) は SVID を検証する際に Trust Domain に応じて使用する Trust Bundle を切り替える機能です。この機能は、Trust Domain を跨いだサービス間の SPIFFE 認証の課題を解決するために Envoy v1.18.0 から提供されたものです。SPIFFE Certificate Validator の開発に至った経緯や仕様の詳細は https://speakerdeck.com/mathetake/isolated-multiple-trust-domain-mtls-in-envoy-and-istio?slide=41 を参照してください。
- SPIRE OIDC Discovery Provider が Host ヘッダーを賢く処理するようになりました。([#2404](https://github.com/spiffe/spire/pull/2404), [#2453](https://github.com/spiffe/spire/pull/2453))
- SPIRE OIDC Discovery Provider で `allow_insecure_scheme` 設定がサポートされて HTTP でサービスを提供できるようになりました。([#2404](https://github.com/spiffe/spire/pull/2404))
- Telemetry 機能にメトリクスやラベルをフィルタリングする設定が追加されました。([#2400](https://github.com/spiffe/spire/pull/2400))
- SPIRE Kubernetes Workload Registrar の CRD モードで SPIFFE ID をテンプレートベースで定義できる機能がサポートされました。([#2417](https://github.com/spiffe/spire/pull/2417))
    - :pencil: これまで CRD モードでは、他のモードと同様に Registration Entry に設定する SPIFFE ID を定義する方法として、Service Account ベース（デフォルト）、Pod の Label ベース、Pod の Annotation ベースの3つがサポートされていましたが、CRD モードに限り Service Account ベースの方法が非推奨となり、代わりにテンプレートベースの方法がサポートされました。これにより SPIRE 管理者が Pod オブジェクトで利用可能な値（Namespace, Pod名, 他）と、任意のメタデータ（Region名, クラスタ名, 他）を元に SPIFFE ID をカスタマイズできるようになります。具体的には、Service Account ベースを使用した場合、これまで `spiffe://<trust-domain>/ns/<namespace>/sa/<service-account>` のように固定のフォーマットだったものが、テンプレートベースを使用することで `spiffe://<trust-domain>/region/<region>/cluster/<cluster>/sa/<service-account>/pod_name/<pod>` のように SPIFFE ID を任意のフォーマットでカスタマイズできるイメージです。
- SPIRE Server の API におけるフィルタリングサポートが強化されました。([#2467](https://github.com/spiffe/spire/pull/2467), [#2463](https://github.com/spiffe/spire/issues/2463), [#2464](https://github.com/spiffe/spire/issues/2464), [#2468](https://github.com/spiffe/spire/pull/2468))
    - :pencil: エントリ一覧と SPIRE Agent 一覧を取得する API にリクエストする際に、`MATCH_SUPERSET` か `MATCH_ANY` をリクエストに含めることで取得結果をフィルタリングできるようになりました。各パラメータの仕様は以下を参照してください。
        - https://github.com/spiffe/spire-api-sdk/blob/782cd5a6b6600442f089489649ca1c3c987c3b45/proto/spire/api/types/selector.proto
        - https://github.com/spiffe/spire-api-sdk/blob/782cd5a6b6600442f089489649ca1c3c987c3b45/proto/spire/api/types/federateswith.proto
- PeerTracker におけるエラーのロギングが改善されました。([#2469](https://github.com/spiffe/spire/pull/2469))
    - :pencil: PeerTracker は Workload API のセキュリティを向上させるためのもので、呼び出し元プロセスの追跡を担う機能です。
        - https://github.com/spiffe/spire/blob/v1.0.2/pkg/common/peertracker/peertracker.go

## Changed

- SPIRE Kubernetes Workload Registrar の CRD モードの Validating Admission Webhook 機能（SpiffeID リソースの検証に使用）で SPIRE が発行した証明書を使用するようになりました。([#2321](https://github.com/spiffe/spire/pull/2321))
    - :pencil: これにより SPIRE Kubernetes Workload Registrar の CRD モードのデプロイが簡素化されます。
- Upstream Authority "vault" プラグインで Vault への Token 更新リクエストが失敗しても Lease 期限まではリトライされるようになりました。([#2445](https://github.com/spiffe/spire/pull/2445))

## Fixed

- 非推奨の `allow_unsafe_ids` パラメーターが設定されている場合に nil pointer dereference エラーが発生する問題が修正されました。([#2477](https://github.com/spiffe/spire/pull/2477))

## Deprecated

- SPIRE OIDC Discovery Provider の `domain` パラメーターが非推奨になり、代わりに `domains` パラメーターが追加されました。([#2404](https://github.com/spiffe/spire/pull/2404))