Skip to content

Commit d775ed3

Browse files
authored
Merge pull request #1426 from fluxcd/rfc-0010
[RFC-0010] Introduce object-level workload identity for KMS decryption
2 parents d157045 + ac963f9 commit d775ed3

File tree

18 files changed

+449
-238
lines changed

18 files changed

+449
-238
lines changed

api/v1/kustomization_types.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,18 @@ type Decryption struct {
205205
// +required
206206
Provider string `json:"provider"`
207207

208+
// ServiceAccountName is the name of the service account used to
209+
// authenticate with KMS services from cloud providers. If a
210+
// static credential for a given cloud provider is defined
211+
// inside the Secret referenced by SecretRef, that static
212+
// credential takes priority.
213+
// +optional
214+
ServiceAccountName string `json:"serviceAccountName,omitempty"`
215+
208216
// The secret name containing the private OpenPGP keys used for decryption.
217+
// A static credential for a cloud provider defined inside the Secret
218+
// takes priority to secret-less authentication with the ServiceAccountName
219+
// field.
209220
// +optional
210221
SecretRef *meta.LocalObjectReference `json:"secretRef,omitempty"`
211222
}

config/crd/bases/kustomize.toolkit.fluxcd.io_kustomizations.yaml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,26 @@ spec:
8686
- sops
8787
type: string
8888
secretRef:
89-
description: The secret name containing the private OpenPGP keys
90-
used for decryption.
89+
description: |-
90+
The secret name containing the private OpenPGP keys used for decryption.
91+
A static credential for a cloud provider defined inside the Secret
92+
takes priority to secret-less authentication with the ServiceAccountName
93+
field.
9194
properties:
9295
name:
9396
description: Name of the referent.
9497
type: string
9598
required:
9699
- name
97100
type: object
101+
serviceAccountName:
102+
description: |-
103+
ServiceAccountName is the name of the service account used to
104+
authenticate with KMS services from cloud providers. If a
105+
static credential for a given cloud provider is defined
106+
inside the Secret referenced by SecretRef, that static
107+
credential takes priority.
108+
type: string
98109
required:
99110
- provider
100111
type: object

config/rbac/role.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ rules:
2121
verbs:
2222
- create
2323
- patch
24+
- apiGroups:
25+
- ""
26+
resources:
27+
- serviceaccounts/token
28+
verbs:
29+
- create
2430
- apiGroups:
2531
- kustomize.toolkit.fluxcd.io
2632
resources:

docs/api/v1/kustomize.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,22 @@ string
574574
</tr>
575575
<tr>
576576
<td>
577+
<code>serviceAccountName</code><br>
578+
<em>
579+
string
580+
</em>
581+
</td>
582+
<td>
583+
<em>(Optional)</em>
584+
<p>ServiceAccountName is the name of the service account used to
585+
authenticate with KMS services from cloud providers. If a
586+
static credential for a given cloud provider is defined
587+
inside the Secret referenced by SecretRef, that static
588+
credential takes priority.</p>
589+
</td>
590+
</tr>
591+
<tr>
592+
<td>
577593
<code>secretRef</code><br>
578594
<em>
579595
<a href="https://godoc.org/github.com/fluxcd/pkg/apis/meta#LocalObjectReference">
@@ -583,7 +599,10 @@ github.com/fluxcd/pkg/apis/meta.LocalObjectReference
583599
</td>
584600
<td>
585601
<em>(Optional)</em>
586-
<p>The secret name containing the private OpenPGP keys used for decryption.</p>
602+
<p>The secret name containing the private OpenPGP keys used for decryption.
603+
A static credential for a cloud provider defined inside the Secret
604+
takes priority to secret-less authentication with the ServiceAccountName
605+
field.</p>
587606
</td>
588607
</tr>
589608
</tbody>

docs/spec/v1/kustomizations.md

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -823,33 +823,46 @@ For more information, see [remote clusters/Cluster-API](#remote-clusterscluster-
823823

824824
### Decryption
825825

826-
`.spec.decryption` is an optional field to specify the configuration to decrypt
827-
Secrets, ConfigMaps and patches that are a part of the Kustomization.
826+
Storing Secrets in Git repositories in plain text or base64 is unsafe,
827+
regardless of the visibility or access restrictions of the repository.
828828

829-
Since Secrets are either plain text or `base64` encoded, it's unsafe to store
830-
them in plain text in a public or private Git repository. In order to store
831-
them safely, you can use [Mozilla SOPS](https://github.com/mozilla/sops) and
832-
encrypt your Kubernetes Secret data with [age](https://age-encryption.org/v1/)
833-
and/or [OpenPGP](https://www.openpgp.org) keys, or with provider implementations
834-
like Azure Key Vault, GCP KMS or Hashicorp Vault.
829+
In order to store Secrets safely in Git repositorioes you can use an
830+
encryption provider and the optional field `.spec.decryption` to
831+
configure decryption for Secrets that are a part of the Kustomization.
835832

836-
Also, you may want to encrypt some parts of resources as well. In order to do that,
837-
you may encrypt patches as well.
833+
The only supported encryption provider is [SOPS](https://getsops.io/).
834+
With SOPS you can encrypt your secrets with [age](https://github.com/FiloSottile/age)
835+
or [OpenPGP](https://www.openpgp.org) keys, or with keys from Key Management Services
836+
(KMS), like AWS KMS, Azure Key Vault, GCP KMS or Hashicorp Vault.
838837

839838
**Note:** You must leave `metadata`, `kind` or `apiVersion` in plain text.
840-
An easy way to do this is to limit encrypted keys by appending `--encrypted-regex '^(data|stringData)$'`
841-
to your `sops --encrypt` command.
839+
An easy way to do this is limiting the encrypted keys with the flag
840+
`--encrypted-regex '^(data|stringData)$'` in your `sops encrypt` command.
842841

843-
It has two fields:
842+
The `.spec.decryption` field has the following subfields:
844843

845844
- `.provider`: The secrets decryption provider to be used. This field is required and
846845
the only supported value is `sops`.
847-
- `.secretRef.name`: The name of the secret that contains the keys to be used for
848-
decryption. This field can be omitted when using the
849-
[global decryption](#controller-global-decryption) option.
846+
- `.secretRef.name`: The name of the secret that contains the keys or cloud provider
847+
static credentials for KMS services to be used for decryption.
848+
- `.serviceAccountName`: The name of the service account used for
849+
secret-less authentication with KMS services from cloud providers.
850+
See the [workload identity](/flux/installation/configuration/workload-identity/) docs
851+
for how to configure a cloud provider identity for this service account.
852+
853+
If a static credential for a given cloud provider is defined inside the secret
854+
referenced by `.secretRef`, that static credential takes priority over secret-less
855+
authentication for that provider. If no static credentials are defined for a given
856+
cloud provider inside the secret, secret-less authentication is attempted for that
857+
provider.
858+
859+
If `.serviceAccountName` is specified for secret-less authentication,
860+
it takes priority over [controller global decryption](#controller-global-decryption)
861+
for all cloud providers.
862+
863+
Example:
850864

851865
```yaml
852-
---
853866
apiVersion: kustomize.toolkit.fluxcd.io/v1
854867
kind: Kustomization
855868
metadata:
@@ -863,13 +876,11 @@ spec:
863876
name: repository-with-secrets
864877
decryption:
865878
provider: sops
879+
serviceAccountName: sops-identity
866880
secretRef:
867-
name: sops-keys
881+
name: sops-keys-and-credentials
868882
```
869883

870-
**Note:** For information on Secrets decryption at a controller level, please
871-
refer to [controller global decryption](#controller-global-decryption).
872-
873884
The Secret's `.data` section is expected to contain entries with decryption
874885
keys (for age and OpenPGP), or credentials (for any of the supported provider
875886
implementations). The controller identifies the type of the entry by the suffix
@@ -880,7 +891,7 @@ of the key (e.g. `.agekey`), or a fixed key (e.g. `sops.vault-token`).
880891
apiVersion: v1
881892
kind: Secret
882893
metadata:
883-
name: sops-keys
894+
name: sops-keys-and-credentials
884895
namespace: default
885896
data:
886897
# Exemplary age private key
@@ -937,9 +948,9 @@ metadata:
937948
namespace: default
938949
data:
939950
sops.aws-kms: |
940-
aws_access_key_id: some-access-key-id
941-
aws_secret_access_key: some-aws-secret-access-key
942-
aws_session_token: some-aws-session-token # this field is optional
951+
aws_access_key_id: some-access-key-id
952+
aws_secret_access_key: some-aws-secret-access-key
953+
aws_session_token: some-aws-session-token # this field is optional
943954
```
944955

945956
#### Azure Key Vault Secret entry
@@ -1408,6 +1419,8 @@ it is possible to specify global decryption settings on the
14081419
kustomize-controller Pod. When the controller fails to find credentials on the
14091420
Kustomization object itself, it will fall back to these defaults.
14101421

1422+
See also the [workload identity](/flux/installation/configuration/workload-identity/) docs.
1423+
14111424
#### AWS KMS
14121425

14131426
While making use of the [IAM OIDC provider](https://eksctl.io/usage/iamserviceaccounts/)

go.mod

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ replace github.com/fluxcd/kustomize-controller/api => ./api
99
replace github.com/opencontainers/go-digest => github.com/opencontainers/go-digest v1.0.1-0.20220411205349-bde1400a84be
1010

1111
require (
12+
cloud.google.com/go/kms v1.21.2
1213
filippo.io/age v1.2.1
1314
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6
1415
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0
1516
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0
17+
github.com/aws/aws-sdk-go-v2 v1.36.3
1618
github.com/aws/aws-sdk-go-v2/credentials v1.17.67
1719
github.com/cyphar/filepath-securejoin v0.4.1
1820
github.com/dimchansky/utfbom v1.1.1
@@ -22,6 +24,8 @@ require (
2224
github.com/fluxcd/pkg/apis/event v0.17.0
2325
github.com/fluxcd/pkg/apis/kustomize v1.10.0
2426
github.com/fluxcd/pkg/apis/meta v1.11.0
27+
github.com/fluxcd/pkg/auth v0.12.0
28+
github.com/fluxcd/pkg/cache v0.9.0
2529
github.com/fluxcd/pkg/http/fetch v0.16.0
2630
github.com/fluxcd/pkg/kustomize v1.17.0
2731
github.com/fluxcd/pkg/runtime v0.59.0
@@ -36,6 +40,7 @@ require (
3640
github.com/ory/dockertest/v3 v3.12.0
3741
github.com/spf13/pflag v1.0.6
3842
golang.org/x/net v0.39.0
43+
golang.org/x/oauth2 v0.29.0
3944
k8s.io/api v0.33.0
4045
k8s.io/apimachinery v0.33.0
4146
k8s.io/client-go v0.33.0
@@ -61,7 +66,6 @@ require (
6166
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
6267
cloud.google.com/go/compute/metadata v0.6.0 // indirect
6368
cloud.google.com/go/iam v1.5.2 // indirect
64-
cloud.google.com/go/kms v1.21.2 // indirect
6569
cloud.google.com/go/longrunning v0.6.7 // indirect
6670
cloud.google.com/go/monitoring v1.24.2 // indirect
6771
cloud.google.com/go/storage v1.51.0 // indirect
@@ -80,7 +84,6 @@ require (
8084
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect
8185
github.com/ProtonMail/go-crypto v1.2.0 // indirect
8286
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
83-
github.com/aws/aws-sdk-go-v2 v1.36.3 // indirect
8487
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect
8588
github.com/aws/aws-sdk-go-v2/config v1.29.14 // indirect
8689
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect
@@ -89,6 +92,7 @@ require (
8992
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect
9093
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
9194
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect
95+
github.com/aws/aws-sdk-go-v2/service/ecr v1.43.3 // indirect
9296
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect
9397
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0 // indirect
9498
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect
@@ -112,6 +116,7 @@ require (
112116
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
113117
github.com/docker/cli v28.1.1+incompatible // indirect
114118
github.com/docker/docker v28.1.1+incompatible // indirect
119+
github.com/docker/docker-credential-helpers v0.8.2 // indirect
115120
github.com/docker/go-connections v0.5.0 // indirect
116121
github.com/docker/go-units v0.5.0 // indirect
117122
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
@@ -144,6 +149,7 @@ require (
144149
github.com/google/cel-go v0.23.2 // indirect
145150
github.com/google/gnostic-models v0.6.9 // indirect
146151
github.com/google/go-cmp v0.7.0 // indirect
152+
github.com/google/go-containerregistry v0.20.3 // indirect
147153
github.com/google/s2a-go v0.1.9 // indirect
148154
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
149155
github.com/google/uuid v1.6.0 // indirect
@@ -222,7 +228,6 @@ require (
222228
go.uber.org/zap v1.27.0 // indirect
223229
golang.org/x/crypto v0.37.0 // indirect
224230
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
225-
golang.org/x/oauth2 v0.29.0 // indirect
226231
golang.org/x/sync v0.13.0 // indirect
227232
golang.org/x/sys v0.32.0 // indirect
228233
golang.org/x/term v0.31.0 // indirect

go.sum

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d
9191
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo=
9292
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM=
9393
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs=
94+
github.com/aws/aws-sdk-go-v2/service/ecr v1.43.3 h1:YyH8Hk73bYzdbvf6S8NF5z/fb/1stpiMnFSfL6jSfRA=
95+
github.com/aws/aws-sdk-go-v2/service/ecr v1.43.3/go.mod h1:iQ1skgw1XRK+6Lgkb0I9ODatAP72WoTILh0zXQ5DtbU=
9496
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE=
9597
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA=
9698
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0 h1:lguz0bmOoGzozP9XfRJR1QIayEYo+2vP/No3OfLF0pU=
@@ -129,6 +131,8 @@ github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f h1:C5bqEmzEPLsHm9Mv73l
129131
github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
130132
github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4=
131133
github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE=
134+
github.com/coreos/go-oidc/v3 v3.14.1 h1:9ePWwfdwC4QKRlCXsJGou56adA/owXczOzwKdOumLqk=
135+
github.com/coreos/go-oidc/v3 v3.14.1/go.mod h1:HaZ3szPaZ0e4r6ebqvsLWlk2Tn+aejfmrfah6hnSYEU=
132136
github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
133137
github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0=
134138
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
@@ -148,6 +152,8 @@ github.com/docker/cli v28.1.1+incompatible h1:eyUemzeI45DY7eDPuwUcmDyDj1pM98oD5M
148152
github.com/docker/cli v28.1.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
149153
github.com/docker/docker v28.1.1+incompatible h1:49M11BFLsVO1gxY9UX9p/zwkE/rswggs8AdFmXQw51I=
150154
github.com/docker/docker v28.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
155+
github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo=
156+
github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
151157
github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
152158
github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
153159
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
@@ -182,6 +188,10 @@ github.com/fluxcd/pkg/apis/kustomize v1.10.0 h1:47EeSzkQvlQZdH92vHMe2lK2iR8aOSEJ
182188
github.com/fluxcd/pkg/apis/kustomize v1.10.0/go.mod h1:UsqMV4sqNa1Yg0pmTsdkHRJr7bafBOENIJoAN+3ezaQ=
183189
github.com/fluxcd/pkg/apis/meta v1.11.0 h1:h8q95k6ZEK1HCfsLkt8Np3i6ktb6ZzcWJ6hg++oc9w0=
184190
github.com/fluxcd/pkg/apis/meta v1.11.0/go.mod h1:+son1Va60x2eiDcTwd7lcctbI6C+K3gM7R+ULmEq1SI=
191+
github.com/fluxcd/pkg/auth v0.12.0 h1:35o0ziYMLZVgJwNvJBGsv/wd903B2fMagcrnm1ptUjc=
192+
github.com/fluxcd/pkg/auth v0.12.0/go.mod h1:gQD2VT5OhIR1E8ZTEsTaho3bDQZidr9P10smH/awcew=
193+
github.com/fluxcd/pkg/cache v0.9.0 h1:EGKfOLMG3fOwWnH/4Axl5xd425mxoQbZzlZoLfd8PDk=
194+
github.com/fluxcd/pkg/cache v0.9.0/go.mod h1:jMwabjWfsC5lW8hE7NM3wtGNwSJ38Javx6EKbEi7INU=
185195
github.com/fluxcd/pkg/envsubst v1.4.0 h1:pYsb6wrmXOSfHXuXQHaaBBMt3LumhgCb8SMdBNAwV/U=
186196
github.com/fluxcd/pkg/envsubst v1.4.0/go.mod h1:zSDFO3Wawi+vI2NPxsMQp+EkIsz/85MNg/s1Wzmqt+s=
187197
github.com/fluxcd/pkg/http/fetch v0.16.0 h1:XzhBTSK5HNdAPEnEGMJHwtoN2LfqQ9QFDsu3DGzl908=
@@ -254,6 +264,8 @@ github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcb
254264
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
255265
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
256266
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
267+
github.com/google/go-containerregistry v0.20.3 h1:oNx7IdTI936V8CQRveCjaxOiegWwvM7kqkbXTpyiovI=
268+
github.com/google/go-containerregistry v0.20.3/go.mod h1:w00pIgBRDVUDFM6bq+Qx8lwNWK+cxgCuX1vd3PIBDNI=
257269
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
258270
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
259271
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=

internal/cache/operations.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
Copyright 2025 The Flux authors
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package intcache
18+
19+
const (
20+
OperationDecryptWithAWS = "decrypt_with_aws"
21+
OperationDecryptWithAzure = "decrypt_with_azure"
22+
OperationDecryptWithGCP = "decrypt_with_gcp"
23+
)
24+
25+
var AllOperations = []string{
26+
OperationDecryptWithAWS,
27+
OperationDecryptWithAzure,
28+
OperationDecryptWithGCP,
29+
}

0 commit comments

Comments
 (0)