将 AWS Secrets and Configuration Provider CSI 与服务账户的 IAM 角色(IRSA)结合使用
先决条件
-
Amazon EKS 集群(版本 1.17 或更高版本)
-
通过
kubectl访问 AWS CLI 和 Amazon EKS 集群
设置访问控制
ASCP 会检索 Amazon EKS 容器组身份并将其交换为 IAM 角色。您可以在 IAM 策略中为该 IAM 角色设置权限。当 ASCP 代入 IAM 角色时,它可以访问您授权的密钥。除非将其与 IAM 角色关联,否则其他容器无法访问密钥。
授予 Amazon EKS 容器组(pod)对 Secrets Manager 中密钥的访问权限
-
创建一个权限策略,授予对容器组(pod)需要访问的密钥的
secretsmanager:GetSecretValue和secretsmanager:DescribeSecret权限。有关策略示例,请参阅 示例:读取和描述个人密钥的权限。 -
为集群创建 IAM OpenID Connect (OIDC) 提供商(如果还没有)。有关更多信息,请参阅《Amazon EKS 用户指南》中的为集群创建 IAM OIDC 提供商。
-
为服务账户创建一个 IAM 角色并将策略附加到该角色。有关更多信息,请参阅《Amazon EKS 用户指南》中的为服务账户创建 IAM 角色。
-
如果使用私有 Amazon EKS 集群,请确保该集群所在的 VPC 具有 AWS STS 端点。有关创建端点的信息,请参阅《AWS Identity and Access Management 用户指南》中的接口 VPC 端点。
确定要挂载的密钥
要确定 ASCP 将哪些密钥作为文件系统上的文件挂载在 Amazon EKS 中,您需要创建一个 SecretProviderClass YAML 文件。SecretProviderClass 列出了要挂载的密钥以及要挂载这些密钥的文件名。SecretProviderClass 必须与该文件引用的 Amazon EKS 容器组(pod)位于同一命名空间。
将密钥作为文件进行挂载
以下说明展示了如何使用示例 YAML 文件 ExampleSecretProviderClass.yaml
在 Amazon EKS 中挂载密钥
-
将
SecretProviderClass应用于容器组(pod):kubectl apply -f ExampleSecretProviderClass.yaml -
部署容器组(pod):
kubectl apply -f ExampleDeployment.yaml -
ASCP 会挂载文件。
故障排除
您可以通过描述容器组(pod)部署来查看大多数错误。
查看容器的错误消息
-
使用以下命令获取容器组(pod)名称列表。如果您没有使用默认命名空间,请使用
-n。nameSpacekubectl get pods -
要描述容器组(pod),请在以下命令中为
podId使用在上一步中找到的容器组(pod)的容器组(pod)ID。如果没有使用默认命名空间,请使用-n。nameSpacekubectl describe pod/podId
查看 ASCP 的错误
-
要在提供者日志中查找更多信息,请在以下命令中为
podId使用 csi-secrets-store-provider-aws 容器组(pod)的 ID。kubectl -n kube-system get pods kubectl -n kube-system logs Pod/podId
-
验证是否已安装
SecretProviderClassCRD:kubectl get crd secretproviderclasses.secrets-store.csi.x-k8s.io该命令应返回有关
SecretProviderClass自定义资源定义的信息。
-
验证是否已创建 SecretProviderClass 对象。
kubectl get secretproviderclassSecretProviderClassName-o yaml