밤늦게 릴리스를 푸시하고 알림을 훑어보면, private repo에서 절대 나가지 shouldn't never 한 인증 정보를 발견할 수 있습니다. 그것은 데이터베이스 패스워드였거나, 더 넓은 권한을 가진 cloud 접근 키였을 수 있습니다. 그 문제는 누군가가 로그인할 수 있는 문제가 아니라, 데이터베이스 보안이 로그인 문제로 다루어지고 있지만 실제로 저장 라이프 사이클 문제라는 점입니다.
실제 시스템에서 이것이 어디서나 나타납니다. 팀은 암호화를 한번만 활성화하고, 그들이 끝났다고 가정합니다. 백업을 유지하지만 복원 테스트를 하지 않습니다. 편의를 위해 관리자 서비스 계정을 만들고, 그것이 존재하는 것을 잊습니다. 프로덕션을 잠근 다음, 스테이징에 고객 데이터를 복사한 채로 남겨둡니다. 모바일 또는 웹 앱을 개발하고 있다면, 데이터베이스 보안은 모든 것을 다 포함해야 합니다: 주 데이터베이스, 복제본, 수출물, 로그, 백업, 그리고 모든 것을 제어하는 키.
만약 당신이 다음 앱의 auth를 해결하고 있다면 인증과 저장 보안은 다른 실패 모드를 해결한다는 것을 기억하세요. 인증은 누가 들어가야 하는지 결정합니다. 저장 보안은 누가 들어가거나, 데이터가 예상치 못한 경로를 통해 유출될 때의 피해를 제한합니다. 고객을 대면하는 앱을 배포하는 팀에게는, 저장소 결정과 인접한 제어와 함께 일치하는 것이 중요합니다. 예를 들어, 앱 스토어의 준수에 대한 __CAPGO_KEEP_0__ 보안 표준이것은 이론적인 긴급성이 아닙니다. API 앱스토어 준수 위한 보안 표준.
인증 2020년 64.2 제타바이트의 글로벌 데이터 생산량은 2025년까지 180 제타바이트로 증가할 것으로 예상되었습니다. 따라서 에지 델타의 데이터 저장소 요약. 그 규모에서 보안 저장은 단순히 보안 강화 작업이 아닌 아키텍처가 됩니다.
내용목록
- 데이터베이스 보안은 단순한 비밀번호만으로는 충분하지 않다
- 인증 도용에 대한 방어가 살아남아야 한다.
- 가장 중요한 3가지 위협 그룹을 이해하라. (Threat Buckets).
- 실제 암호화 구현 패턴
- 마스터 키 및 비밀 관리
- 데이터베이스 보안 저장소 설계
- 데이터베이스 보안 저장소 개발자 체크리스트
- 자주 묻는 질문
데이터베이스 보안은 단순한 비밀번호만으로는 충분하지 않다.
비밀번호는 입구를 보호하지만, 인증 정보가 유출되거나 스냅샷이 복사되거나 내부 서비스가 표적이 아닌 테이블을 읽기 시작하면 데이터를 보호하지 못한다. 따라서 안전한 데이터베이스 저장은 layering이 필요하다.
구형적인 생각방식은 단순했다: 데이터베이스를 방화벽 뒤에 두고 강력한 비밀번호를 요구하고 외부로부터 멀리 떨어뜨리자. 그러나 이 모델은 클라우드 시스템, 모바일 백엔드, 현대적인 CI/CD PIPELINE에서 깨지게 된다. 데이터는 서비스 간에 이동한다. 엔지니어는 임시 수출을 생성한다. 분석 작업은 레코드를 복제한다. 백업 시스템은 다른 인프라에서 복사본을 저장한다. 공격자는 데이터베이스 엔진 자체를 깨트리지 않아도 키를 훔치거나 API 토큰을 남용하거나 복제본에 약한 제어를 찾으면 된다.
보안은 조용한 경로에서 실패한다.
가장 손상이 되는 저장 실패는 처음에는 드라마틱하지 않다. 보통은 평범하다.
- 개발자 편의성이 프로덕션 위험으로 변한다: 관리자 인증 정보가 스크립트에 재사용되는데, 회전하면 배포가 깨지기 때문이다.
- 복사된 데이터셋이 규제를 벗어난다: 프로덕션 레코드가 스테이징으로 복제되어 버그를 재현하기 위해 QA가 사용한다.
- 백업이 약점이 된다: 프로덕션에는 강력한 제어가 있지만 복원 버킷이나 스냅샷 정책이 약하다.
실용적인 규칙: 만약 공격자가 읽을 수 있는 데이터와 하나의 자격증만이 사이에 있다면, 안전한 저장소가 아니라 단일 취약점이 될 것입니다.
인증 오용을 견뎌내야 한다.
마이크로소프트의 클라우드 가이드라인은 전송 중인 암호화, 휴면 중인 암호화, 최소 권한의 접근 제어, 비인가 활동을 감시하는 것을 포함한 클라우드 데이터 보안 최적화 방안을 권장합니다. 클라우드 데이터 보안 최적화 방안실제 사고는 유효한 접근 권한을 잘못 사용한 경우로 시작하는 경우가 많습니다.
실무에서 성공하는 방법은 단순하고 일관적입니다. 데이터베이스 파일을 암호화하십시오. 연결을 암호화하십시오. 서비스 역할을 분리하십시오. 관리자 권한을 제거하십시오. sensitive한 연산을 로그하십시오. 비정상적인 사용 패턴에 대한 알림을 설정하십시오. 그게 다 glamor가 아니지만 실제 침해를 막는 것입니다.
실용적인 방법은 물건을 보관하는 금고를 생각하는 것입니다. 금고의 문이 중요합니다. 금고의 잠금 장치, 카메라의 촬영 footage, 방문자 로그, box를 열 수 있는 사람의 정책도 중요합니다. 안전한 데이터베이스 저장소도 마찬가지입니다. 비밀번호는 단지 문 앞에 있는 것일 뿐입니다.
데이터베이스 위협 모델 이해하기
데이터베이스 저장소에 대한 위협 모델을 만들기 전에 시스템이 실패하는 방법을 매핑해야 합니다. 데이터 보안에 대한 위협 모델은 학술적인 필요가 없습니다. 데이터에 접근할 수 있는 사람, 접근하는 방법, 성공할 경우의 결과를 알려줘야 합니다.

敏감한 데이터는 거의 한 개의 정돈된 프로덕션 데이터베이스에 살지 않습니다. 현대적인 지침은 발견과 태도 관리를 강조합니다. 왜냐하면敏감한 정보가 종종 복사본, 백업, 로그, 개발 환경에 끝나기 때문에, 실패가 종종 주 데이터베이스 외부에서 발생하는지에 대해 언급한 바 있습니다. 클라우드 데이터 보안 및 태도 관리 개요. 그 이유는 vendor 노출과 복사된 데이터 세트와 같은 시나리오를 포함한 사고 계획이 필요하기 때문입니다. 이것은 또한 더 광범위한 대응 플레이북, 예를 들어 세 번째 당사자 침해 대응 최선의 방법,가 관련이 됩니다.
도구보다 자산을 시작하십시오.
목록에 중요한 것은 제품보다 먼저 나열하십시오.
대부분의 앱 팀에게는 중요한 자산이 간단합니다:
- 고객 기록 예를 들어 프로필, 주문 내역, 결제 관련 메타데이터, 또는 건강 관련 콘텐츠.
- 인증 자료 예를 들어 패스워드 해시, 세션 기록, 리프레시 토큰, 또는 API 비밀.
- 운영 데이터 예를 들어 감사 로그, 작업 큐, 관리자 메모, 지원 내보내기.
- 복구 자산 예를 들어 스냅샷, 논리적 덤프, 특정 시점 로그, 암호화 키.
마지막 항목은 팀이 생각하는 것보다 더 중요합니다. 공격자가 백업을 삭제하거나 암호화 키를 액세스할 수 있다면, 복구 스토리는 붕괴합니다.
가장 중요한 3가지 위협 그룹
개발자와 함께 사용하는 간단한 모델이 3개의 그룹을 가지고 있습니다.
외부 공격자
모두가 처음으로 생각하는 그룹입니다. SQL 인젝션, API 토큰을 훔치다, cloud 자격 증명이 유출되다, 관리자 패널이 노출되다, 취약한 의존성. 공통된 주제는 데이터에 접근할 수 있는 외부자입니다.
질문해 보세요:
- 어플리케이션을 통해 데이터베이스를 간접적으로 조회할 수 있나요?
- 스토큰이 훔쳐진 서버 자격 증명이 하나 이상의 서비스가 필요로 하는 것보다 더 많은 것을 읽을 수 있나요?
- 복사된 스냅샷이 독립적으로 읽을 수 있을까요?
내부 위협
이것은 악의적인 내부자와 권한이 너무 많은 잘못된 의도 없는 직원도 포함합니다. 지원 엔지니어가 티켓을 해결하기 위해 데이터를 내보내고, 계약자도 로컬 복사본을 유지합니다. 플랫폼 관리자는 생산 데이터를 읽을 수 있지만 그들의 직무에는 필요하지 않습니다.
이것을 도와주는 것은 직무 분리, 역할 기반 접근, 감사 기록이敏감한 읽기 기록을 만드는 것입니다.
고객 기록에 접근한 사람, 접근한 시간, 접근이 허용된 이유를 알 수 없다면, 데이터베이스 제어가 더 약합니다.
실수로 노출
이것은 빠르게 움직이는 팀에서 가장 일반적인 범주입니다. 설정이 잘못된 저장소 버킷. 스테이징 환경에 실제 데이터를 넣어두고, 디버그 로그에 토큰이나 개인 정보가 포함되어 있습니다. 복원 백업을 낮은 보안 환경에 넣어 문제 해결을 위해 사용합니다.
실수로 노출은 강력한 저장소 보안이 운영해야 하는 이유입니다. 단 하나의 설정으로 해결할 수 없습니다. 데이터 분류, 경계, 검토, 정기적인 청소로 해결해야 합니다.
안전한 데이터베이스 저장소의 핵심 원리
침입은 일반적인 실수들의 연쇄에서 거의 항상 발생합니다. 백업이 잘못된 계정으로 복사되거나, 서비스가 더 넓은 권한을 필요로 하는 경우, 오래된 키가 몇 달 동안 활성화된 채로 남아 있는 경우 등이 있습니다. 안전한 데이터베이스 저장소는 이러한 연쇄를 여러 지점에서 끊고, 시스템이 변할 때도 계속해서 끊어야 합니다.
4개의柱로 작업을 그룹화합니다: 암호화, 접근 제어, 감사, 최소화. 백업 및 복원도 중요하지만, 복원된 데이터가 새로운 노출 경로가 되기 때문에 테스트하지 않고 누구든지 읽을 수 있고, 어떤 키가 암호화할 수 있는지 테스트하지 않고, 복원된 데이터가 실제로 어디에 저장되는지 테스트하지 않으면 복원된 데이터가 실제로 새로운 노출 경로가 됩니다.

해킹된 데이터의 가치를 줄입니다.
해킹된 데이터의 가치를 줄이는 것은 시간을 벌고 영향을 줄입니다. someone이 디스크 스냅샷, raw 백업 파일, 또는 내부 네트워크에서 트래픽을 가져오면 암호화된 데이터는 고객 기록으로 변환하기가 훨씬 더 어렵습니다.
암호화는 데이터베이스 파일, 스냅샷, 백업 아티팩트를 보호합니다. 연결된 애플리케이션 서버, 프록시, 데이터베이스 엔진 간의 연결은 TLS를 통해 보호됩니다. NIST는 SP 800-111 및 관련 데이터-아트-레스트 권장 사항에서 암호화 및 전송 보호를 다룹니다. SP 800-111 및 관련 데이터-아트-레스트 권장 사항에서 다룹니다..
암호화의 이점은 키 관리가 데이터 경로와 분리되어 유지되는 경우에만 있습니다. envelope 암호화는 빌딩 마스터 키와 잠금된 사무실 키가 같이 작동하는 것과 같습니다. 키 관리 서비스는 마스터 키를 보호하고, 마스터 키는 실제 레코드 또는 파일에 사용되는 짧은 수명 데이터 키를 암호화합니다. 이 설계는 키 재생산 시 노출을 최소화하고, 키 재생산 시 키 재생산을 쉽게 취소하거나 대체할 수 있도록 해줍니다.
팀들은 암호화를 활성화하고 그만둔 경우 문제를 일으킨다. 키가 어디에 저장되어 있는지, 누구에게 사용할 수 있는지, 키 버전이 갱신되는지, 그리고 잊혀진 키 버전이 여전히 이전 백업에 의존하는지 확인해야 한다.
접근 제어는 폭파 반경을 제한한다.
권한은 조직도에 따라 결정되는 것이 아니라 애플리케이션 경계를 따라야 한다.
체크아웃 API의 데이터베이스 역할은 급여 데이터를 읽을 수 없어야 한다. 배경 작업자는 이전 마이그레이션 시 편리했기 때문에 스키마 변경 권한이 있어야 할 필요가 없다. 지원 도구는 필터링된 뷰 또는 승인된 절차를 사용하여 넓은 테이블 접근 대신 사용해야 한다.
실용적인 모델은 다음과 같다:
- 웹 앱 역할: 사용자 요청에 뒤따르는 테이블에 대한 제한된 읽기 및 쓰기 접근 권한.
- 작업자 역할: 작업자가 실행하는 작업에 필요한 레코드에 대한 접근 권한.
- 분석 역할: 편집되지 않은 데이터 세트에 대한 읽기 전용 접근 권한. 가능한 경우 직접 식별자가 제거된 데이터 세트.
- 비상 사태 관리자 역할: 단기 승인된 접근 권한과 강력한 로깅 및 검토.
이 기둥은 데이터 변환과 함께 강화될 때 더 강해집니다. 팀이 마스크드 또는 축소된 데이터로 작업할 수 있다면, 전체 생산값 대신 그 버전을 제공하는 것이 좋습니다. 규제된 건강 데이터의 경우 PHI의 비식별화 유용한 접근과 불필요한 노출의 차이입니다.
__CAPGO_KEEP_0__ 키 보안을 위한 앱 스토어 준수 API 앱스토어 준수성을 위한 보안 키조사 결과가 제어의 실제 여부를 보여줍니다.
검증할 수 없는 정책은 단순히 희망입니다.
사고 시에 중요하다는 질문에 답하는 감사 기록입니다.
어떤 식별자가 레코드를 읽었는지, 어떤 역할이 권한을 변경했는지, 어떤 수출 작업이 데이터를 이동했는지, 어떤 키가 암호화된 아카이브를 해독했는지.
데이터베이스 저장에 대한 보안적인 감사Coverage는 일반적으로 다음과 같이 구성됩니다.
- 사용 가능한 감사 범위는 일반적으로 다음과 같습니다: 성공 로그인, 실패 로그인, 토큰 사용, 및 관리자 세션.
- 권한 변경: 권한 부여, 취소, 역할 생성, 정책 편집, 및 스키마 변경.
- Sensitive 접근 패턴: 대량 읽기, 큰 내보내기, 비정상적인 쿼리 경로, 및 예상 시간 또는 원본 네트워크 외부의 접근.
- 키 관리 이벤트: 키 생성, 회전, 암호화 실패 시도, 비활성화된 버전, 및 KMS 또는 비밀 저장소의 정책 변경.
보관 기간이 중요합니다. 또한 검토도 중요합니다. 로그가 만료되기 전에誰도 조사하지 못한 경우, 또는 이미 침해가 발생한 경우에만 권한 변경을 확인하는 경우, 감사 시스템은 이론적으로만 존재합니다.
implementation 세부 사항이 너무 추상적이 되기 전에 구현하기 전에 좋은 설명입니다:
민감한 데이터를 방어할 수 없는 곳에 저장하지 않도록 최소화합니다.
최소화는 많은 팀이 최소한의 엔지니어링 노력으로 가장 큰 보안 승리를 얻는 곳입니다.
더 적게 저장하세요. 보관 기간을 더 짧게 유지하세요. 복사본을 더 적게 만드세요. 특정 기능이 연령 범위만 필요하다면 생일 전체를 저장하지 마세요. 지원 팀이 마지막 네 자릿수만 필요하다면 전체 필드를 노출하지 마세요. 테스트 환경이 실제 개인 데이터가 필요하지 않다면, 생산 백업을 복원하지 마세요. 임시라고 부르더라도.
이것은 또한 운영 절차입니다. 보존 일정은 강제가 필요합니다. 이전 데이터는 삭제해야합니다. 다운스트림 시스템은 검색 색인, 캐시, 데이터 호수, 모바일 저장소 및 임의 CSV 파일에敏감한 field가 복제될 때마다 위험성이 증가하기 때문에 검토가 필요합니다. Capacitor 앱에 대해 @capgo/capacitor-데이터 저장소(SQLite) 그리고 @capgo/capacitor-빠른 SQL 암호화된 앱 측 영속성을 제공할 수 있지만 여전히 지역 저장소에 저장하지 않아야 하는 항목이 무엇인지 결정해야합니다.
이러한 기둥의 목적은 첫 번째 날에 완벽함이 아닌, 키 회전, 직원 변경, 사고 대응, 백업 복원 및 제품 성장과 같은 상황에서 보존할 수 있는 저장 시스템을 구축하는 것입니다. 보안 데이터베이스 저장은 성공하거나 실패하는 곳입니다.
암호화 구현 방법
암호화 패턴은 시스템마다 하나씩 없습니다. 올바른 선택은 무엇을 보호하고, 누구에게 쿼리할 수 있고, 팀이 지원할 수 있는 복잡성을 고려해야합니다. 실수는 가장 강력한 sounding 패턴을 선택하고 나서 그것을 나쁘게 구현하는 것입니다.

디스크 암호화는 가장 빠른 기본선입니다.
투명한 데이터 암호화, 또는 TDE,는 일반적으로 가장 쉬운 곳에서 시작할 수 있습니다. 데이터베이스 엔진은 디스크에 파일을 암호화하고 엔진이 파일을 메모리에 읽을 때 디스크에서 암호화된 파일을 해독합니다. 애플리케이션은 일반적으로 code 변경이 필요하지 않습니다.
이것은 다음과 같은 강력한 기준점입니다:
- 전체 데이터베이스 보호
- 저장소 수준의 준수 요구 사항
- 스톨린 디스크, 스냅샷 또는 raw 파일 접근으로부터의 위험을 줄이는
TDE는 모든 것을 보호하지 않습니다. 공격자가 유효한 데이터베이스 접근 권한을 얻으면 엔진은 여전히 암호화된 데이터를 제공합니다. 따라서 TDE는 저장소 위반이 아닌-legitimate 자격 증명이 허용된 경우의 오용에 도움이 됩니다.
응용 프로그램 수준의 암호화는 가장 중요한 필드를 보호합니다
응용 프로그램 수준의 암호화는 데이터가 데이터베이스에 도달하기 전에 발생합니다. code는 선택한 필드를 암호화하고 ciphertext를 저장소에 기록합니다. 특히 sensitive 열(예: 정부 ID, 은행 정보, 복구 비밀, 개인 노트 등)과 같은 경우 잘 작동합니다.
이 추가 제어는 다음과 같은 비용이 따릅니다:
- 더욱 복잡한 소유 키 선택, 암호화 라이브러리, 회전 동작 및 오류 처리
- 쿼리하기가 더 어렵습니다: 정확한 일치, 부분 검색 및 색인화가 디자인 문제가 됩니다.
- 개발자는 discipline이 필요합니다: 이동 스크립트에서 단 하나의 단축키만으로 모델 전체를 우회할 수 있습니다.
간단한 pseudocode 패턴은 다음과 같습니다:
| Step | Action |
|---|---|
| 1 | 요청에서 평문 field를 읽어라 |
| 2 | 키 서비스에서 데이터 암호화 키를 요청하거나 wrapped local key를 사용하라 |
| 3 | 데이터베이스 저장을 위한 암호화 |
| 4 | 애플리케이션에서 field를 암호화하라 |
| 5 | 암호문과 메타데이터를 데이터베이스에 저장하라 |
인증된 읽기 경로에서만 암호문을 해독하라 secure storage for offline tokens in Capacitor.
__CAPGO_KEEP_0__
__CAPGO_KEEP_1__
__CAPGO_KEEP_2__
__CAPGO_KEEP_3__
- __CAPGO_KEEP_4__ __CAPGO_KEEP_5__
- __CAPGO_KEEP_6__ __CAPGO_KEEP_7__
- __CAPGO_KEEP_8__ __CAPGO_KEEP_9__
- __CAPGO_KEEP_10__ __CAPGO_KEEP_11__
- 권한이 있는 읽기 중에만 풀어라.
데이터베이스 보안 저장소 장기 키를 모든 애플리케이션 서버에 노출하지 않고 강력한 격리화를 필요로 할 때 envelope 암호화를 사용하라.
이 패턴은 성능과 제어를 균형을 맞추기 때문에 일반적이다. 애플리케이션은 실제 암호화 작업에 짧은 수명 데이터 키를 사용하며, KMS 또는 HSM은 wrap 및 unwrap을 위해 사용하는 마스터 키를 보호한다.
암호화 패턴 비교
| 패턴 | implementation 복잡도 | 성능 영향 | 최적 |
|---|---|---|---|
| 디스크 또는 볼륨 암호화 | Low | Low | 서버 및 연결된 저장소에 대한 인프라 수준 보호 |
| 투명한 데이터 암호화 | 낮은 수준에서 중간 수준 | 낮은 수준에서 중간 수준 | 최소한의 앱 변경으로 전체 데이터베이스 보호 |
| 애플리케이션 수준 암호화 | 중간 수준에서 높은 수준 | 필드 사용 및 쿼리 디자인에 따라 다름 | 높은 수준의 민감한 열과 엄격한 분리 필요 |
| Envelope 암호화 | 중간 수준에서 높은 수준 | 중간 수준 | 보안 데이터 저장 |
실제 규칙은 간단합니다. TDE 또는 관리 중인 데이터 암호화와 같은 강력한 기본선을 시작하고, 데이터敏감성과 위협 모델이 추가 엔지니어링을 정당화하는 경우만 field-level 또는 envelope 암호화를 추가합니다.
마스터 키 및 비밀 관리
침해는 일반적인 비밀 처리 오류로 시작합니다. 프로덕션 데이터베이스가 암호화되어 있으며 백업이 존재하고, 접근이 종이로 제어되는 것처럼 보입니다. 그런 다음 CI 작업이 로그에 토큰을 출력하거나 엔지니어가 지원 스크립트에 관리자 자격을 재사용하거나 오래된 키가 팀이 생성한 후에 활성화된 지 오래된 키가 남아 있습니다.
이는 키 및 비밀 관리가 운영 관행이 아닌 설정 작업이 아니라는 것을 의미합니다.
잘못 관리된 키로 암호화된 데이터베이스는 서버 룸에 접근하는 키가 문에 걸려 있는 것과 같습니다. 정부 지침도 같은 점을 강조합니다. 암호화만으로는 KMS 또는 HSM 기반 키 관리, 최소 권한 접근, 복구 계획을 생략하는 팀이 있는 경우 격차를 닫을 수 없습니다. NSA와 파트너의 클라우드 데이터 보안 지침.
팀이 이것을 잘못하는 경우
잘못된 패턴은 사고 리뷰에서熟悉합니다:
- 소스 코드에 code: 고정된 자격증명, 임베디드 인증서 또는 점진적으로 프로덕션 의존성이되는 유틸리티 스크립트.
- 복사된 구성 파일에 비밀: 파일이 노트북 사이를 전송되거나, 공유 폴더에 저장되거나, 급히 고치기 위해 커밋되는 경우.
- 환경 변수: 제어가 약한 변수. 편리하지만, 빌드 로그, 셸 히스토리, 충돌 보고서, 또는 광범위한 런타임 권한을 통해 노출되는 경우.
- 회전에 대한 소유권이 없습니다. 키가 년을 넘게 존재하는 이유는 팀이 재발급, 배포, 롤백 계획을 갖고 있지 않기 때문입니다.
- 공유된 고등 권한의 비밀: 응용 프로그램, 엔지니어, 및 자동화에 사용되는 하나의 자격 증명으로, 감사 및 제한이 훨씬 더 어려워집니다.
애플리케이션 및 인프라 비밀을 저장하는 방법을 표준화하는 경우, 보안 환경 변수를 처리하는 데 도움이 되는 실용적인 참고 자료가 팀을 비정형 비밀 분산에서 멀어질 수 있도록 도와줍니다. 좋은 키 관리 방법은 무엇입니까? Use a
보안 키 관리를 위한
Use a KMS 중앙 집중식 정책, 접근 제어, 감사 로그, 및 예약된 회전이 사용자 정의 하드웨어 제어보다 더 중요할 때 사용하십시오. HSM 위험, 규정 준수 요구 사항, 또는 서명 및 키 보호 규칙이 전용 하드웨어 경계를 정당화할 때 사용하십시오. 많은 팀은 HSM을 어디서나 사용할 필요가 없습니다. 그들은 시스템이 암호 해독 작업을 요청할 수 있는 시스템, 정책을 변경할 수 있는 인간, 그리고 그 행동이 검토되는 방법에 대한 명확한 규칙이 필요합니다.
Envelope 암호화는 좋은 정신 모델입니다. 애플리케이션은 암호화 작업을 위해 짧은 수명 데이터 키를 처리합니다. 보관함 키는 KMS 또는 HSM에 머물며 접근이 엄격하게 제한됩니다.
실제 사고를 방지하는 제어가 작동합니다:
- 키를 일정한 스케줄로 회전할 수 있는 안전한 방법을 정의하십시오: 회전은 해킹된 키의 유용한 수명을 줄이지만, 애플리케이션, 작업, 및 복원 작업이 이후에도 작동하는지 확인하십시오.
- 책임을 분리하십시오: 고객 데이터를 읽는 서비스가 키 정책을 변경하거나 로깅을 비활성화할 수 없도록 하십시오.
- Sensitive 키 이벤트를 로깅하십시오: 키 생성, 회전, 암호 해독 요청, 실패한 접근 시도, 및 정책 변경이 모두 표시되도록 하십시오.
- 테스트 재 암호화 경로: .wrap핑 키를 회전하는 것은 일반적으로 애플리케이션 데이터를 재 암호화하는 것보다 더 쉬우나, 두 가지 모두 롤백 단계와 런북이 필요합니다.
- 기존 비밀을 의도적으로 비활성화하고 폐기하십시오: 이전 인증서를 제거하여 quiet backdoor가 될 수 없도록 하십시오. 시간을 두고 이전 인증서를 제거하여 quiet backdoor가 될 수 없도록 하십시오.
CI/CD는 프로덕션 런타임과 같은 discipline을 deserves합니다. 빌드 시스템은 넓은 접근 권한과 약한 가시성을 가지고 있기 때문에 비밀 누출의 일반적인 장소입니다. 이에 대해 진지하게 생각하는 팀은 CI/CD pipeline에서 비밀 관리를 formalize합니다. CI/CD pipeline에서 비밀 관리 pipeline 인증 정보를 임시 예외로 다루지 말고.
응용 프로그램은 code 신뢰할 수 있는 시스템에서 암호화 연산을 요청해야 하며, 환경에서 원시 마스터 키를 운반하지 않아야 한다.
강건한 백업 및 복구 전략 설계
데이터베이스 저장을 위한 탄력적인 백업 및 복구 전략 설계
Independent storage guidance는 백업 및 복구 시스템이 프로덕션과 같은 보호 수준을 유지해야 한다고 권장합니다. 랜섬웨어 및 악성 소프트웨어 공격으로 인해 안전하고 테스트된 백업이 유일한 복구 경로가 될 수 있기 때문입니다.
Independent storage guidance recommends keeping backup and recovery systems at the same protection level as production because ransomware and malware incidents often leave secure, tested backups as the only viable recovery path, according to 데이터 보안에 대한 Hypertec의 지침.
백업도 보안 경계를 필요로 합니다.
강건한 백업 설계는 몇 가지 특성을 가집니다:
- 백업은 전송 중 및 저장 중 암호화됩니다.
- 백업 자격 증명은 운영 자격 증명과 분리됩니다.
- 삭제 및 보존 제어는 일반 앱 접근보다 더 어렵습니다.
- 복원 대상은 약한 제어가 있는 그림자 운영 환경이 되지 않습니다.
일반적인 실패 모드는 암호화된 백업을 저장하는 것입니다. 그러나 동일한 손상된 운영 역할이 삭제를 허용합니다. 또 다른 것은 복원 시 임시 환경에 광범위한 엔지니어 접근과 로깅이 없는 환경으로 복원하는 것입니다. 복구 경로가 주 경로와 같은 심도 있는 검토를 deserve합니다.
복원 테스트가 진짜 제어입니다.
테스트되지 않은 백업은 단순히 희망적인 저장만입니다.
복구가 잘되는 팀은 단순히 백업 작업이 완료되었는지 확인하는 것이 아니라, 복원 작업이 작동하는지, 복원된 데이터가 사용 가능한지, 필요할 때 암호화 키, 연결 설정 및 종속 서비스가 모두 일치하는지 증명합니다.
실용적인 복원 프로그램에는:
- 정기적인 복원 훈련 분리된 환경으로
- 응용 프로그램 기능의 검증 데이터베이스 복구 후, 파일 복원만 하는 것이 아닌
- 키 사용 가능성을 확인 암호화된 백업이 복호화될 수 있도록
- 복원된 시스템에 대한 접근 검토 민감한 데이터가 사고 중에 널리 공개되는 것을 방지하기 위해
백업은 당신을 구하지 않습니다. 성공적인 복원은 당신을 구합니다.
백업 생성만 테스트하고 압박하에 복원 테스트를 하지 않는다면, 당신은 회복 전략을 검증하지 않았습니다. 파일이 누적되는 장소가 있다는 것을 검증했습니다.
데이터베이스 보안을 위한 개발자 체크리스트
이 체크리스트는 디자인 리뷰, 릴리스 리뷰, 사후 사고 정리 시 팀이 사용하길 원하는 것입니다.

디자인
- _sensitive field를 명확하게 식별했습니까?: 개인 데이터, 인증 자료, 금융 기록 및 보존 규칙에 따라야 하는 모든 항목
- 저장하지 않기로 결정한 항목이 있습니까?: 필요하지 않은 기능과 다운스트림 팀이 피할 수 있는 복사본
- Implementation 데이터가 저장소, 복제본 및 백업 경로에서 암호화되었습니까?:
데이터베이스, 복제본 및 백업 경로
- 서비스 역할과 애플리케이션 역할이 제한적으로 스코프되었습니다.: 역할과 권한이 제한적으로 스코프되었습니다.
- Are data access controls in place for sensitive fields?: 일반 앱 트래픽에 대한 공유 슈퍼 사용자 없음.
- 비밀 키와 암호화 키는 code 외부에서 관리되고 느슨한 구성으로 처리되나요? 관리 접근 및 감사성을 갖춘 제어된 접근으로 처리됩니다.
- _sensitive한_접근 및 권한 변경을 로깅하는지 central_위치에서 defender가 쿼리할 수 있는지 확인합니다. 운영
Operations
- 연간 대란이 아닌 정상적인 운영의 일부입니다. 정기적으로 복원 테스트를 수행하는지 확인합니다.
- 복원 시스템에서 복원, 응용 프로그램 시작 및 접근 검토를 포함하여. 데이터 스퍼를 지속적으로 감사하는지 확인합니다.
- 개발 데이터 세트, 지원 수출, 스테이징 복사본 및 잊혀진 백업 위치를 포함하여. 운영
안전한 데이터베이스 저장은 프로젝트 단계가 아니며, 반복적인 실천입니다.
자주 묻는 질문
클라우드 제공업체의 기본 암호화가 충분한가요?
기본 암호화는 저장 매체와 관리 서비스를 보호하는 강력한 기준선입니다. 그러나 권한이 과도한 접근, 복사된 데이터 세트, 약한 백업 제어, 또는 나쁜 키 관리를 해결하지는 않습니다.
암호화가 데이터베이스 성능에 영향을 미치는가요?
때때로 그렇습니다. 영향의 정도는 패턴에 따라 다릅니다. 인프라 및 데이터베이스 수준 암호화는 일반적으로 더 적은 애플리케이션 복잡성을 가지고 있습니다. field-level 암호화는 선택된 데이터에 대한 더 강력한 제어를 제공하지만 인덱싱, 필터링 및 검색을 복잡하게 만들 수 있습니다. 워크로드에 대한 측정 전에 광범위한 배포를 시작하지 마십시오.
SQL 및 NoSQL 시스템의 경우 이게 다르나요?
원칙은 동일합니다. 암호화, 최소 권한, 감사, 키 관리, 테스트된 복원과 같은 필요성이 여전히 있습니다. 구현 세부 사항은 문서 저장소, 키-값 저장소 및 관계형 시스템이 다른 접근 모델과 쿼리 동작을 노출하기 때문입니다.
토큰화가 암호화와 어떻게 다른가요?
암호화는 권한이 있는 시스템이 올바른 키로 복호화할 수 있도록 데이터를 변환합니다. 토큰화는 민감한 값을 대체 값으로 대체하고 원본 데이터를 분리합니다. 토큰화는 앱 워크플로우에서 노출을 줄일 수 있지만 시스템 설계 복잡성을 추가하고 강력한 저장 제어가 필요하지 않습니다.
Capgo은 Capacitor 및 Electron 앱에 대한 고속 수정 배포를 지원하며, 서명된 웹 번들 전송, 롤아웃 제어, 롤백 보호 및 릴리스 관찰성을 제공합니다. Storage, 인증 또는 API 오류로 인한 클라이언트 측 수정을 빠르게 배포해야 하는 경우, Capgo을 평가하는 것이 운영 Recovery의 일부로 중요합니다. Capgo __CAPGO_KEEP_0__은 빠른 클라이언트 측 수정 배포를 지원하며, 서명된 웹 번들 전송, 롤아웃 제어, 롤백 보호 및 릴리스 관찰성을 제공합니다.