@@ -65,7 +65,7 @@ This plugin automates DNS-01 challenges using pluggable DNS provider implementat
6565
6666| Provider | Auth Methods Supported | Config Keys Required |
6767| --------------| -----------------------------------------------| --------------------------------------------------------|
68- | Google DNS | Service Account Key or ADC | ` Google_ServiceAccountKeyPath ` , ` Google_ProjectId ` |
68+ | Google DNS | Service Account Key (file or JSON), or ADC | ` Google_ServiceAccountKeyPath ` , ` Google_ServiceAccountKeyJson ` , ` Google_ProjectId ` |
6969| AWS Route 53 | Access Key/Secret or IAM Role | ` AwsRoute53_AccessKey ` , ` AwsRoute53_SecretKey ` |
7070| Azure DNS | Client Secret or Managed Identity | ` Azure_TenantId ` , ` Azure_ClientId ` , ` Azure_ClientSecret ` , ` Azure_SubscriptionId ` |
7171| Cloudflare | API Token | ` Cloudflare_ApiToken ` |
@@ -87,8 +87,9 @@ This logic is handled by the `DnsVerificationHelper` class and ensures a high-co
8787
8888Each provider supports multiple credential strategies:
8989
90- - ** Google DNS** :
91- - ✅ ** Service Account Key** (via ` Google_ServiceAccountKeyPath ` )
90+ - ** Google DNS** :
91+ - ✅ ** Service Account Key File** (via ` Google_ServiceAccountKeyPath ` )
92+ - ✅ ** Service Account Key JSON** (via ` Google_ServiceAccountKeyJson ` - paste JSON directly)
9293 - ✅ ** Application Default Credentials** (e.g., GCP Workload Identity or developer auth)
9394
9495- ** AWS Route 53** :
@@ -229,12 +230,17 @@ This ACME Gateway implementation uses a local file-based store to persist ACME a
229230<details >
230231<summary ><strong >📁 Account Directory Structure</strong ></summary >
231232
232- Each account is saved in its own directory within:
233+ Each account is saved in its own directory within the configured storage path :
233234
234235```
235- %APPDATA%\AcmeAccounts \{host}_{accountId}
236+ {AccountStoragePath} \{host}_{accountId}
236237```
237238
239+ ** Default paths:**
240+ - ** Windows:** ` %APPDATA%\AcmeAccounts\{host}_{accountId} `
241+ - ** Containers (when APPDATA unavailable):** ` ./AcmeAccounts\{host}_{accountId} `
242+ - ** Custom:** Set ` AccountStoragePath ` in the Gateway configuration
243+
238244Where:
239245- ` {host} ` is the ACME directory host with dots replaced by dashes (e.g., ` acme-zerossl-com ` )
240246- ` {accountId} ` is the final segment of the account's KID URL
@@ -344,10 +350,10 @@ This section outlines all required ports, file access, permissions, and validati
344350
345351| Path | Purpose |
346352| ----------------------------------------------------| ----------------------------------------------|
347- | ` %APPDATA%\AcmeAccounts\ ` | Default base path for ACME account storage |
348- | ` AcmeAccounts \{account_id}\Registration_v2` | Contains serialized ACME account metadata |
349- | ` AcmeAccounts \{account_id}\Signer_v2` | Contains the encrypted private signer key |
350- | ` AcmeAccounts \default_{host}.txt` | Stores the default account pointer for a given directory |
353+ | ` %APPDATA%\AcmeAccounts\ ` or ` AccountStoragePath ` | Base path for ACME account storage (configurable) |
354+ | ` {base} \{account_id}\Registration_v2` | Contains serialized ACME account metadata |
355+ | ` {base} \{account_id}\Signer_v2` | Contains the encrypted private signer key |
356+ | ` {base} \default_{host}.txt` | Stores the default account pointer for a given directory |
351357
352358#### File Access & Permissions
353359
@@ -357,7 +363,8 @@ This section outlines all required ports, file access, permissions, and validati
357363| Account files | Read/Write| ` Read ` , ` Write ` |
358364
359365- Files may be optionally encrypted using AES if a passphrase is configured.
360- - Ensure the service account under which the orchestrator runs has read/write access to ` %APPDATA% ` or the custom configured base path.
366+ - Ensure the service account under which the orchestrator runs has read/write access to the configured base path.
367+ - For containers, mount a persistent volume to the ` AccountStoragePath ` to preserve accounts across restarts.
361368
362369</details >
363370
@@ -384,6 +391,61 @@ This section outlines all required ports, file access, permissions, and validati
384391
385392</details >
386393
394+ ---
395+
396+ ### Container Deployment
397+
398+ This section covers configuration options specific to containerized deployments (Docker, Kubernetes, etc.).
399+
400+ <details >
401+ <summary ><strong >📁 Configurable Account Storage Path</strong ></summary >
402+
403+ By default, the plugin stores ACME accounts in ` %APPDATA%\AcmeAccounts ` on Windows. In containerized environments, use the ` AccountStoragePath ` configuration option:
404+
405+ | Environment | Recommended Path |
406+ | -------------| ------------------|
407+ | Docker/Kubernetes | ` /data/AcmeAccounts ` (mounted volume) |
408+ | Windows Container | ` C:\AcmeData\AcmeAccounts ` |
409+
410+ If ` AccountStoragePath ` is not set and ` %APPDATA% ` is unavailable, the plugin defaults to ` ./AcmeAccounts ` relative to the working directory.
411+
412+ </details >
413+
414+ <details >
415+ <summary ><strong >🌐 Google Cloud DNS in Containers</strong ></summary >
416+
417+ For Google Cloud DNS in container environments, you have three authentication options:
418+
419+ 1 . ** Workload Identity (GKE)** : No explicit credentials needed; uses pod identity.
420+ 2 . ** JSON key in config** : Paste the service account JSON directly into ` Google_ServiceAccountKeyJson ` .
421+ 3 . ** Mounted JSON file** : Mount the service account key file and set ` Google_ServiceAccountKeyPath ` .
422+
423+ </details >
424+
425+ <details >
426+ <summary ><strong >☸️ Kubernetes Deployment Considerations</strong ></summary >
427+
428+ When deploying in Kubernetes:
429+
430+ 1 . ** Persistent Storage** : Use a PersistentVolumeClaim for ` AccountStoragePath ` to preserve ACME accounts across pod restarts.
431+ 2 . ** Cloud Provider Identity** : Leverage Workload Identity (GKE), IAM Roles for Service Accounts (EKS), or Pod Identity (AKS) for DNS provider authentication.
432+
433+ ** Example PersistentVolumeClaim:**
434+ ``` yaml
435+ apiVersion : v1
436+ kind : PersistentVolumeClaim
437+ metadata :
438+ name : acme-accounts
439+ spec :
440+ accessModes :
441+ - ReadWriteOnce
442+ resources :
443+ requests :
444+ storage : 100Mi
445+ ` ` `
446+
447+ </details>
448+
387449
388450## Gateway Registration
389451
0 commit comments