values.yaml ファイルには一切保存されません。サポートされるプロバイダーは 2 種類で、インストールごとに vantage.secrets で必ず 1 つだけ設定します。
サポートされているプロバイダー
この 2 つのプロバイダーは、同じ シークレットエイリアス の仕様を共有しています。Vantage のワークロードは、値の取得元に関係なく、エイリアスでシークレットを参照します。プロビジョニングを計画するには、以下の エイリアス一覧 を参照してください。
Azure Key Vault プロバイダー
Identity モード
仕組み
SecretProviderClass は、それを使用する pod に CSI ボリュームとしてマウントされ、このマウントをきっかけに、ドライバーが値をチャートごとの Kubernetes Secret (SPC の secretObjects 機能) に同期します。pod はそれを envFrom とボリュームマウント経由で使用します。流れは次のとおりです:
- オペレーターは、チャートごとに
SecretProviderClass(SPC) を生成し、そのチャートに必要な Key Vault エイリアスと、それぞれをチャートごとの KubernetesSecret内のキーにどのようにマップするかを定義します。 - pod が SPC のボリュームをマウントすると、Secrets Store CSI driver は
identityModeで選択された ID として認証を行い、Key Vault から指定されたオブジェクトを取得して、SPC のsecretObjects機能を通じてチャートごとの KubernetesSecretに同期します。 - チャートの pod は、チャートごとの
Secretを使用します。- ほとんどのシークレット は、
envFromを介して環境変数としてロードされます。 - 証明書 (
authSigningTlsCrtなど) も、volumeMountsを介してファイルとしてマウントされます (通常は/var/run/certs/配下) 。
- ほとんどのシークレット は、
Secret と、ランタイム時の pod の環境に存在するため、kubectl get secret から見えなくなるわけではありません。ただし、CSI driver が pod の起動時にそれらを設定するため、values.yaml、ArgoCD の差分、Git には現れません。
Secrets Store CSI driver と Azure Key Vault provider プラグイン は、Vantage より前にクラスターへインストールしておく必要があります。前提条件を参照してください。
チャートごとのリソース
このようにチャートごとに分けることで、Key Vault へのアクセスを最小権限に保てます。つまり、あるチャートの SPC が参照するのは、そのチャートが実際に必要とするエイリアスだけです。
Service accounts and identity scope
ServiceAccount リソースを作成したり、アノテーションを追加したりしません。各チャートは、標準の Helm 値を通じて独自の SA を提供します。SPC をマウントする各チャートの ServiceAccount を、vantage.secrets.azure.clientId で clientId を指定したユーザー割り当てマネージド ID (UAMI) とフェデレーションするのは、顧客の責任です。その ID には、チャートのエイリアスの参照先となる Key Vault オブジェクトへの読み取りアクセスが必要です。
Key Vault へのアクセスとイメージのプル アクセスは別の要件であり、同じ ServiceAccount に適用されることがあります。UAMI フェデレーション (このページ) はシークレットの読み取りを許可しますが、イメージのプル認証は行いません。プルを行うには、
vantage.serviceAccountName で指定された ServiceAccount の imagePullSecrets にレジストリのプル用シークレットを追加するか、代わりに AKS の kubelet ID に AcrPull を付与してください。詳しくは、Image pull access を参照してください。Kubernetes Secrets のプロバイダー
Secret リソースを事前に作成しておいてください。objects が定義されていない場合は、デフォルトのシークレット名が使用されます。名前の異なるシークレットを参照するには、objects マッピング (エイリアスごとの secretName) を指定します。
このプロバイダーでは、Secrets Store CSI driver もクラウドの Key Vault も必要ありません。値はクラスター内の Secret オブジェクトから直接読み取られます。
事前チェック時に、オペレーターはシークレット構成を検証します。matched operator チャートと Vantage チャートは、Secret-reader ClusterRole をインストールし、それをオペレーターの ServiceAccount に Vantage リリースの名前空間内でのみバインドします。resourceNames で Secret へのアクセスを制限する場合は、デフォルトおよび上書き後のすべての Secret 名を含めてください。
外部のシークレット管理システムは、引き続き信頼できる情報源として利用できます。たとえば、External Secrets Operator は HashiCorp Vault から Kubernetes Secrets を生成できます。Vantage が使用するのは、生成された Kubernetes Secrets のみであり、External Secrets や Vault に直接接続することはありません。
PostgreSQL とサービスごとの Secrets
vantage.databaseProvider: PostgreSQL を設定します。各サービスには、それぞれ別の論理データベースを指定する接続文字列が必要です。1 つのデータベースを共有すると、サービス間でマイグレーション状態が衝突します。
ワークロードによっては、名前が一意の接続文字列キーを読み取るため、1 つの Secret を共有できます。一方、汎用キー Database__ConnectionString を読み取るワークロードもあります。その場合は、各サービスごとに個別の Secret を作成し、vantage.secrets.kubernetes.objects でそのエイリアスをマップします。
reportingEnabled: false のままにしてください。
シークレットのエイリアス
objects マッピングを使って名前を再マッピングできます。
プラットフォーム
ストレージ
spec.storage.custom が Kubernetes の StorageClass ベースのバックエンド (たとえば NFS) 用に設定されている場合、これらのエイリアスは使用されません。各エイリアスはストレージ アカウントの接続文字列です。各ストレージ 型の用途については、Vantage の基本システム ドキュメントを参照してください。
データベース
OAuth
†
sendgridApiKey は、SMTP を使用しない場合にのみ必須です。既知の制限事項を参照してください。
証明書エイリアス
Azure プロバイダーでは、Key Vault に
auth-signing と auth-deactivated という名前の自己署名証明書を 2 つ作成し (Common Name = Vantage の dnsRecord 値) 、続いて上記のエイリアス名に合わせて 4 つの Key Vault シークレットを作成するのが最も簡単です。Kubernetes プロバイダーでは、PEM データを含む Secret リソースを事前に作成します。既定の data キーは auth-signing-tls-crt、auth-signing-tls-key、auth-deactivated-tls-crt、auth-deactivated-tls-key です。objects マッピングを使用して Secret 名を再マッピングします。
命名と再マッピング
objects マッピングに記載されていないエイリアスについては、エイリアス自体が Key Vault オブジェクト名として使用されます (secret 型として取得) 。Key Vault オブジェクトの名前がすでにエイリアスと一致している場合、objects マッピングは不要です。Kubernetes プロバイダーでは、objects が定義されていない場合、デフォルトのシークレット名が使用されます。
プロビジョニング プロセスで別の名前を使用している場合は、シークレット設定で objects マッピングを指定してください。
必須の権限
workloadIdentity(デフォルト) :vantage.secrets.azure.clientIdにclientIdが指定されているユーザー割り当てマネージド ID。vmManagedIdentity:vantage.secrets.azure.userAssignedIdentityIDにクライアント ID が指定されている ID。podIdentity: 検証済みのシナリオではありません。これに依存する前に、ABBYY account team にお問い合わせください。
Secret リソースを事前に作成してください。Vantage はそれらを直接使用します。
CSI driver の workload ID (ここでのもの) は、クラスター内の他の workload が使用する workload ID (たとえば、monitoring 用にデプロイする in-mesh Prometheus。Vantage installer は Prometheus をデプロイしません) とは別です。同じ UAMI を使用することも、異なる UAMI を使用することもできます。
次のステップ
前提条件
インストール方法を問わず必要となる、クラスターレベルおよび外部サービスの要件。
Azure へのインストール
Azure Key Vault の構成項目と、インストール手順を順を追って説明します。
セルフマネージド Kubernetes
ネイティブな Kubernetes Secrets と PostgreSQL の構成。
