권한 부여 (Authorization)
영향을 받는 모든 접근 결정을 명시적으로 만들고, 실제 경계에서 이를 강제하며 허용 및 거부 동작을 모두 증명하세요. 요청된 흐름 내에서 작업하세요. 이 스킬을 로드한다고 해서 전체 애플리케이션 감사가 시작되는 것은 아닙니다. 새로운 프레임워크를 도입하기 전에 기존의 신원, 정책 및 도메인 소유자를 사용하세요.
정책 정의
승인된 제품 결정과 실제 호출자를 읽으세요. 변경된 흐름에 대해 작은 정책 매트릭스를 기록하세요: 주체, 작업, 리소스, 해당 관계/범위/상태, 허용된 입력/출력 필드 및 결과. 실제 필요에 따라 역할, 속성, 소유권 또는 기능을 사용하세요. 역할만으로는 특정 레코드에 대한 접근이 설정되지 않을 수 있습니다. 읽기, 쓰기, 내보내기, 공유 및 관리 권한을 의도적으로 다르게 유지하세요.
신원 인증과 행위 권한을 분리하세요. 신원과 권한은 신뢰할 수 있는 세션, 토큰 또는 서비스 컨텍스트에서 얻으세요. 요청 ID, 테넌트 선택기, 역할 필드 및 UI 상태는 요청을 선택하거나 설명할 뿐이며, 권한을 부여하지 않습니다. 익명/공개 접근은 명시적으로 허용되거나 기능 범위 내에서 허용될 수 있습니다. 누락된 신원이나 범위가 자동으로 전역/시스템 권한이 되어서는 안 됩니다. 권한 있는 운영자와 가장(impersonation)은 명시적이고 귀속 가능하게 유지하세요.
일치하지 않는 접근은 기본적으로 거부하고, 승인된 정책을 충족하는 최소 권한을 사용하세요. 결정되지 않은 비즈니스 권한은 제품의 문제이지, 관대한 기본값을 발명하라는 초대가 아닙니다. 해당 선택이 해결되지 않은 상태에서 독립적인 작업을 계속하세요. 의도적으로 로컬이며 공유되지 않는 데모를 실제 보호 데이터를 노출하는 서비스와 구별하세요.
모든 영향을 받는 접근 경로 찾기
영향을 받는 리소스를 실제 진입점과 소유자를 따라가세요. 관련 웹/모바일 API, 서버 렌더링 로더, 액션, 임포트, 배치 작업, 작업 및 통합을 포함하세요. 동일한 보호된 사실을 노출하는 검색/카운트/내보내기, 파일, 캐시 및 구독을 검사하세요. 해당 경로 또는 기능, 위임 및 철회에 대해서는 접근 표면을 읽고 해당 섹션을 선택하세요.
정책 소유자와 강제 지점을 명명하세요. 데이터나 효과가 신뢰 경계를 넘는 모든 곳에서 규칙의 의미를 중앙 집중화하면서 강제하세요. 미들웨어 로그인 검사, UI 가드, UUID 또는 이전의 성공적인 읽기만으로는 충분하지 않습니다. 프레임워크 정책, 데이터베이스 정책 또는 범위가 지정된 소유자가 작동할 수 있습니다. 우회 경로를 포함한다고 가정하지 말고 실제 구성과 런타임 자격 증명을 확인하세요.
결정 강제
읽기의 경우, 결과가 신뢰 경계를 떠나기 전에 권한 있는 리소스 집합을 제한하고 반환되는 필드를 제한하세요. 관련 객체 및 대체 표현에 동등한 정책을 적용하세요. 누락된 리소스와 금지된 리소스에 대해 제품의 공개 정책을 사용하세요. 오류, 개수 및 직렬화된 속성도 보호된 사실을 드러낼 수 있습니다.
변경의 경우, 사용자가 제공한 외래 키와 보호된 필드를 포함하여 작업, 대상 및 결과 관계의 유효성을 검사하세요. 전체 요청을 지속 가능한 엔터티에 바인딩하는 대신 허용된 입력 필드를 사용하세요. 접근 가능한 인터리빙(interleaving)이 권한을 무효화할 수 있는 경우, 저장소의 적절한 원자적 가드 또는 직렬화를 사용하여 효과 시점에 범위, 멤버십 또는 상태를 강제하세요. 연결된 하위 항목과 부작용도 동일한 승인을 따릅니다. 기존의 완전한 소유자를 유지하고, 권한 검사를 삽입하기 위해 다른 비즈니스 작성자를 추가하지 마세요.
권한이 평가되는 시점과 변경이 적용되는 시점을 정의하세요. 현재 접근, 변경 불가능한 과거 귀속 및 이전에 수락된 지속적인 의무는 서로 다른 계약입니다. 재생, 지연된 전달 및 위임된 작업은 명시적인 권한/수명이 필요합니다. 오래된 사용자 클레임이나 일반 시스템 ID로는 이 질문에 답할 수 없습니다. 유효한 의무를 조용히 취소하거나 대상을 확장하지 않고 해당 계약에 따라 철회 및 복구를 적용하세요.
경계 증명
정책 매트릭스에서 작은 차별화된 테스트 세트를 도출하세요. 실제 소유자와 관련 마운트된 경계를 통해 유효한 행위자가 작업을 완료하고 의미 있는 거부를 보여주세요: 동일한 테넌트의 다른 소유자, 다른 테넌트, 더 약한 역할, 익명/잘못된 기능 또는 해당되는 경우 변경된 권한. 실제 대상 레코드와 명시적인 미끼(decoy)를 사용하고, 보호된 필드, 변경되지 않은 지속적인 효과 및 관련 없는 레코드를 단언하세요. 모든 이론적 조합을 반복하는 대신 관련 사례를 선택하세요.
true 또는 false를 반환하는 모의(mocked) 정책은 결정이나 쿼리/쓰기 제한을 증명하지 않습니다. 실제 런타임 권한으로 실제 조건자(predicate) 또는 저장소 정책을 테스트하세요. UI 접근 클레임의 경우, 버튼 가시성과 독립적으로 직접 요청을 확인하세요. 다른 사람의 신원이나 공유/라이브 데이터를 조사하지 말고 격리된 권한 있는 픽스처를 사용하세요. 정적 발견 사항, 제안된 검사, 실행된 테스트 및 배포 정책 격차를 분리하세요.
정책, 권위 있는 소스, 영향을 받는 경로, 강제 및 증명, 그리고 해결되지 않은 제품 선택 또는 외부 구성을 전달하세요. 통과한 검사는 해당 경로로 제한됩니다. 이 절차는 애플리케이션의 전체 보안을 인증하지 않습니다.