values.yaml ファイルには一切保存されません。サポートされるプロバイダーは 2 種類で、インストールごとに vantage.secrets で必ず 1 つだけ設定します。
サポートされているプロバイダー
この 2 つのプロバイダーは、同じ シークレットエイリアス の仕様を共有しています。Vantage のワークロードは、値の取得元に関係なく、エイリアスでシークレットを参照します。プロビジョニングを計画するには、以下の エイリアス一覧 を参照してください。
Azure Key Vault プロバイダー
Identity モード
仕組み
Vantage は、Azure Key Vault provider とともに Secrets Store CSI driver を使用します。各チャートの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 より前にクラスターへインストールしておく必要があります。前提条件を参照してください。
チャートごとのリソース
シークレットを使用する各 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
PostgreSQL を使用するには、vantage.databaseProvider: PostgreSQL を設定します。各サービスには、それぞれ別の論理データベースを指定する接続文字列が必要です。1 つのデータベースを共有すると、サービス間でマイグレーション状態が衝突します。
ワークロードによっては、名前が一意の接続文字列キーを読み取るため、1 つの Secret を共有できます。一方、汎用キー Database__ConnectionString を読み取るワークロードもあります。その場合は、各サービスごとに個別の Secret を作成し、vantage.secrets.kubernetes.objects でそのエイリアスをマップします。
reportingEnabled: false のままにしてください。
シークレットのエイリアス
以下のエイリアスは、Vantage のワークロードとお使いのシークレット プロバイダーとの間の取り決めです。Azure プロバイダーでは、最も簡単なのは、Key Vault シークレットの名前をエイリアスに合わせることです。どちらのプロバイダーでも、シークレット構成内のobjects マッピングを使って名前を再マッピングできます。
プラットフォーム
ストレージ
デフォルトの Azure Blob ストレージ バックエンドを使用する場合にのみ必要です。spec.storage.custom が Kubernetes の StorageClass ベースのバックエンド (たとえば NFS) 用に設定されている場合、これらのエイリアスは使用されません。各エイリアスはストレージ アカウントの接続文字列です。各ストレージ 型の用途については、Vantage の基本システム ドキュメントを参照してください。
データベース
データベースごとに、それぞれ異なる 接続文字列 を 1 つずつ設定します。データベース名はあくまで例です。接続文字列 が正しいデータベースを指していれば、プロビジョニング処理で生成される名前であればどのようなものでも問題ありません。OAuth
†
sendgridApiKey は、SMTP を使用しない場合にのみ必須です。既知の制限事項を参照してください。
証明書エイリアス
PEM エンコードされた TLS 関連データが 4 つ必要です。これらは、2 組のシークレットエイリアス (証明書 + 秘密鍵) として扱われます。Azure プロバイダーでは、Key Vault の証明書オブジェクトではなく、Key Vault シークレットとして保存してください。
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 名を再マッピングします。
命名と再マッピング
Azure プロバイダーでは、objects マッピングに記載されていないエイリアスについては、エイリアス自体が Key Vault オブジェクト名として使用されます (secret 型として取得) 。Key Vault オブジェクトの名前がすでにエイリアスと一致している場合、objects マッピングは不要です。Kubernetes プロバイダーでは、objects が定義されていない場合、デフォルトのシークレット名が使用されます。
プロビジョニング プロセスで別の名前を使用している場合は、シークレット設定で objects マッピングを指定してください。
必須の権限
Azure Key Vault provider では、Secrets Store CSI driver が使用する ID に、上記に記載されているすべてのシークレットと証明書への 読み取り アクセスが必要です。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 の構成。
