external-secretsのECRAuthorizationTokenで別NamespaceのAWS認証トークンのSecretを参照できない件
Issueをあげた
ソースを読んで原因がわかった。
まずECRAuthorizationToken
はawsauth.NewGeneratorSession()
でAWSの認証情報を取得している。
このawsauth.NewGeneratorSession
の中でcredsFromSecretRef()
を実行している。
この時、第二引数が空文字""
になっているのがポイント。
この第二引数はstoreKind
というもので、これは単にresolvers.SecretKeyRef()
に渡されている。
このresolvers.SecretKeyRef()
の中で、「storeKind
がesv1beta1.ClusterSecretStoreKind
の場合のみSecretRef内のNamespaceを使用し、そうでなければExternalSecretのNamespaceを使用するように」という実装になっていた。
resolvers.SecretKeyRef()
はawsauth.NewGeneratorSession()
だけでなく、もう一箇所awsauth.New()
でも呼び出されている。
これはresolvers.SecretKeyRef()
が元々Generatorのためではなく、ClusterSecretStoreのための実装であることが伺える。
apiVersion: external-secrets.io/v1beta1
kind: ClusterSecretStore
metadata:
name: aws-secretsmanager-store
spec:
provider:
aws:
service: SecretsManager
region: ap-northeast-1
auth:
secretRef:
accessKeyIDSecretRef:
name: secrets-aws-iam-cred
namespace: kube-system
key: AWS_ACCESS_KEY_ID
secretAccessKeySecretRef:
name: secrets-aws-iam-cred
namespace: kube-system
key: AWS_SECRET_ACCESS_KEY
ClusterSecretStoreだったらどこかのNamespaceにおいた認証Secretが参照できるよというものだ。
GeneratorはNamespacedなリソースなので、別Namespaceは見に行かないよという算段だと思う。
でもそれなら、generatorRef
にnamespaceオプションを付与して、ClusterExternalSecret
で作成されたExternalSecretの場合に参照できるようにしてほしい。
リクエストあげた!