다음을 통해 공유


AKS(Azure Kubernetes Service) 클러스터에서 KMS 데이터 암호화 사용(미리 보기)

이 문서에서는 AKS(Azure Kubernetes Service)에서 Kubernetes 비밀에 KMS(키 관리 서비스) 데이터 암호화를 사용하도록 설정하는 방법을 보여 줍니다. KMS 암호화는 Azure Key Vault 키를 사용하여 etcd에 저장된 Kubernetes 비밀을 암호화합니다.

AKS는 다음 두 가지 주요 관리 옵션을 지원합니다.

  • PMK(플랫폼 관리형 키) : AKS는 암호화 키를 자동으로 만들고 관리합니다. 이 옵션은 자동 키 회전을 사용하여 가장 간단한 설정을 제공합니다.
  • CMK(고객 관리형 키) : 사용자 고유의 Azure Key Vault 및 암호화 키를 만들고 관리합니다. 이 옵션은 키 수명 주기에 대한 모든 권한을 제공하고 고객 관리형 키를 의무화하는 규정 준수 요구 사항을 충족합니다.

암호화 개념 및 키 옵션에 대한 자세한 내용은 AKS에 대한 미사용 데이터 암호화 개념을 참조하세요.

중요합니다

AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.

필수 조건

  • 이 문서에는 Azure CLI 버전 2.73.0 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.
  • Azure CLI 확장 버전 aks-preview 이상이 필요합니다.
    • 아직 aks-preview 확장을 갖고 있지 않다면, az extension add 명령을 사용하여 이 확장을 설치하세요.
      az extension add --name aks-preview
      
    • 이미 aks-preview 확장이 있다면, 업데이트하여 이 확장이 az extension update 명령을 사용하여 최신 버전이 있는지 확인하게 하세요.
      az extension update --name aks-preview
      
  • kubectl CLI 도구가 설치되었습니다.

기능 플래그 등록

플랫폼 관리형 키와 함께 KMS 데이터 암호화를 사용하려면 구독에 기능 플래그를 KMSPMKPreview 등록합니다.

  1. 명령을 사용하여 기능 플래그를 등록합니다 az feature register .

    az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  2. 또한 az feature show 명령을 사용하여 등록 상태를 확인합니다. 상태가 Registered로 표시되는 데 몇 분 정도 걸립니다.

    az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  3. 상태가 등록됨으로 표시되면 명령을 사용하여 Microsoft.ContainerService 리소스 공급자의 등록을 az provider register 새로 고칩니다.

    az provider register --namespace Microsoft.ContainerService
    

환경 변수 설정하기

배포에 대한 환경 변수를 설정합니다. 자리 표시자 값을 사용자 자신만의 값으로 바꿉니다.

# Set environment variables
export SUBSCRIPTION_ID="<your-subscription-id>"
export RESOURCE_GROUP="<your-resource-group>"
export LOCATION="<your-location>"
export CLUSTER_NAME="<your-cluster-name>"

# Set subscription
az account set --subscription $SUBSCRIPTION_ID

# Create resource group if it doesn't exist
az group create --name $RESOURCE_GROUP --location $LOCATION

플랫폼 관리형 키 암호화 사용

AKS는 플랫폼 관리형 키를 사용하여 Azure Key Vault 및 암호화 키를 자동으로 만들고 관리합니다. 키 회전은 플랫폼에서 자동으로 처리됩니다.

플랫폼 관리형 키를 사용하여 새 AKS 클러스터 만들기

플랫폼 관리형 키를 사용하여 KMS 암호화를 사용하여 새 AKS 클러스터를 만듭니다.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --generate-ssh-keys

기존 클러스터에서 플랫폼 관리형 키 사용

기존 AKS 클러스터에서 플랫폼 관리형 키를 사용하여 KMS 암호화를 사용하도록 설정합니다.

비고

클러스터에서 Kubernetes 버전 1.33 이상을 실행해야 합니다.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled

KMS 구성 확인

KMS 암호화를 사용하도록 설정한 후 구성을 확인합니다.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

출력에는 KMS 구성이 포함됩니다.

{
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

프라이빗 키 저장소를 사용하여 고객 관리형 키 암호화를 활성화

보안 강화를 위해 공용 네트워크 액세스가 사용하지 않도록 설정된 프라이빗 키 자격 증명 모음을 사용할 수 있습니다. AKS는 신뢰할 수 있는 서비스 방화벽 예외를 통해 프라이빗 키 자격 증명 모음에 액세스합니다. 이 섹션에서는 프라이빗 키 자격 증명 보관소를 사용하여 고객 관리형 키를 구성하는 방법을 설명합니다.

키 자격 증명 모음 및 키를 신뢰할 수 있는 서비스 액세스를 사용하여 만들기

비고

이 섹션에서는 처음에 공용 네트워크 액세스를 사용하여 키 자격 증명 모음을 만든 다음 신뢰할 수 있는 서비스 바이패스로 방화벽을 사용하도록 설정하는 방법을 보여 줍니다. 이 방법은 설명용으로만 사용됩니다. 프로덕션 환경에서는 시작부터 키 볼트를 프라이빗으로 설정하고 관리해야 합니다. 프라이빗 키 자격 증명 모음 관리에 대한 지침은 Azure Key Vault 네트워크 보안을 참조하세요.

  1. 활성화된 Azure RBAC를 사용하여 키 자격 증명 모음을 만드세요.

    export KEY_VAULT_NAME="<your-key-vault-name>"
    
    az keyvault create \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-rbac-authorization true \
        --public-network-access Enabled
    
    # Get the key vault resource ID
    export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)
    
  2. Key Vault Crypto Officer 역할을 자신에게 할당하여 키를 만듭니다.

    az role assignment create \
        --role "Key Vault Crypto Officer" \
        --assignee-object-id $(az ad signed-in-user show --query id -o tsv) \
        --assignee-principal-type "User" \
        --scope $KEY_VAULT_RESOURCE_ID
    
  3. 키 볼트에 키를 만듭니다.

    export KEY_NAME="<your-key-name>"
    
    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME
    
    # Get the key ID (without version for automatic rotation)
    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv)
    export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
    
  4. 신뢰할 수 있는 서비스 우회와 함께 키 볼트 방화벽을 사용하도록 설정합니다.

    az keyvault update \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --default-action Deny \
        --bypass AzureServices
    

    이 매개 변수는 --default-action Deny 공용 네트워크 액세스를 차단하며 --bypass AzureServices , 이 매개 변수를 사용하면 신뢰할 수 있는 Azure 서비스(AKS 포함)가 키 자격 증명 모음에 액세스할 수 있습니다.

사용자 할당 관리 ID 만들기

  1. 클러스터에 대한 사용자 할당 관리 ID를 만듭니다.

    export IDENTITY_NAME="<your-identity-name>"
    
    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
    # Get the identity details
    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    
  2. 관리 ID에 필요한 역할을 할당합니다.

    # Assign Key Vault Crypto User role for encrypt/decrypt operations
    az role assignment create \
        --role "Key Vault Crypto User" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    
    # Assign Key Vault Contributor role for key management
    az role assignment create \
        --role "Key Vault Contributor" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    

고객 관리형 키(프라이빗)를 사용하여 새 AKS 클러스터 만들기

고객이 관리하는 키와 프라이빗 키 저장소를 사용하여 KMS 암호화가 적용된 새 AKS 클러스터를 만드십시오.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Private \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --generate-ssh-keys

기존 클러스터에서 고객 관리형 키 사용(프라이빗)

기존 AKS 클러스터에서 프라이빗 키 자산 저장소를 사용하여 고객 관리형 키로 KMS 암호화를 사용하도록 설정합니다.

비고

클러스터에서 Kubernetes 버전 1.33 이상을 실행해야 합니다.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Private \
    --assign-identity $IDENTITY_RESOURCE_ID

KMS 구성 확인

KMS 암호화를 사용하도록 설정한 후 구성을 확인합니다.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

출력에는 KMS 구성이 포함됩니다.

{
    "azureKeyVaultKms": {
        "enabled": true,
        "keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
        "keyVaultNetworkAccess": "Private",
        "keyVaultResourceId": "<key-vault-resource-id>"
    },
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

공개 키 자격 증명 보관소를 사용하여 고객이 관리하는 키 암호화를 사용 설정

고객 관리형 키를 사용하여 고유한 Azure Key Vault 및 암호화 키를 만들고 관리합니다. 이 섹션에서는 공용 키 자산 보관소를 사용하여 고객 관리형 키를 구성하는 방법을 보여 줍니다.

키 자격 증명 모음 및 키 만들기

  1. 활성화된 Azure RBAC를 사용하여 키 자격 증명 모음을 만드세요.

    export KEY_VAULT_NAME="<your-key-vault-name>"
    
    az keyvault create \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-rbac-authorization true \
        --public-network-access Enabled
    
    # Get the key vault resource ID
    export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)
    
  2. Key Vault Crypto Officer 역할을 자신에게 할당하여 키를 만듭니다.

    az role assignment create \
        --role "Key Vault Crypto Officer" \
        --assignee-object-id $(az ad signed-in-user show --query id -o tsv) \
        --assignee-principal-type "User" \
        --scope $KEY_VAULT_RESOURCE_ID
    
  3. 키 볼트에 키를 만듭니다.

    export KEY_NAME="<your-key-name>"
    
    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME
    
    # Get the key ID (without version for automatic rotation)
    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv)
    export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
    

사용자 할당 관리 ID 만들기

  1. 클러스터에 대한 사용자 할당 관리 ID를 만듭니다.

    export IDENTITY_NAME="<your-identity-name>"
    
    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
    # Get the identity details
    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    
  2. 관리 ID에 필요한 역할을 할당합니다.

    # Assign Key Vault Crypto User role for encrypt/decrypt operations
    az role assignment create \
        --role "Key Vault Crypto User" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    
    # Assign Key Vault Contributor role for key management
    az role assignment create \
        --role "Key Vault Contributor" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    

고객 관리형 키를 사용하여 새 AKS 클러스터 만들기

고객 관리형 키를 사용하여 KMS 암호화를 사용하여 새 AKS 클러스터를 만듭니다.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --generate-ssh-keys

기존 클러스터에서 고객 관리형 키 사용

기존 AKS 클러스터에서 고객 관리형 키를 사용하여 KMS 암호화를 사용하도록 설정합니다.

비고

클러스터에서 Kubernetes 버전 1.33 이상을 실행해야 합니다.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID

KMS 구성 확인

KMS 암호화를 사용하도록 설정한 후 구성을 확인합니다.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

출력에는 KMS 구성이 포함됩니다.

{
    "azureKeyVaultKms": {
        "enabled": true,
        "keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
        "keyVaultNetworkAccess": "Public",
        "keyVaultResourceId": "<key-vault-resource-id>"
    },
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

키 관리 옵션 간 마이그레이션

플랫폼 관리형 키와 고객 관리형 키 간에 마이그레이션할 수 있습니다.

플랫폼 관리형 키에서 고객 관리형 키로 마이그레이션

플랫폼 관리형 키에서 고객 관리형 키로 마이그레이션하려면 먼저 고객 관리형 키 섹션에 설명된 대로 키 자격 증명 모음, 키 및 관리 ID를 설정한 다음 업데이트 명령을 실행합니다.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID

고객 관리형 키에서 플랫폼 관리형 키로 마이그레이션

고객 관리형 키에서 플랫폼 관리형 키로 마이그레이션하려면 다음을 수행합니다.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --disable-azure-keyvault-kms

키 회전

KMS 데이터 암호화를 사용하면 키 관리 옵션에 따라 키 회전이 다르게 처리됩니다.

  • 플랫폼 관리형 키: 키 회전은 자동으로 수행됩니다. 아무 작업도 필요하지 않습니다.
  • 고객 관리형 키: Azure Key Vault에서 키 버전을 회전하는 경우 KMS 컨트롤러는 주기적으로(6시간마다) 회전을 감지하고 새 키 버전을 사용합니다.

비고

레거시 KMS 환경과 달리 이 새로운 구현을 사용하면 키 회전 후 비밀을 수동으로 다시 암호화할 필요가 없습니다. 플랫폼은 이를 자동으로 처리합니다.