外部机密无法从私有集群访问 AWS STS

Posted

技术标签:

【中文标题】外部机密无法从私有集群访问 AWS STS【英文标题】:External-secrets not able to access the AWS STS from a private cluster 【发布时间】:2021-12-29 21:12:18 【问题描述】:

从最近几天开始,我一直在想办法从我的私有 EKS 集群中使用 FARGATE 读取来自 AWS 秘密管理器的秘密。

为此,我尝试使用开源工具 https://github.com/external-secrets/external-secrets 但我无法让它与私有集群一起工作。

当我连接到互联网时,我可以通过运行上述链接的源代码来读取本地密码。但是当我将 pod 部署到 AWS 私有集群时,它总是会出现超时错误,如下面的代码 sn-ps 所示。

vel":"error","ts":1637220916.9525745,"logger":"controllers.ExternalSecret","msg":"could not reconcile ExternalSecret. Please check!!!","ExternalSecret":"commons/example","SecretStore":"commons/secretstore-sample","error":"could not get secret data from provider: key \"myTestSecret/random\" from ExternalSecret \"example\": WebIdentityErr: failed to retrieve credentials\ncaused by: RequestError: send request failed\ncaused by: Post \"https://sts.amazonaws.com/\": dial tcp 209.54.180.124:443: i/o timeout","stacktrace":"sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/home/cloudberry/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.9.3/pkg/internal/controller/controller.go:298\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/home/cloudberry/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.9.3/pkg/internal/controller/controller.go:253\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/home/cloudberry/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.9.3/pkg/internal/controller/controller.go:214"

我一直在努力让它工作,我还尝试通过更改代码中的 URL 来更改源代码,因为我发现它在一个地方进行了硬编码,但错误仍然没有消失。

任何关于如何使外部机密在私有集群中工作的提示都会非常有帮助。

提前致谢。

【问题讨论】:

您是否已经创建了具有访问外部机密的机密管理器策略的角色?您是否按照步骤为 external-secrets pod 提供了该角色? docs.aws.amazon.com/eks/latest/userguide/… 我已尝试创建服务帐户,但只有在这种方法中我才收到此错误。还尝试了 env 变量方法,但仍然没有运气。 【参考方案1】:

经过这么多天后,我终于设法通过在 Java 中创建自定义代码来解决问题。

我做了什么?

    在 AWS 中创建了可以访问 Secret Manager 的 IAM 配置文件和角色。

    在 K8 中创建了一个服务帐户,我的 Pod 可以使用该服务帐户访问 secret-manager。服务帐户可以保存 IAM 角色详细信息(在第 1 步中创建)。

    使用 AWS 开发工具包和示例代码从密钥管理器获取密钥。

    使用以下 gradle 依赖项创建 K8 机密:

    实现'io.fabric8:kubernetes-client:5.10.1'

第 3 步的 Git 代码库 Git 参考是:https://github.com/fabric8io/kubernetes-client/blob/master/doc/CHEATSHEET.md

【讨论】:

以上是关于外部机密无法从私有集群访问 AWS STS的主要内容,如果未能解决你的问题,请参考以下文章

无法公开 AWS Aurora Postgres RDS

kubernetes 暴露服务端口的几种方式

从其他区域访问私有 GKE 集群?

如何建立从GAE(具有公共访问权限)到私有GKE集群的安全连接。

AWS 上的 Kops 集群超时

为在 VPC 中运行的私有 AWS OpenSearch 集群的仪表板启用 SAML 身份验证