Skip to content

Commit fd335a0

Browse files
committed
add gw tls conf
Signed-off-by: Kobbi Gal <[email protected]>
1 parent 0f595d9 commit fd335a0

File tree

4 files changed

+62
-3
lines changed

4 files changed

+62
-3
lines changed

secretstores/akeyless/README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ The Akeyless secret store component supports the following configuration options
1818
| Field | Required | Description | Example |
1919
|-------|----------|-------------|---------|
2020
| `gatewayUrl` | No | The Akeyless Gateway URL. Default is https://api.akeyless.io. | `https://your-gateway.akeyless.io` |
21+
| `gatewayTLSCA` | No | The `base64`-encoded PEM certificate of the Akeyless Gateway. Use this when connecting to a gateway with a self-signed or custom CA certificate. | `LS0tLS1CRUdJTi...` |
2122
| `accessId` | Yes | The Akeyless authentication access ID. | `p-123456780wm` |
2223
| `jwt` | No | If using an OAuth2.0/JWT access ID, specify the JSON Web Token | `eyJ...` |
2324
| `accessKey` | No | If using an API Key access ID, specify the API key | `ABCD123...=` |
@@ -48,6 +49,8 @@ spec:
4849
metadata:
4950
- name: gatewayUrl
5051
value: "https://your-gateway.akeyless.io"
52+
- name: gatewayTLSCA
53+
value: "LS0tLS1CRUdJTi...."
5154
- name: accessId
5255
value: "p-1234Abcdam"
5356
- name: accessKey
@@ -67,7 +70,7 @@ spec:
6770
version: v1
6871
metadata:
6972
- name: gatewayUrl
70-
value: "https://your-gateway.akeyless.io"
73+
value: "http://unified.akeyless.svc.cluster.local:8000/api/v2"
7174
- name: accessId
7275
value: "p-1234Abcdom"
7376
- name: jwt
@@ -86,7 +89,7 @@ spec:
8689
version: v1
8790
metadata:
8891
- name: gatewayUrl
89-
value: "https://your-gateway.akeyless.io"
92+
value: "http://unified.akeyless.svc.cluster.local:8000/api/v2"
9093
- name: accessId
9194
value: "p-1234Abcdwm"
9295
```
@@ -103,7 +106,7 @@ spec:
103106
version: v1
104107
metadata:
105108
- name: gatewayUrl
106-
value: "https://gw.akeyless.svc.cluster.local"
109+
value: "http://unified.akeyless.svc.cluster.local:8000/api/v2"
107110
- name: accessId
108111
value: "p-1234Abcdwm"
109112
- name: k8sAuthConfigName

secretstores/akeyless/akeyless.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"errors"
77
"fmt"
8+
"net/http"
89
"net/url"
910
"strings"
1011
"sync"
@@ -36,6 +37,7 @@ func NewAkeylessSecretStore(logger logger.Logger) secretstores.SecretStore {
3637
// akeylessMetadata contains the metadata for the Akeyless secret store.
3738
type akeylessMetadata struct {
3839
GatewayURL string `json:"gatewayUrl" mapstructure:"gatewayUrl"`
40+
GatewayTLSCA string `json:"gatewayTLSCA" mapstructure:"gatewayTLSCA"`
3941
JWT string `json:"jwt" mapstructure:"jwt"`
4042
AccessID string `json:"accessId" mapstructure:"accessId"`
4143
AccessKey string `json:"accessKey" mapstructure:"accessKey"`
@@ -120,6 +122,22 @@ func (a *akeylessSecretStore) authenticate(ctx context.Context, metadata *akeyle
120122
config.UserAgent = USER_AGENT
121123
config.AddDefaultHeader(CLIENT_SOURCE, USER_AGENT)
122124

125+
// Configure TLS if gatewayTLSCA is provided
126+
if metadata.GatewayTLSCA != "" {
127+
a.logger.Debug("configuring TLS for Akeyless client...")
128+
tlsConfig, err := createTLSConfig(metadata.GatewayTLSCA)
129+
if err != nil {
130+
return errors.New("failed to create TLS configuration: " + err.Error())
131+
}
132+
133+
httpClient := &http.Client{
134+
Transport: &http.Transport{
135+
TLSClientConfig: tlsConfig,
136+
},
137+
}
138+
config.HTTPClient = httpClient
139+
}
140+
123141
a.v2 = akeyless.NewAPIClient(config).V2Api
124142

125143
a.logger.Debug("authenticating with Akeyless...")

secretstores/akeyless/metadata.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ metadata:
1616
default: "https://api.akeyless.io"
1717
example: "https://your.akeyless.gw"
1818
type: string
19+
- name: gatewayTLSCA
20+
required: false
21+
description: |
22+
base64-encoded PEM certificate of the Akeyless Gateway. Use this when connecting to a gateway
23+
with a self-signed or custom CA certificate.
24+
example: "LS0tLS1CRUdJTi..."
25+
type: string
26+
sensitive: true
1927
- name: accessId
2028
required: true
2129
description: |

secretstores/akeyless/utils.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package akeyless
22

33
import (
4+
"crypto/tls"
5+
"crypto/x509"
6+
"encoding/base64"
47
"encoding/json"
8+
"encoding/pem"
59
"errors"
610
"fmt"
711
"os"
@@ -264,3 +268,29 @@ func parseSecretTypes(secretTypes string) ([]string, error) {
264268

265269
return unique, nil
266270
}
271+
272+
func createTLSConfig(gatewayTLSCA string) (*tls.Config, error) {
273+
274+
// Decode base64 to PEM
275+
certBytes, err := base64.StdEncoding.DecodeString(gatewayTLSCA)
276+
if err != nil {
277+
return nil, fmt.Errorf("failed to decode base64-encoded gateway TLS CA: %w", err)
278+
}
279+
280+
// Validate PEM format
281+
block, _ := pem.Decode(certBytes)
282+
if block == nil {
283+
return nil, fmt.Errorf("failed to decode PEM certificate: invalid PEM format")
284+
}
285+
286+
// Cereate cert pool and add certificate
287+
caCertPool := x509.NewCertPool()
288+
if !caCertPool.AppendCertsFromPEM(certBytes) {
289+
return nil, errors.New("failed to add certificate to cert pool")
290+
}
291+
292+
return &tls.Config{
293+
MinVersion: tls.VersionTLS12,
294+
RootCAs: caCertPool,
295+
}, nil
296+
}

0 commit comments

Comments
 (0)