適用対象: AKS on Azure Local
Kubernetes の シークレット は、パスワードや SSH キーなどの少量の機密データを含むオブジェクトです。 Kubernetes API サーバーでは、シークレットは、すべてのクラスター データの Kubernetes バッキング ストアとして使用される高可用性のキー値ストアである etcd に格納されます。
Azure Local 上の Azure Kubernetes Service (AKS) には、 Key Management Service (KMS) プラグインを使用した etcd シークレットの暗号化が付属しています。 Azure Local のすべての Kubernetes クラスターには、既定で有効になっている組み込みの KMS プラグインがあります。 このプラグインは、 キー暗号化キー(KEK) を生成し、30日ごとに自動的にローテーションします。
この記事では、データが暗号化されていることを確認する方法について説明します。 詳細については、 KMS プラグインの公式 Kubernetes ドキュメントを参照してください。
注
KMS プラグインは現在、KMS v1 プロトコルを使用しています。
開始する前に
開始する前に、次の前提条件を満たしていることを確認してください。
- Kubernetesクラスターと対話するには、kubectl と kubelogin をインストールする必要があります。
- シークレットを表示または管理するには、シークレットにアクセスするために必要な権限があることを確認してください。 詳細については、「 アクセスと ID」を参照してください。
Microsoft Entra 対応クラスターにアクセスする
az aksarc get-credentials コマンドを使用して、クラスターにアクセスするためのユーザー資格情報を取得します。 Azure Kubernetes Service Arc クラスター ユーザー ロールのアクセス許可に含まれている Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action リソースが必要です。
az aksarc get-credentials --resource-group $resource_group --name $aks_cluster_name
KMS プラグインが有効になっていることを確認する
KMS プラグインが有効になっていることを確認するには、次のコマンドを実行し、kms-providers の正常性状態が [OK] されていることを確認します。
kubectl get --raw='/readyz?verbose'
[+]ping ok
[+]Log ok
[+]etcd ok
[+]kms-providers ok
[+]poststarthook/start-encryption-provider-config-automatic-reload ok
データが暗号化されていることを確認する
シークレットとデータが KMS プラグインを使用して暗号化されていることを確認するには、 Kubernetes のドキュメントを参照してください。 次のコマンドを使用して、データが暗号化されていることを確認できます。
kubectl exec --stdin --tty <etcd pod name> -n kube-system --etcdctl --cacert /etc/kubernetes/pki/etcd/ca.crt --key /etc/kubernetes/pki/etcd/server.key --cert /etc/kubernetes/pki/etcd/server.crt get /registry/secrets/default/db-user-pass -w fields
kubectl exec
: これは、実行中のポッド内でコマンドを実行するために使用される kubectl コマンドです。 これにより、ポッドのコンテナ内でコマンドを実行できます。--stdin
: このフラグを使用すると、ポッド内で実行しているコマンドに入力 (stdin) を送信できます。--tty
: このフラグは、コマンドに TTY (ターミナル) を割り当て、ターミナル セッションと対話しているかのように動作します。<etcd pod name>
: etcd ポッド名を見つけるには、次のコマンドを実行します。kubectl get pods -n kube-system | findstr etcd-moc
-n kube-system
: ポッドが配置されている名前空間を指定します。 kube-system は、etcdやその他のコントロールプレーンサービスなどのシステムコンポーネントにKubernetesが使用するデフォルトの名前空間です。--etcdctl
: etcd からシークレットを読み込みます。 追加のフィールドは、etcd にアクセスする前の認証に使用されます。
コマンド出力では、次のフィールドが返されます。
"ClusterID" : <cluster id>
"MemberID" : <member id>
"Revision" : <revision number>
"RaftTerm" : 2
"Key" : <path to the key>
"CreateRevision" : <revision number at the time the key was created>
"ModRevision" : <revision number at the time the key was modified>
"Version" : <version of the key-value pair in etcd>
"Value" : "k8s:enc:kms:v1:kms-plugin: <encrypted secret value>"
"Lease" : <lease associated with the secret>
"More" : <indicates if there are more results>
"Count" : <number of key-value pairs returned>
コマンドを実行した後、ターミナル・ウィンドウの出力の Value
フィールドを調べます。 この出力は、このキーの etcd シークレットストアに格納されている値 (シークレットの暗号化された値) を示しています。 値は KMS プラグインを使用して暗号化されます。
k8s:enc:kms:v1:
プレフィックスは、Kubernetes が KMS v1 プラグインを使用してシークレットを暗号化された形式で保存していることを示します。
注
kubectl describe secrets
コマンドを使用してシークレットを取得すると、base64 でエンコードされた形式で返されますが、暗号化されません。
kubectl describe
コマンドは、暗号化と復号化を自動的に管理するAPIサーバーを介してKubernetesリソースの詳細を取得します。 シークレットなどの機密データの場合、ポッドにマウントされている場合でも、API サーバーはアクセス時に復号化されるようにします。 その結果、 kubectl describe
コマンドを実行すると、シークレットは暗号化された形式では表示されず、リソースによって使用されている場合は復号化された形式で表示されます。
トラブルシューティング
KMS プラグインでエラーが発生した場合は、「 トラブルシューティング」ページの 手順に従って問題をトラブルシューティングします。
次のステップ
- Azure Arc で有効になっている AKS のセキュリティブックのガイダンスに従って、クラスターを他の方法で保護する方法を説明します。
- Kubernetes クラスターの作成
- Kubernetes クラスター に Linux アプリケーションをデプロイする