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-drivers
Copy 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-aws
Copy 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-2
Copy 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-output
Copy 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-creds
Copy 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 annotated
Copy 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
资源。