2.4. AWS Secrets Manager からシークレットをマウントする SSCSI ドライバーの設定
シークレットを安全に保存および管理するには、GitOps ワークフローを使用し、シークレットを AWS Secrets Manager から OpenShift Container Platform の CSI ボリュームにマウントするように Secrets Store Container Storage Interface (SSCSI) Driver Operator を設定します。たとえば、/environments/dev/
ディレクトリーにある dev
namespace のデプロイメント Pod にシークレットをマウントする場合などです。
前提条件
- 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-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 シークレットオブジェクトの読み取りを許可するアクセス許可を付与します。
認証情報要求は namespace スコープであるため、GitOps リポジトリーの namespace スコープディレクトリーに
credentialsrequest-dir-aws
フォルダーを作成します。たとえば、次のコマンドを実行して、/environments/dev/
ディレクトリーにあるdev
namespace にcredentialsrequest-dir-aws
フォルダーを作成します。mkdir credentialsrequest-dir-aws
$ mkdir credentialsrequest-dir-aws
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /environments/dev/credentialsrequest-dir-aws/
パスに認証情報リクエスト用の次の設定を含む YAML ファイルを作成し、dev
namespace のデプロイメント 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
namespace スコープの
SecretProviderClass
リソースを作成し、シークレットストアプロバイダーを定義します。たとえば、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 リポジトリーにプッシュした後、namespace スコープの
SecretProviderClass
リソースが Argo CD UI のターゲットアプリケーションページに設定されていることを確認します。注記アプリケーションの Sync Policy が
Auto
に設定されていない場合は、Argo CD UI で Sync をクリックして、SecretProviderClass
リソースを手動で同期できます。