2.7. 外部シークレットストアを使用した機密データの Pod への提供
アプリケーションによっては、パスワードやユーザー名など開発者に使用させない秘密情報が必要になります。
Kubernetes Secret
オブジェクトを使用して機密情報を提供する代わりに、外部シークレットストアを使用して機密情報を保存できます。Secrets Store CSI Driver Operator を使用して、外部シークレットストアと統合し、シークレットコンテンツを Pod ボリュームとしてマウントできます。
GCP Filestore CSI Driver Operator は、テクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
2.7.1. Secrets Store CSI Driver Operator について リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes シークレットは Base64 エンコーディングで保存されます。etcd は、これらのシークレットの保存時に暗号化しますが、シークレットの取得時に、シークレットが復号化されてユーザーに表示されます。クラスターでロールベースのアクセス制御が適切に設定されていない場合、API または etcd へのアクセス権を持つユーザーは誰でもシークレットを取得または変更できます。さらに、namespace で Pod を作成する権限を持つ人は誰でも、そのアクセス権を使用して、その namespace 内の任意のシークレットを読み取ることができます。
シークレットを安全に保存および管理するには、プロバイダープラグインを使用して、Azure Key Vault などの外部シークレット管理システムからシークレットをマウントするように OpenShift Container Platform Secrets Store Container Storage Interface (CSI) Driver Operator を設定できます。アプリケーションはシークレットを使用できますが、アプリケーション Pod が破棄されるとシークレットはシステム上に保持されません。
Secrets Store CSI Driver Operator (secrets-store.csi.k8s.io
) を使用すると、OpenShift Container Platform で、エンタープライズグレードの外部シークレットストアに保存されている複数のシークレット、キー、証明書をボリュームとして Pod にマウントできます。Secrets Store CSI Driver Operator は、gRPC を使用してプロバイダーと通信し、指定された外部シークレットストアからマウントコンテンツを取得します。ボリュームがアタッチされると、その中のデータがコンテナーのファイルシステムにマウントされます。シークレットストアボリュームはインラインでマウントされます。
2.7.1.1. シークレットストアプロバイダー リンクのコピーリンクがクリップボードにコピーされました!
次のシークレットストアプロバイダーは、Secrets Store CSI Driver Operator で使用できます。
- AWS Secrets Manager
- AWS Systems Manager Parameter Store
- Azure Key Vault
- Google Secret Manager
- HashiCorp Vault
2.7.1.2. 自動ローテーション リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI ドライバーは、外部シークレットストアのコンテンツを使用して、マウントされたボリューム内のコンテンツを定期的にローテーションします。外部シークレットストアでシークレットが更新されると、マウントされたボリュームでもシークレットが更新されます。Secrets Store CSI Driver Operator は、2 分ごとに更新をポーリングします。
Kubernetes シークレットとしてマウントされたコンテンツの同期を有効にした場合は、Kubernetes シークレットもローテーションされます。
シークレットデータを使用するアプリケーションは、シークレットの更新を監視する必要があります。
2.7.2. Secrets Store CSI ドライバーのインストール リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
- 管理者としてクラスターにアクセスできる。
手順
Secrets Store CSI ドライバーをインストールするには、以下を実行します。
Secrets Store CSI Driver Operator をインストールします。
- Web コンソールにログインします。
-
Operators
OperatorHub をクリックします。 - フィルターボックスに "Secrets Store CSI" と入力し、Secrets Store CSI Driver Operator を見つけます。
- Secrets Store CSI Driver Operator ボタンをクリックします。
- Secrets Store CSI Driver Operator ページで、Install をクリックします。
Install Operator のページで、以下のことを確認してください。
- All namespaces on the cluster (default) が選択されている。
- Installed Namespace が openshift-cluster-csi-drivers に設定されている。
Install をクリックします。
インストールが終了すると、Web コンソールの Installed Operators セクションに Secrets Store CSI Driver Operator がリストされます。
ドライバーの
ClusterCSIDriver
インスタンス (secrets-store.csi.k8s.io
) を作成します。-
Administration
CustomResourceDefinitions ClusterCSIDriver をクリックします。 Instances タブで Create ClusterCSIDriver をクリックします。
以下の YAML ファイルを使用します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Create をクリックします。
-
Administration
2.7.3. 外部シークレットストアから CSI ボリュームへのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator をインストールした後、次のいずれかの外部シークレットストアから CSI ボリュームにシークレットをマウントできます。
2.7.3.1. AWS Secrets Manager からのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator を使用して、AWS Secrets Manager から OpenShift Container Platform の Container Storage Interface (CSI) ボリュームにシークレットをマウントできます。AWS Secrets Manager からシークレットをマウントするには、クラスターが AWS にインストールされ、AWS Security Token Service (STS) を使用している必要があります。
前提条件
- クラスターが AWS にインストールされ、AWS Security Token Service (STS) を使用している。
- Secrets Store CSI Driver Operator をインストールした。手順は、Secrets Store CSI ドライバーのインストール を参照してください。
- 必要なシークレットを保存するように AWS Secrets Manager を設定した。
-
ccoctl
バイナリーを展開して準備した。 -
jq
CLI ツールをインストールした。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
AWS Secrets Manager プロバイダーをインストールします。
プロバイダーリソース用に次の設定を使用して YAML ファイルを作成します。
重要Secrets Store CSI ドライバーの AWS Secrets Manager プロバイダーは、アップストリームプロバイダーです。
この設定は、OpenShift Container Platform で適切に動作するように、アップストリームの AWS ドキュメント で提供されている設定から変更されています。この設定を変更すると、機能に影響が出る場合があります。
aws-provider.yaml
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
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 次のコマンドを実行して、プロバイダーリソースを作成します。
oc apply -f aws-provider.yaml
$ oc apply -f aws-provider.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
サービスアカウントに AWS シークレットオブジェクトの読み取りを許可するアクセス許可を付与します。
次のコマンドを実行して、認証情報リクエストを含むディレクトリーを作成します。
mkdir credentialsrequest-dir-aws
$ mkdir credentialsrequest-dir-aws
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 認証情報リクエスト用に次の設定を使用して YAML ファイルを作成します。
credentialsrequest.yaml
ファイルの例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
です次のコマンドを実行して、ロール ARN を持つサービスアカウントをバインドします。
oc annotate -n my-namespace sa/aws-provider eks.amazonaws.com/role-arn="<aws_role_arn>"
$ oc annotate -n my-namespace sa/aws-provider eks.amazonaws.com/role-arn="<aws_role_arn>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットプロバイダークラスを作成して、シークレットストアプロバイダーを定義します。
SecretProviderClass
オブジェクトを定義する YAML ファイルを作成します。secret-provider-class-aws.yaml
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
SecretProviderClass
オブジェクトを作成します。oc create -f secret-provider-class-aws.yaml
$ oc create -f secret-provider-class-aws.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
このシークレットプロバイダークラスを使用するデプロイメントを作成します。
Deployment
オブジェクトを定義する YAML ファイルを作成します。deployment.yaml
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Deployment
オブジェクトを作成します。oc create -f deployment.yaml
$ oc create -f deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod ボリュームマウントの AWS Secrets Manager からシークレットにアクセスできることを確認します。
次のコマンドを実行して、Pod マウント内のシークレットをリスト表示します。
oc exec my-aws-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
$ oc exec my-aws-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
testSecret
testSecret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod マウント内のシークレットを表示します。
oc exec my-aws-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret
$ oc exec my-aws-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
<secret_value>
<secret_value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.7.3.2. AWS Systems Manager Parameter Store からのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator を使用して、AWS Systems Manager Parameter Store から OpenShift Container Platform の Container Storage Interface (CSI) ボリュームにシークレットをマウントできます。AWS Systems Manager Parameter Store からシークレットをマウントするには、クラスターが AWS にインストールされ、AWS Security Token Service (STS) を使用している必要があります。
前提条件
- クラスターが AWS にインストールされ、AWS Security Token Service (STS) を使用している。
- Secrets Store CSI Driver Operator をインストールした。手順は、Secrets Store CSI ドライバーのインストール を参照してください。
- 必要なシークレットを保存するように AWS Systems Manager Parameter Store を設定した。
-
ccoctl
バイナリーを展開して準備した。 -
jq
CLI ツールをインストールした。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
AWS Systems Manager Parameter Store プロバイダーをインストールします。
プロバイダーリソース用に次の設定を使用して YAML ファイルを作成します。
重要Secrets Store CSI ドライバーの AWS Systems Manager Parameter Store プロバイダーは、アップストリームのプロバイダーです。
この設定は、OpenShift Container Platform で適切に動作するように、アップストリームの AWS ドキュメント で提供されている設定から変更されています。この設定を変更すると、機能に影響が出る場合があります。
aws-provider.yaml
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
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 次のコマンドを実行して、プロバイダーリソースを作成します。
oc apply -f aws-provider.yaml
$ oc apply -f aws-provider.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
サービスアカウントに AWS シークレットオブジェクトの読み取りを許可するアクセス許可を付与します。
次のコマンドを実行して、認証情報リクエストを含むディレクトリーを作成します。
mkdir credentialsrequest-dir-aws
$ mkdir credentialsrequest-dir-aws
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 認証情報リクエスト用に次の設定を使用して YAML ファイルを作成します。
credentialsrequest.yaml
ファイルの例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
です次のコマンドを実行して、ロール ARN を持つサービスアカウントをバインドします。
oc annotate -n my-namespace sa/aws-provider eks.amazonaws.com/role-arn="<aws_role_arn>"
$ oc annotate -n my-namespace sa/aws-provider eks.amazonaws.com/role-arn="<aws_role_arn>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットプロバイダークラスを作成して、シークレットストアプロバイダーを定義します。
SecretProviderClass
オブジェクトを定義する YAML ファイルを作成します。secret-provider-class-aws.yaml
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
SecretProviderClass
オブジェクトを作成します。oc create -f secret-provider-class-aws.yaml
$ oc create -f secret-provider-class-aws.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
このシークレットプロバイダークラスを使用するデプロイメントを作成します。
Deployment
オブジェクトを定義する YAML ファイルを作成します。deployment.yaml
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Deployment
オブジェクトを作成します。oc create -f deployment.yaml
$ oc create -f deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod ボリュームマウント内の AWS Systems Manager Parameter Store からのシークレットにアクセスできることを確認します。
次のコマンドを実行して、Pod マウント内のシークレットをリスト表示します。
oc exec my-aws-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
$ oc exec my-aws-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
testParameter
testParameter
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod マウント内のシークレットを表示します。
oc exec my-aws-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret
$ oc exec my-aws-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
<secret_value>
<secret_value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.7.3.3. Azure Key Vault からのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator を使用して、Azure Key Vault から OpenShift Container Platform の Container Storage Interface (CSI) ボリュームにシークレットをマウントできます。Azure Key Vault からシークレットをマウントするには、クラスターが Microsoft Azure にインストールされている必要があります。
前提条件
- クラスターが Azure にインストールされている。
- Secrets Store CSI Driver Operator をインストールした。手順は、Secrets Store CSI ドライバーのインストール を参照してください。
- 必要なシークレットを保存するように Azure Key Vault を設定した。
-
Azure CLI (
az
) をインストールした。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
Azure Key Vault プロバイダーをインストールします。
プロバイダーリソース用に次の設定を使用して YAML ファイルを作成します。
重要Secrets Store CSI ドライバーの Azure Key Vault プロバイダーは、アップストリームプロバイダーです。
この設定は、OpenShift Container Platform で適切に動作するように、アップストリームの Azure ドキュメント で提供されている設定から変更されています。この設定を変更すると、機能に影響が出る場合があります。
azure-provider.yaml
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
csi-secrets-store-provider-azure
サービスアカウントへの特権アクセスを付与します。oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-azure -n openshift-cluster-csi-drivers
$ oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-azure -n openshift-cluster-csi-drivers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、プロバイダーリソースを作成します。
oc apply -f azure-provider.yaml
$ oc apply -f azure-provider.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Key Vault にアクセスするためのサービスプリンシパルを作成します。
次のコマンドを実行して、サービスプリンシパルのクライアントシークレットを環境変数として設定します。
SERVICE_PRINCIPAL_CLIENT_SECRET="$(az ad sp create-for-rbac --name https://$KEYVAULT_NAME --query 'password' -otsv)"
$ SERVICE_PRINCIPAL_CLIENT_SECRET="$(az ad sp create-for-rbac --name https://$KEYVAULT_NAME --query 'password' -otsv)"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サービスプリンシパルのクライアント ID を環境変数として設定します。
SERVICE_PRINCIPAL_CLIENT_ID="$(az ad sp list --display-name https://$KEYVAULT_NAME --query '[0].appId' -otsv)"
$ SERVICE_PRINCIPAL_CLIENT_ID="$(az ad sp list --display-name https://$KEYVAULT_NAME --query '[0].appId' -otsv)"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サービスプリンシパルのクライアントシークレットと ID を使用して汎用シークレットを作成します。
oc create secret generic secrets-store-creds -n my-namespace --from-literal clientid=${SERVICE_PRINCIPAL_CLIENT_ID} --from-literal clientsecret=${SERVICE_PRINCIPAL_CLIENT_SECRET}
$ oc create secret generic secrets-store-creds -n my-namespace --from-literal clientid=${SERVICE_PRINCIPAL_CLIENT_ID} --from-literal clientsecret=${SERVICE_PRINCIPAL_CLIENT_SECRET}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow secrets-store.csi.k8s.io/used=true
ラベルを適用して、プロバイダーがこのnodePublishSecretRef
シークレットを検索できるようにします。oc -n my-namespace label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
$ oc -n my-namespace label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットプロバイダークラスを作成して、シークレットストアプロバイダーを定義します。
SecretProviderClass
オブジェクトを定義する YAML ファイルを作成します。secret-provider-class-azure.yaml
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
SecretProviderClass
オブジェクトを作成します。oc create -f secret-provider-class-azure.yaml
$ oc create -f secret-provider-class-azure.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
このシークレットプロバイダークラスを使用するデプロイメントを作成します。
Deployment
オブジェクトを定義する YAML ファイルを作成します。deployment.yaml
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Deployment
オブジェクトを作成します。oc create -f deployment.yaml
$ oc create -f deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod ボリュームマウント内の Azure Key Vault からシークレットにアクセスできることを確認します。
次のコマンドを実行して、Pod マウント内のシークレットをリスト表示します。
oc exec my-azure-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
$ oc exec my-azure-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
secret1
secret1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod マウント内のシークレットを表示します。
oc exec my-azure-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/secret1
$ oc exec my-azure-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/secret1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
my-secret-value
my-secret-value
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.7.3.4. Google Secret Manager からのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator を使用して、Google Secret Manager から OpenShift Container Platform の Container Storage Interface (CSI) ボリュームにシークレットをマウントできます。Google Secret Manager からシークレットをマウントするには、クラスターが Google Cloud Platform (GCP) にインストールされている必要があります。
前提条件
- Secrets Store CSI Driver Operator をインストールした。手順は、Secrets Store CSI ドライバーのインストール を参照してください。
- 必要なシークレットを保存するように Google Secret Manager を設定した。
-
Google Cloud サービスアカウントから
key.json
という名前のサービスアカウントキーを作成した。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
Google Secret Manager プロバイダーをインストールします。
プロバイダーリソース用に次の設定を使用して YAML ファイルを作成します。
gcp-provider.yaml
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
csi-secrets-store-provider-gcp
サービスアカウントに特権アクセスを付与します。oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-gcp -n openshift-cluster-csi-drivers
$ oc adm policy add-scc-to-user privileged -z csi-secrets-store-provider-gcp -n openshift-cluster-csi-drivers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、プロバイダーリソースを作成します。
oc apply -f gcp-provider.yaml
$ oc apply -f gcp-provider.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Google Secret Manager シークレットの読み取り権限を付与します。
次のコマンドを実行して新しいプロジェクトを作成します。
oc new-project my-namespace
$ oc new-project my-namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod セキュリティーアドミッション用の
my-namespace
namespace にラベルを付けます。oc label ns my-namespace security.openshift.io/scc.podSecurityLabelSync=false pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/audit=privileged pod-security.kubernetes.io/warn=privileged --overwrite
$ oc label ns my-namespace security.openshift.io/scc.podSecurityLabelSync=false pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/audit=privileged pod-security.kubernetes.io/warn=privileged --overwrite
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod のデプロイメント用のサービスアカウントを作成します。
oc create serviceaccount my-service-account --namespace=my-namespace
$ oc create serviceaccount my-service-account --namespace=my-namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
key.json
ファイルから汎用シークレットを作成します。oc create secret generic secrets-store-creds -n my-namespace --from-file=key.json
$ oc create secret generic secrets-store-creds -n my-namespace --from-file=key.json
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この
key.json
ファイルは Google Secret Manager から作成したものです。
secrets-store.csi.k8s.io/used=true
ラベルを適用して、プロバイダーがこのnodePublishSecretRef
シークレットを検索できるようにします。oc -n my-namespace label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
$ oc -n my-namespace label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットプロバイダークラスを作成して、シークレットストアプロバイダーを定義します。
SecretProviderClass
オブジェクトを定義する YAML ファイルを作成します。secret-provider-class-gcp.yaml
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
SecretProviderClass
オブジェクトを作成します。oc create -f secret-provider-class-gcp.yaml
$ oc create -f secret-provider-class-gcp.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
このシークレットプロバイダークラスを使用するデプロイメントを作成します。
Deployment
オブジェクトを定義する YAML ファイルを作成します。deployment.yaml
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Deployment
オブジェクトを作成します。oc create -f deployment.yaml
$ oc create -f deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod ボリュームマウント内の Google Secret Manager からのシークレットにアクセスできることを確認します。
次のコマンドを実行して、Pod マウント内のシークレットをリスト表示します。
oc exec my-gcp-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
$ oc exec my-gcp-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
testsecret1
testsecret1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod マウント内のシークレットを表示します。
oc exec my-gcp-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testsecret1
$ oc exec my-gcp-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testsecret1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
<secret_value>
<secret_value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.7.3.5. HashiCorp Vault からのシークレットのマウント リンクのコピーリンクがクリップボードにコピーされました!
Secrets Store CSI Driver Operator を使用して、HashiCorp Vault から OpenShift Container Platform の Container Storage Interface (CSI) ボリュームにシークレットをマウントできます。
Secrets Store CSI Driver Operator を使用して HashiCorp Vault からシークレットをマウントする機能は、次のクラウドプロバイダーでテストされています。
- Amazon Web Services (AWS)
- Microsoft Azure
他のクラウドプロバイダーも機能する可能性がありますが、まだテストされていません。今後、別のクラウドプロバイダーが追加でテストされる可能性があります。
前提条件
- Secrets Store CSI Driver Operator をインストールした。手順は、Secrets Store CSI ドライバーのインストール を参照してください。
- Helm をインストールした。
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
次のコマンドを実行して、HashiCorp Helm リポジトリーを追加します。
helm repo add hashicorp https://helm.releases.hashicorp.com
$ helm repo add hashicorp https://helm.releases.hashicorp.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、すべてのリポジトリーを更新し、Helm が最新バージョンを認識するようにします。
helm repo update
$ helm repo update
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HashiCorp Vault プロバイダーをインストールします。
次のコマンドを実行して、Vault の新しいプロジェクトを作成します。
oc new-project vault
$ oc new-project vault
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod セキュリティーアドミッション用の
vault
namespace にラベルを付けます。oc label ns vault security.openshift.io/scc.podSecurityLabelSync=false pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/audit=privileged pod-security.kubernetes.io/warn=privileged --overwrite
$ oc label ns vault security.openshift.io/scc.podSecurityLabelSync=false pod-security.kubernetes.io/enforce=privileged pod-security.kubernetes.io/audit=privileged pod-security.kubernetes.io/warn=privileged --overwrite
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Vault
サービスアカウントに特権アクセスを許可します。oc adm policy add-scc-to-user privileged -z vault -n vault
$ oc adm policy add-scc-to-user privileged -z vault -n vault
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
vault-csi-provider
サービスアカウントに特権アクセスを許可します。oc adm policy add-scc-to-user privileged -z vault-csi-provider -n vault
$ oc adm policy add-scc-to-user privileged -z vault-csi-provider -n vault
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して HashiCorp Vault をデプロイします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
vault-csi-driver
デーモンセットにパッチを適用し、securityContext
をprivileged
に設定します。oc patch daemonset -n vault vault-csi-provider --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/securityContext", "value": {"privileged": true} }]'
$ oc patch daemonset -n vault vault-csi-provider --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/securityContext", "value": {"privileged": true} }]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
vault-csi-provider
Pod が正常に起動したことを確認します。oc get pods -n vault
$ oc get pods -n vault
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE vault-0 1/1 Running 0 24m vault-csi-provider-87rgw 1/2 Running 0 5s vault-csi-provider-bd6hp 1/2 Running 0 4s vault-csi-provider-smlv7 1/2 Running 0 5s
NAME READY STATUS RESTARTS AGE vault-0 1/1 Running 0 24m vault-csi-provider-87rgw 1/2 Running 0 5s vault-csi-provider-bd6hp 1/2 Running 0 4s vault-csi-provider-smlv7 1/2 Running 0 5s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
必要なシークレットを保存するように HashiCorp Vault を設定します。
次のコマンドを実行してシークレットを作成します。
oc exec vault-0 --namespace=vault -- vault kv put secret/example1 testSecret1=my-secret-value
$ oc exec vault-0 --namespace=vault -- vault kv put secret/example1 testSecret1=my-secret-value
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、シークレットがパス
secret/example1
で読み取り可能であることを確認します。oc exec vault-0 --namespace=vault -- vault kv get secret/example1
$ oc exec vault-0 --namespace=vault -- vault kv get secret/example1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Kubernetes 認証を使用するように Vault を設定します。
次のコマンドを実行して、Kubernetes 認証方法を有効にします。
oc exec vault-0 --namespace=vault -- vault auth enable kubernetes
$ oc exec vault-0 --namespace=vault -- vault auth enable kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Success! Enabled kubernetes auth method at: kubernetes/
Success! Enabled kubernetes auth method at: kubernetes/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kubernetes 認証メソッドを設定します。
次のコマンドを実行して、トークンレビューアーを環境変数として設定します。
TOKEN_REVIEWER_JWT="$(oc exec vault-0 --namespace=vault -- cat /var/run/secrets/kubernetes.io/serviceaccount/token)"
$ TOKEN_REVIEWER_JWT="$(oc exec vault-0 --namespace=vault -- cat /var/run/secrets/kubernetes.io/serviceaccount/token)"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Kubernetes サービスの IP アドレスを環境変数として設定します。
KUBERNETES_SERVICE_IP="$(oc get svc kubernetes --namespace=default -o go-template="{{ .spec.clusterIP }}")"
$ KUBERNETES_SERVICE_IP="$(oc get svc kubernetes --namespace=default -o go-template="{{ .spec.clusterIP }}")"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Kubernetes auth メソッドを更新します。
oc exec -i vault-0 --namespace=vault -- vault write auth/kubernetes/config \ issuer="https://kubernetes.default.svc.cluster.local" \ token_reviewer_jwt="${TOKEN_REVIEWER_JWT}" \ kubernetes_host="https://${KUBERNETES_SERVICE_IP}:443" \ kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
$ oc exec -i vault-0 --namespace=vault -- vault write auth/kubernetes/config \ issuer="https://kubernetes.default.svc.cluster.local" \ token_reviewer_jwt="${TOKEN_REVIEWER_JWT}" \ kubernetes_host="https://${KUBERNETES_SERVICE_IP}:443" \ kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Success! Data written to: auth/kubernetes/config
Success! Data written to: auth/kubernetes/config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、アプリケーションのポリシーを作成します。
oc exec -i vault-0 --namespace=vault -- vault policy write csi -<<EOF path "secret/data/*" { capabilities = ["read"] } EOF
$ oc exec -i vault-0 --namespace=vault -- vault policy write csi -<<EOF path "secret/data/*" { capabilities = ["read"] } EOF
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Success! Uploaded policy: csi
Success! Uploaded policy: csi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、アプリケーションにアクセスするための認証ロールを作成します。
oc exec -i vault-0 --namespace=vault -- vault write auth/kubernetes/role/csi \ bound_service_account_names=default \ bound_service_account_namespaces=default,test-ns,negative-test-ns,my-namespace \ policies=csi \ ttl=20m
$ oc exec -i vault-0 --namespace=vault -- vault write auth/kubernetes/role/csi \ bound_service_account_names=default \ bound_service_account_namespaces=default,test-ns,negative-test-ns,my-namespace \ policies=csi \ ttl=20m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Success! Data written to: auth/kubernetes/role/csi
Success! Data written to: auth/kubernetes/role/csi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、すべての
Vault
Pod が正常に実行されていることを確認します。oc get pods -n vault
$ oc get pods -n vault
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE vault-0 1/1 Running 0 43m vault-csi-provider-87rgw 2/2 Running 0 19m vault-csi-provider-bd6hp 2/2 Running 0 19m vault-csi-provider-smlv7 2/2 Running 0 19m
NAME READY STATUS RESTARTS AGE vault-0 1/1 Running 0 43m vault-csi-provider-87rgw 2/2 Running 0 19m vault-csi-provider-bd6hp 2/2 Running 0 19m vault-csi-provider-smlv7 2/2 Running 0 19m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、すべての
secrets-store-csi-driver
Pod が正常に実行されていることを確認します。oc get pods -n openshift-cluster-csi-drivers | grep -E "secrets"
$ oc get pods -n openshift-cluster-csi-drivers | grep -E "secrets"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットプロバイダークラスを作成して、シークレットストアプロバイダーを定義します。
SecretProviderClass
オブジェクトを定義する YAML ファイルを作成します。secret-provider-class-vault.yaml
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して
SecretProviderClass
オブジェクトを作成します。oc create -f secret-provider-class-vault.yaml
$ oc create -f secret-provider-class-vault.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
このシークレットプロバイダークラスを使用するデプロイメントを作成します。
Deployment
オブジェクトを定義する YAML ファイルを作成します。deployment.yaml
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
Deployment
オブジェクトを作成します。oc create -f deployment.yaml
$ oc create -f deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod ボリュームマウント内の HashiCorp Vault からシークレットにアクセスできることを確認します。
次のコマンドを実行して、Pod マウント内のシークレットをリスト表示します。
oc exec busybox-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
$ oc exec busybox-deployment-<hash> -n my-namespace -- ls /mnt/secrets-store/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
testSecret1
testSecret1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod マウント内のシークレットを表示します。
oc exec busybox-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret1
$ oc exec busybox-deployment-<hash> -n my-namespace -- cat /mnt/secrets-store/testSecret1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
my-secret-value
my-secret-value
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.7.4. マウントされたコンテンツを Kubernetes シークレットとして同期できるようにする リンクのコピーリンクがクリップボードにコピーされました!
同期を有効にして、マウントされたボリューム上のコンテンツから Kubernetes シークレットを作成できます。同期を有効にする例としては、デプロイメント内で環境変数を使用して Kubernetes シークレットを参照することが挙げられます。
シークレットを OpenShift Container Platform クラスターおよび etcd に保存しない場合は、同期を有効にしないでください。この機能は、環境変数を使用してシークレットを参照する場合など、必要な場合にのみ有効にしてください。
同期を有効にすると、シークレットをマウントする Pod を開始した後、マウントされたボリュームのシークレットが Kubernetes シークレットとして同期されます。
コンテンツをマウントしたすべての Pod が削除されると、同期された Kubernetes シークレットも削除されます。
前提条件
- Secrets Store CSI Driver Operator がインストールされている。
- シークレットストアプロバイダーがインストールされている。
- シークレットプロバイダークラスが作成されている。
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
次のコマンドを実行して、
SecretProviderClass
リソースを編集します。oc edit secretproviderclass my-azure-provider
$ oc edit secretproviderclass my-azure-provider
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
my-azure-provider
をシークレットプロバイダークラスの名前に置き換えます。
同期された Kubernetes シークレットの設定を含む
secretsObjects
セクションを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を適用するためにファイルを保存します。
2.7.5. Pod ボリュームマウント内のシークレットのステータスの表示 リンクのコピーリンクがクリップボードにコピーされました!
Pod ボリュームマウント内のシークレットのバージョンなどの詳細情報を表示できます。
Secrets Store CSI Driver Operator は、Pod と同じ namespace に SecretProviderClassPodStatus
リソースを作成します。このリソースを確認すると、Pod ボリュームマウントのシークレットに関するバージョンなどの詳細情報を確認できます。
前提条件
- Secrets Store CSI Driver Operator がインストールされている。
- シークレットストアプロバイダーがインストールされている。
- シークレットプロバイダークラスが作成されている。
- Secrets Store CSI Driver Operator からボリュームをマウントする Pod をデプロイしている。
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
次のコマンドを実行して、Pod ボリュームマウントのシークレットに関する詳細情報を表示します。
oc get secretproviderclasspodstatus <secret_provider_class_pod_status_name> -o yaml
$ oc get secretproviderclasspodstatus <secret_provider_class_pod_status_name> -o yaml
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- シークレットプロバイダークラスの Pod ステータスオブジェクトの名前は、
<pod_name>-<namespace>-<secret_provider_class_name>
の形式になります。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.7.6. Secrets Store CSI Driver Operator のアンインストール リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
- 管理者としてクラスターにアクセスできる。
手順
Secrets Store CSI Driver Operator をアンインストールするには、以下を実行します。
-
Secrets-store.csi.k8s.io
プロバイダーを使用するすべてのアプリケーション Pod を停止します。 - 選択したシークレットストアのサードパーティープロバイダープラグインをすべて削除します。
Container Storage Interface (CSI) ドライバーと関連するマニフェストを削除します。
-
Administration
CustomResourceDefinitions ClusterCSIDriver をクリックします。 - Instances タブの左端にある secrets-store.csi.k8s.io でドロップダウンメニューをクリックし、Delete ClusterCSIDriver をクリックします。
- プロンプトが表示されたら、Delete をクリックします。
-
Administration
- CSI ドライバー Pod が稼働していないことを確認します。
Secrets Store CSI Driver Operator をアンインストールします。
注記Operator をアンインストールする前に、まず CSI ドライバーを削除する必要があります。
-
Operators
Installed Operators をクリックします。 - Installed Operators ページで、スクロールするか、Search by name ボックスに "Secrets Store CSI" と入力して Operator を見つけ、クリックします。
-
Installed Operators > Operator details ページの右上に表示される Actions
Uninstall Operator をクリックします。 Uninstall Operator ウィンドウでプロンプトが表示されたら、Uninstall ボタンをクリックして namespace から Operator を削除します。Operator によってクラスターにデプロイされたアプリケーションは手動でクリーンアップする必要があります。
アンインストールすると、Secrets Store CSI Driver Operator は Web コンソールの Installed Operators セクションにリストされなくなります。
-
Operators