2.4. 配置 SSCSI 驱动程序以从 AWS Secret Manager 挂载 secret
要安全地存储和管理您的 secret,请使用 GitOps 工作流,并将 Secret Store Container Storage Interface (SSCSI) Driver Operator 将 secret 从 AWS Secret Manager 挂载到 OpenShift Container Platform 中的 CSI 卷。例如,请考虑您要将 secret 挂载到 dev 命名空间下的部署 pod 中,该 pod 位于 /environments/dev/ 目录下。
先决条件
- 您有 AWS Secrets Manager 资源存储在 GitOps 存储库中。
流程
运行以下命令,授予
csi-secrets-store-provider-aws服务帐户的特权访问权限:oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-aws -n openshift-cluster-csi-drivers
$ oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-aws -n openshift-cluster-csi-driversCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
clusterrole.rbac.authorization.k8s.io/system:openshift:scc:privileged added: "csi-secrets-store-provider-aws"
clusterrole.rbac.authorization.k8s.io/system:openshift:scc:privileged added: "csi-secrets-store-provider-aws"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 授予服务帐户读取 AWS secret 对象的权限:
在 GitOps 仓库的命名空间范围的目录下创建一个
credentialsrequest-dir-aws文件夹,因为凭据请求是命名空间范围的。例如,运行以下命令,在dev命名空间下创建一个credentialsrequest-dir-aws文件夹,它位于/environments/dev/目录中:mkdir credentialsrequest-dir-aws
$ mkdir credentialsrequest-dir-awsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
/environments/dev/credentialsrequest-dir-aws/路径中的凭证请求创建 YAML 文件,将 secret 挂载到dev命名空间中的部署 pod:credentialsrequest.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示要查找集群区域,请运行以下命令:
oc get infrastructure cluster -o jsonpath='{.status.platformStatus.aws.region}'$ oc get infrastructure cluster -o jsonpath='{.status.platformStatus.aws.region}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
us-west-2
us-west-2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来检索 OIDC 供应商:
oc get --raw=/.well-known/openid-configuration | jq -r '.issuer'
$ oc get --raw=/.well-known/openid-configuration | jq -r '.issuer'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
https://<oidc_provider_name>
https://<oidc_provider_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从输出中复制 OIDC 供应商名称
<oidc_provider_name>,在下一步中使用。运行以下命令,使用
ccoctl工具处理凭证请求:ccoctl aws create-iam-roles \ --name my-role --region=<aws_region> \ --credentials-requests-dir=credentialsrequest-dir-aws \ --identity-provider-arn arn:aws:iam::<aws_account>:oidc-provider/<oidc_provider_name> --output-dir=credrequests-ccoctl-output$ ccoctl aws create-iam-roles \ --name my-role --region=<aws_region> \ --credentials-requests-dir=credentialsrequest-dir-aws \ --identity-provider-arn arn:aws:iam::<aws_account>:oidc-provider/<oidc_provider_name> --output-dir=credrequests-ccoctl-outputCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
2023/05/15 18:10:34 Role arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds created 2023/05/15 18:10:34 Saved credentials configuration to: credrequests-ccoctl-output/manifests/my-namespace-aws-creds-credentials.yaml 2023/05/15 18:10:35 Updated Role policy for Role my-role-my-namespace-aws-creds
2023/05/15 18:10:34 Role arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds created 2023/05/15 18:10:34 Saved credentials configuration to: credrequests-ccoctl-output/manifests/my-namespace-aws-creds-credentials.yaml 2023/05/15 18:10:35 Updated Role policy for Role my-role-my-namespace-aws-credsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从输出中复制
<aws_role_arn>以在下一步中使用。例如,arn:aws:iam::<aws_account_id>:role/my-role-my-namespace-aws-creds。检查 AWS 上的角色策略,以确认角色策略中
"Resource"的<aws_region> 与集群区域匹配:角色策略示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用角色 ARN 绑定服务帐户:
oc annotate -n <namespace> sa/<app_service_account> eks.amazonaws.com/role-arn="<aws_role_arn>"
$ oc annotate -n <namespace> sa/<app_service_account> eks.amazonaws.com/role-arn="<aws_role_arn>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc annotate -n dev sa/default eks.amazonaws.com/role-arn="<aws_role_arn>"
$ oc annotate -n dev sa/default eks.amazonaws.com/role-arn="<aws_role_arn>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
serviceaccount/default annotated
serviceaccount/default annotatedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建命名空间范围的
SecretProviderClass资源来定义您的 secret 存储供应商。例如,您可以在 GitOps 存储库的/environments/dev/apps/app-taxi/services/taxi/base/config目录中创建SecretProviderClass资源。在目标部署位于 GitOps 存储库中的同一目录中创建一个
secret-provider-class-aws.yaml文件:secret-provider-class-aws.yaml示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在将此 YAML 文件推送到 GitOps 存储库后,验证命名空间范围的
SecretProviderClass资源是否在 Argo CD UI 中的目标应用程序页面中填充。注意如果应用程序的 Sync Policy 没有设置为
Auto,您可以通过点 Argo CD UI 中的 Sync 来手动同步SecretProviderClass资源。