2.4. 配置 SSCSI 驱动程序从 AWS Secrets Manager 挂载 secret
要安全地存储和管理您的 secret,请使用 GitOps 工作流并配置 Secret Store Container Storage Interface (SSCSI) Driver Operator,将 secret 从 AWS Secrets Manager 挂载到 OpenShift Container Platform 中的 CSI 卷。例如,请考虑您要将 secret 挂载到 dev 命名空间下的部署 pod,该命名空间位于 /environments/dev/ 目录中。
先决条件
- 您有存储在 GitOps 存储库中的 AWS Secrets Manager 资源。
流程
运行以下命令,授予
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 上的角色策略,以确认角色策略中的
<aws_region>"Resource"与集群区域匹配:角色策略示例
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资源。在目标部署所在的同一目录中创建一个
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资源。