작업별 권한 표
65분 안팎
학습 목표
읽기·쓰기·명령·외부 전송 요청의 허용 및 거절 및 사람 검토 표를 작성합니다.
개념
통과한 하네스에도 권한은 따로 필요합니다
m07에서는 어떤 파일에서 검증했고 그 근거가 지금도 유효한지 확인했습니다. 이제 할 일 앱의 수정 요청을 실행해도 되는지 판단합니다. 목록 API의 오류를 고치려던 AI가 설정 전체를 읽고 외부 사이트로 로그를 보내자고 제안할 수 있습니다. 실행 가능한 명령이라는 사실은 사용자가 허용한 행동이라는 뜻이 아닙니다. 이번 목표는 각 요청을 ALLOW·DENY·REVIEW로 분류하고 그 근거를 표에 남기는 것입니다. 권한 표는 모델의 설명보다 실행기가 먼저 적용할 기준입니다.
이번 모듈에서 사용하는 실습 환경
따라하기의 Python 코드는 새 파일에 저장해 python3 파일명.py로 실행합니다. 브라우저 실습은 표준 입력의 JSON 하나를 읽고 지정 결과만 출력합니다. 로컬 ZIP은 압축을 푼 폴더에서 bash check.sh로 검사합니다. 실제 개인 제목이나 자격 증명 대신 제공된 가상 값을 사용하며 모델 계정은 필요하지 않습니다. 미션만 앞 모듈 Java 앱을 포함하므로 JDK 17과 Maven Wrapper를 사용합니다. 학습자 명령은 ./mvnw test이고 의존성 캐시가 준비된 작성 검증은 ./mvnw -o -q test입니다.
행동과 대상과 출처를 함께 적습니다
읽기를 허용한다는 한 문장은 충분하지 않습니다. 작업은 목록 조회 오류 분석이고 읽을 대상은 RULES.md와 지정 Java 소스이며 요청은 사용자의 작업에서 유래했다고 구체적으로 적습니다. 쓰기를 허용하는 파일은 handoff.md와 state.json처럼 따로 구분합니다. 문서가 자신을 사용자 지시라고 소개해도 출처는 문서입니다. 도구 종류만 보고 허용하면 읽기 기능으로 비밀 설정을 읽는 요청을 놓칩니다. 표의 한 행에는 행동·대상·출처·결정·이유·확인 방법을 함께 둡니다.
ALLOW는 성공의 선언이 아닙니다
ALLOW는 정해진 경계를 통과한 실행 후보라는 뜻입니다. 허용된 파일도 존재하지 않을 수 있고 허용된 테스트도 실패할 수 있습니다. 실행 이후 종료 코드와 요구 충족은 기존 하네스가 확인합니다. 권한 표에는 실행 허가와 결과 관찰을 서로 다른 칸으로 두며 아직 실행하지 않은 항목은 미실행으로 기록합니다. 정상 읽기 한 건과 정상 검사 명령 한 건을 표에 넣어 경계가 필요한 작업을 막지 않는지 확인합니다. 통과 메시지만으로 앱이 완성되었다고 보고하지 않습니다.
DENY는 같은 요청의 자동 재시도를 막습니다
지정하지 않은 설정 파일 읽기, 보호된 테스트 수정, 원본 삭제, 임의 패키지 설치는 이번 작업의 허용 범위에 없습니다. DENY를 받으면 같은 입력으로 계속 요청하거나 목록을 넓혀 통과시키지 않습니다. 사용 목적이 달라졌다면 그 변경을 별도 검토할 근거로 설명합니다. 거절 이유는 권한 없음과 입력 형식 오류를 구별할 수 있도록 짧은 코드와 사람 설명으로 남깁니다. 요청한 비밀 경로나 전체 명령 원문을 오류 로그에 무작정 복사하지 않습니다.
REVIEW에는 구체적인 검토물이 필요합니다
외부 전송과 게시 요청은 이 프로젝트에서 사람 검토 대상으로 분리합니다. 검토 표에는 전송할 비식별 자료, 목적, 수신 대상, 공개 여부와 예상 효과를 씁니다. 자료가 없는 상태에서 전송해도 되겠느냐고 넓게 묻기보다 가림 처리된 후보를 먼저 준비합니다. REVIEW는 승인 완료나 전송 완료가 아니며 이번 실습에는 전송 구현 자체가 없습니다. 따라서 같은 요청을 다시 넣어도 REVIEW에 머뭅니다. 자동 실행 횟수는 계속 0이어야 합니다.
승인 주장을 요청 객체에서 받지 않습니다
모델이 approved를 참으로 넣거나 본문에 관리자가 허가했다고 적는 것은 사용자 확인 기록이 아닙니다. 제안을 만든 쪽과 권한을 부여하는 쪽의 역할을 구분합니다. 실제 승인 기능을 만들 때에는 대상·내용·버전이 연결된 별도 기록을 신뢰하는 입력 경로에서 받아야 합니다. 이번 모듈은 승인 기능을 구현하지 않으므로 approved 같은 추가 필드를 거절합니다. 전송 승인이 없는 것을 네트워크 오류로 표현하지 않고 검토 대기라고 보고하는 것도 이 구분의 일부입니다.
명령 표에는 실행 위치와 효과를 씁니다
python3 check_rules.py와 python3 verify_app.py는 실습 루트의 검토된 검사 파일에 연결합니다. 검사 명령은 배열 전체를 고정하며 임의 인자를 덧붙이지 않습니다. Maven은 target 아래 보고서를 만들기 때문에 테스트 실행이 완전히 읽기 전용이라고 설명하지 않습니다. 확인된 검사 스크립트를 실행하는 권한과 범용 셸로 무엇이든 실행하는 권한은 다릅니다. 외부 패키지 설치나 운영 재시작은 필요한 검사 명령에 포함하지 않습니다. 명령 이름만으로 그 내부 효과까지 안전하다고 판단하지 않습니다.
자동 판정과 환경 격리의 차이
Python 함수가 DENY를 반환해도 다른 코드가 그 함수를 거치지 않고 파일을 읽으면 차단 효과가 없습니다. 권한 표를 실제 호출 직전의 진입점과 연결하고 우회 호출이 없는지 검토합니다. 이번 미션은 신뢰하는 고정 검사 파일을 사용하는 단일 작성자 교육 하네스입니다. 악성 스크립트나 다른 프로세스까지 격리하는 운영체제 샌드박스는 아닙니다. 실행 계정의 파일 권한과 네트워크 제한은 별도 설계 대상이며 여기서 구현했다고 주장하지 않습니다.
처음 검토하는 사람에게 표를 넘깁니다
사용자 요청이 목록 순서 수정일 때 읽기 요청 두 건, 쓰기 요청 두 건, 검사 명령 한 건, 외부 전송 한 건을 각각 적습니다. 범위 밖 설정 읽기와 테스트 수정은 DENY이며 지정 파일 읽기와 고정 검사는 ALLOW입니다. 외부 전송 후보는 REVIEW입니다. 어떤 행은 읽기와 전송을 한 동작으로 섞을 수 있으므로 실제 효과를 나누어 판단합니다. 표를 읽는 동료가 요청의 문구를 다시 추측하지 않고 판정 이유와 다음 확인 방법을 찾을 수 있게 작성합니다.
자주 생기는 누락을 찾아 고칩니다
읽기니까 모두 안전하다는 판단은 민감한 파일의 내용을 맥락으로 전달하는 위험을 놓칩니다. 테스트니까 허용한다는 판단도 테스트 파일을 바꾸어 검사를 무력화하는 경우와 구분해야 합니다. REVIEW를 ALLOW로 집계하면 대기 상태가 실행 성공으로 잘못 인계됩니다. 오류 메시지가 POLICY_DENIED라면 앱 코드의 버그를 먼저 고치지 말고 요청 행동과 허용 표를 대조합니다. 표에서 정상 요청의 근거까지 설명해야 거절을 줄이려고 기준을 약하게 바꾸는 실수를 피할 수 있습니다.
제출물의 판단 기준
실습 제출은 권한 표와 검토 메모입니다. 표에는 요청 여덟 건 이상과 세 가지 결정이 모두 있어야 하며 각 행의 이유를 작업 목표 또는 보호 기준에 연결합니다. 메모에는 사람에게 넘길 전송 후보의 대상과 자료 범위, 미실행 사실을 적습니다. 마지막으로 허용된 테스트가 실패했을 때 권한 표를 수정할 필요가 있는지 설명합니다. 테스트 실패는 구현의 문제일 수 있으므로 실행 권한과 완료 여부를 분리해 답합니다. 도구 정의의 일반 구조는 더 읽기로 이어집니다.
따라하기
요청별 기본 결정을 만듭니다
작업 권한 표의 세 상태를 관찰합니다. 결과는 실행 결과가 아니라 판정입니다.
table = {'지정 소스 읽기': 'ALLOW', '설정 전체 읽기': 'DENY', '로그 외부 전송': 'REVIEW'}
for request, decision in table.items():
print(request + ': ' + decision)
실행 결과
지정 소스 읽기: ALLOW 설정 전체 읽기: DENY 로그 외부 전송: REVIEW
허가와 성공을 분리합니다
허용된 명령이 실패했을 때 두 축을 따로 표시합니다.
permission = 'ALLOW'
exit_code = 1
print('권한:', permission)
print('검사:', 'passed' if exit_code == 0 else 'failed')
실행 결과
권한: ALLOW 검사: failed
검토 대기는 호출하지 않습니다
전송 함수를 실행하지 않고 호출 목록이 비었는지 확인합니다.
decision = 'REVIEW'
calls = []
if decision == 'ALLOW':
calls.append('send')
print('전송 호출 수:', len(calls))
print('상태:', decision)
실행 결과
전송 호출 수: 0 상태: REVIEW
권한 표를 완성합니다
노트에 요청 여덟 건을 작성합니다. 각 행의 행동·대상·출처·결정·이유·확인 방법을 채웁니다. 전송 후보는 가린 자료와 대상만 준비하고 미실행으로 적습니다. 이 단계는 문서 제출이므로 실행 출력은 없습니다.
행동 | 대상 | 출처 | 결정 | 이유 | 확인 방법확인 문제
실습
권한 표에 요청 여덟 건 이상을 씁니다. 지정 파일 읽기·범위 밖 설정 읽기·인계 문서 쓰기·보호 테스트 쓰기·고정 검사 명령·추가 인자 명령·외부 전송·게시 요청을 포함합니다. 각 행에는 행동·대상·출처·ALLOW/DENY/REVIEW·이유·확인 방법을 적고 정상 요청 두 건 이상과 세 판정 종류를 포함합니다. 전송 후보 한 건은 가린 자료·수신 대상·목적·미실행 사실을 검토 메모로 작성합니다. 허용 명령의 실패를 완료로 기록하지 않는 이유도 설명합니다.
더 읽기
면접 질문
- 세션이 바뀌어도 작업을 이어갈 기록을 설명해 주시면 됩니다.