ASP.NET Core에서 데이터 보호 키 관리 및 수명
작성자: Rick Anderson
키 관리
앱은 운영 환경을 검색하고 키 구성을 자체적으로 처리하려고 합니다.
앱이 Azure 앱에서 호스트되는 경우 키는 %HOME%\ASP.NET\DataProtection-Keys 폴더에 유지됩니다. 이 폴더는 네트워크 스토리지에서 지원하고, 앱을 호스트하는 모든 머신에서 동기화됩니다.
- 저장된 키는 보호되지 않습니다.
- DataProtection-Keys 폴더는 단일 배포 슬롯에 앱의 모든 인스턴스에 대한 키 링을 제공합니다.
- 준비 및 프로덕션과 같은 별도의 배포 슬롯은 키 링을 공유하지 않습니다. 스테이징을 프로덕션으로 교환하거나 A/B 테스트를 사용하는 등의 배포 슬롯 간에 교환하는 경우 데이터 보호를 사용하는 모든 앱은 이전 슬롯 내의 키 링을 사용하여 저장된 데이터의 암호를 해독할 수 없습니다. 따라서 사용자는 해당 cookie를 보호하는 데 데이터 보호를 사용하므로 표준 ASP.NET Core cookie 인증을 사용하는 앱에서 로그아웃됩니다. 슬롯 독립적 키 링을 원하는 경우 Azure Blob Storage, Azure Key Vault, SQL 저장소 또는 Redis 캐시와 같은 외부 키 링 공급자를 사용합니다.
사용자 프로필을 사용할 수 있는 경우 키는 %LOCALAPPDATA%\ASP.NET\DataProtection-Keys 폴더에 유지됩니다. 운영 체제가 Windows인 경우 DPAPI를 사용하여 미사용 키가 암호화됩니다.
앱 풀의 setProfileEnvironment 특성도 사용하도록 설정해야 합니다.
setProfileEnvironment
의 기본값은true
입니다. Windows OS와 같은 일부 시나리오에서는setProfileEnvironment
가false
로 설정됩니다. 키가 예상대로 사용자 프로필 디렉터리에 저장되지 않는 경우 다음을 수행합니다.- %windir%/system32/inetsrv/config 폴더로 이동합니다.
- applicationHost.config 파일을 엽니다.
<system.applicationHost><applicationPools><applicationPoolDefaults><processModel>
요소를 찾습니다.setProfileEnvironment
특성이 존재하지 않는지 확인합니다. 존재하지 않을 경우 기본값이true
로 설정됩니다. 또는 특성 값을 명시적으로true
로 설정합니다.
앱이 IIS에서 호스트되는 경우 키는 작업자 프로세스 계정에만 ACLed인 특수 레지스트리 키로 HKLM 레지스트리에 유지됩니다. 미사용 키는 DPAPI를 사용하여 암호화됩니다.
이러한 조건 중 일치하는 조건이 없으면 키가 현재 프로세스 외부에서 유지되지 않습니다. 프로세스가 종료되면 생성된 모든 키가 손실됩니다.
개발자는 항상 모든 권한을 가지며 키가 저장되는 방법과 위치를 재정의할 수 있습니다. 위의 처음 세 가지 옵션은 과거 ASP.NET <장치 키> 자동 생성 루틴이 작동하는 방법과 대부분의 앱에서 유사한, 적합한 기본값을 제공합니다. 최종 대체 옵션은 개발자가 키 지속성을 원하는 경우 구성을 미리 지정해야 하는 유일한 시나리오이지만 이 대체는 드문 경우에만 발생합니다.
Docker 컨테이너에서 호스트하는 경우 키는 Docker 볼륨(컨테이너 수명을 초과하여 유지되는 공유 볼륨 또는 호스트 탑재 볼륨)인 폴더 또는 외부 공급자(예: Azure Key Vault 또는 Redis)에 유지되어야 합니다. 외부 공급자는 앱이 공유 네트워크 볼륨에 액세스할 수 없는 경우 웹 팜 시나리오에서도 유용합니다(자세한 내용은 PersistKeysToFileSystem 참조).
Warning
개발자가 위에 설명된 규칙을 재정의하고 데이터 보호 시스템을 특정 키 리포지토리에 가리키면 미사용 키의 자동 암호화가 비활성화됩니다. 미사용 보호는 구성을 통해 다시 활성화될 수 있습니다.
키 수명
키의 수명은 기본적으로 90일입니다. 키가 만료되면 앱은 자동으로 새 키를 생성하고 새 키를 활성 키로 설정합니다. 사용 중지된 키가 시스템에 남아 있는 한 앱은 해당 키로 보호되는 모든 데이터의 암호를 해독할 수 있습니다. 자세한 내용은 키 관리를 참조하세요.
기본 알고리즘
사용되는 기본 페이로드 보호 알고리즘은 기밀성을 위한 AES-256-CBC 및 신뢰성을 위한 HMACSHA256입니다. 90일마다 변경되는 512비트 마스터 키는 페이로드별로 이러한 알고리즘에 사용되는 두 개의 하위 키를 파생하는 데 사용됩니다. 자세한 내용은 하위 키 파생을 참조하세요.
추가 리소스
키 관리
앱은 운영 환경을 검색하고 키 구성을 자체적으로 처리하려고 합니다.
앱이 Azure 앱에서 호스트되는 경우 키는 %HOME%\ASP.NET\DataProtection-Keys 폴더에 유지됩니다. 이 폴더는 네트워크 스토리지에서 지원하고, 앱을 호스트하는 모든 머신에서 동기화됩니다.
- 저장된 키는 보호되지 않습니다.
- DataProtection-Keys 폴더는 단일 배포 슬롯에 앱의 모든 인스턴스에 대한 키 링을 제공합니다.
- 준비 및 프로덕션과 같은 별도의 배포 슬롯은 키 링을 공유하지 않습니다. 스테이징을 프로덕션으로 교환하거나 A/B 테스트를 사용하는 등의 배포 슬롯 간에 교환하는 경우 데이터 보호를 사용하는 모든 앱은 이전 슬롯 내의 키 링을 사용하여 저장된 데이터의 암호를 해독할 수 없습니다. 따라서 사용자는 해당 cookie를 보호하는 데 데이터 보호를 사용하므로 표준 ASP.NET Core cookie 인증을 사용하는 앱에서 로그아웃됩니다. 슬롯 독립적 키 링을 원하는 경우 Azure Blob Storage, Azure Key Vault, SQL 저장소 또는 Redis 캐시와 같은 외부 키 링 공급자를 사용합니다.
사용자 프로필을 사용할 수 있는 경우 키는 %LOCALAPPDATA%\ASP.NET\DataProtection-Keys 폴더에 유지됩니다. 운영 체제가 Windows인 경우 DPAPI를 사용하여 미사용 키가 암호화됩니다.
앱 풀의 setProfileEnvironment 특성도 사용하도록 설정해야 합니다.
setProfileEnvironment
의 기본값은true
입니다. Windows OS와 같은 일부 시나리오에서는setProfileEnvironment
가false
로 설정됩니다. 키가 예상대로 사용자 프로필 디렉터리에 저장되지 않는 경우 다음을 수행합니다.- %windir%/system32/inetsrv/config 폴더로 이동합니다.
- applicationHost.config 파일을 엽니다.
<system.applicationHost><applicationPools><applicationPoolDefaults><processModel>
요소를 찾습니다.setProfileEnvironment
특성이 존재하지 않는지 확인합니다. 존재하지 않을 경우 기본값이true
로 설정됩니다. 또는 특성 값을 명시적으로true
로 설정합니다.
앱이 IIS에서 호스트되는 경우 키는 작업자 프로세스 계정에만 ACLed인 특수 레지스트리 키로 HKLM 레지스트리에 유지됩니다. 미사용 키는 DPAPI를 사용하여 암호화됩니다.
이러한 조건 중 일치하는 조건이 없으면 키가 현재 프로세스 외부에서 유지되지 않습니다. 프로세스가 종료되면 생성된 모든 키가 손실됩니다.
개발자는 항상 모든 권한을 가지며 키가 저장되는 방법과 위치를 재정의할 수 있습니다. 위의 처음 세 가지 옵션은 과거 ASP.NET <장치 키> 자동 생성 루틴이 작동하는 방법과 대부분의 앱에서 유사한, 적합한 기본값을 제공합니다. 최종 대체 옵션은 개발자가 키 지속성을 원하는 경우 구성을 미리 지정해야 하는 유일한 시나리오이지만 이 대체는 드문 경우에만 발생합니다.
Docker 컨테이너에서 호스트하는 경우 키는 Docker 볼륨(컨테이너 수명을 초과하여 유지되는 공유 볼륨 또는 호스트 탑재 볼륨)인 폴더 또는 외부 공급자(예: Azure Key Vault 또는 Redis)에 유지되어야 합니다. 외부 공급자는 앱이 공유 네트워크 볼륨에 액세스할 수 없는 경우 웹 팜 시나리오에서도 유용합니다(자세한 내용은 PersistKeysToFileSystem 참조).
Warning
개발자가 위에 설명된 규칙을 재정의하고 데이터 보호 시스템을 특정 키 리포지토리에 가리키면 미사용 키의 자동 암호화가 비활성화됩니다. 미사용 보호는 구성을 통해 다시 활성화될 수 있습니다.
키 수명
키의 수명은 기본적으로 90일입니다. 키가 만료되면 앱은 자동으로 새 키를 생성하고 새 키를 활성 키로 설정합니다. 사용 중지된 키가 시스템에 남아 있는 한 앱은 해당 키로 보호되는 모든 데이터의 암호를 해독할 수 있습니다. 자세한 내용은 키 관리를 참조하세요.
기본 알고리즘
사용되는 기본 페이로드 보호 알고리즘은 기밀성을 위한 AES-256-CBC 및 신뢰성을 위한 HMACSHA256입니다. 90일마다 변경되는 512비트 마스터 키는 페이로드별로 이러한 알고리즘에 사용되는 두 개의 하위 키를 파생하는 데 사용됩니다. 자세한 내용은 하위 키 파생을 참조하세요.
추가 리소스
ASP.NET Core