포털에 필요한 접근만 부여

사이버 보안Beginner
지금 연습하기

소개

이 새 환경에서는 익명 유출이 차단되었지만 포털은 여전히 스토리지 관리자 자격 증명을 사용합니다. 지정 명세서 읽기보다 훨씬 많은 일을 할 수 있습니다. 전용 ID를 만들고 필요한 객체 읽기만 허용한 후 애플리케이션을 전환합니다.

계정과 정책 변경에는 Storage Admin, 애플리케이션의 비공개 자격 증명 파일에는 Portal App, 실제 애플리케이션 요청에는 Document Portal을 사용합니다. 합성 환경은 내장 사용자 주체를 사용하는 로컬 VersityGW 1.10.0에서 실행되며 전체 AWS IAM은 아닙니다. 이전 실습과 독립적으로 시작합니다.

전용 포털 ID 생성

이 단계에서는 관리자에 대한 의존을 별도 애플리케이션 ID로 교체합니다.

이 단계를 시작하려면 실습 인터페이스에서 Document Portal 탭을 선택합니다.

Document Portal 탭으로 전환하고 Open assigned document를 클릭하여 Identity: storage-admin을 확인합니다. 명세서는 정상적으로 표시되지만 관리자 권한은 필요하지 않습니다. ID는 호출자를 식별하고 비밀 키는 클라이언트가 해당 ID를 입증하는 요청에 서명하도록 합니다. 인증은 호출자를 입증하며 인가는 호출자가 무엇을 할 수 있는지 결정합니다.

Storage Admin 탭으로 전환합니다. 이 VM의 관리자 자격 증명을 불러옵니다.

다음 명령을 실행하기 전에 Storage Admin 탭으로 전환합니다.

source admin.env

VersityGW에는 관리 클라이언트가 포함되어 있습니다. -a는 액세스 키 이름, -s는 비밀 값, -er은 엔드포인트를 선택합니다. create-user 앞의 옵션은 관리자를 식별하고 뒤의 옵션은 새 계정을 정의합니다. user 역할에는 관리자 우회 권한이 없습니다. 합성 계정을 만듭니다.

/opt/c14/versitygw admin -a storage-admin -s storage-admin-secret -er http://127.0.0.1:7070 create-user -a portal-reader -s portal-reader-secret -r user

성공하면 오류가 없습니다. 반복 명령으로 계정이 이미 존재한다면 기존 계정을 계속 사용합니다. admin을 부여하거나 버킷 소유자로 만들지 마세요. 해당 권한은 의도한 좁은 정책을 우회합니다.

공개 도움말로 인증을 테스트합니다. 앞의 변수 대입은 이 명령에만 사용할 자격 증명을 선택합니다.

AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key public/help.txt help.txt

객체 메타데이터는 인증된 요청을 확인해 줍니다. 공개 도움말은 모두에게 허용되므로 내부 명세서 읽기가 허용되었다는 뜻은 아닙니다. InvalidAccessKeyId는 사용자가 없음을, SignatureDoesNotMatch는 비밀 값이 틀렸음을 나타내며 둘 다 인가 결과가 아닙니다.

필요한 접두사 읽기만 허용

이 단계에서는 쓰기나 무관한 읽기 권한 없이 전용 ID를 인가합니다.

이 단계를 시작하려면 실습 인터페이스에서 Storage Admin 탭을 선택합니다.

포털에는 portal/statement.txt가 필요하며 허용 영역은 portal/입니다. 접두사는 객체 키의 시작 부분과 일치합니다. portal/*는 finance/budget.txt를 포함하지 않습니다. 읽기는 s3:GetObject, 업로드와 삭제는 s3:PutObject 및 s3:DeleteObject를 사용합니다. 모든 작업을 포함하는 s3:*는 피하세요.

Storage Admin에서 적용 정책을 읽습니다.

다음 명령을 실행하기 전에 Storage Admin 탭으로 전환합니다.

aws --endpoint-url http://127.0.0.1:7070 s3api get-bucket-policy --bucket documents --query Policy --output text

공개 도움말 허용만 존재합니다. 로컬 사본을 엽니다.

nano policy.json

아래의 완전한 JSON으로 바꿉니다. 공개 문은 유지하고 지정 읽기 ID를 위한 별도 허용을 추가합니다. VersityGW 내장 주체는 사용자 이름이며 AWS 주체 형식과 다릅니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {"Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::documents/public/*"},
    {"Effect": "Allow", "Principal": "portal-reader", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::documents/portal/*"}
  ]
}

nano에서 Ctrl+O, Enter로 저장하고 Ctrl+X로 종료합니다. file://로 파일을 적용합니다.

aws --endpoint-url http://127.0.0.1:7070 s3api put-bucket-policy --bucket documents --policy file://policy.json

출력이 없으면 성공입니다. 구문 오류가 있으면 이전 적용 정책이 유지됩니다. 필요하면 수정 후 재적용합니다. 허용된 읽기를 테스트합니다.

AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key portal/statement.txt statement.txt

이제 무관한 읽기를 테스트합니다. 예상되는 AccessDenied는 의도한 결과이므로 이후에도 계속합니다.

AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key finance/budget.txt budget.txt

체크포인트는 일회용 동등 스토리지에서 실제 쓰기와 삭제도 테스트하여 실제 문서를 보존합니다. 유효하지 않은 ID는 읽기 양성 대조 검사에서 실패하므로 잘못된 로그인으로 최소 권한을 흉내 낼 수 없습니다.

애플리케이션 자격 증명 전환

이 단계에서는 실제 포털이 전용 ID를 사용하게 합니다.

이 단계를 시작하려면 실습 인터페이스에서 Portal App 탭을 선택합니다.

Portal App 탭으로 전환합니다. 이 별도 로컬 계정은 Storage Admin 셸의 자격 증명 없이 비공개 애플리케이션 설정을 소유합니다. 현재 파일을 읽습니다.

다음 명령을 실행하기 전에 Portal App 탭으로 전환합니다.

cat credentials.json

현재 access_key와 secret_key 필드는 storage-admin을 나타냅니다. 파일을 편집합니다.

nano credentials.json

전용 합성 자격 증명을 사용합니다.

{
  "access_key": "portal-reader",
  "secret_key": "portal-reader-secret"
}

Ctrl+O, Enter로 저장하고 Ctrl+X로 종료합니다. 포털은 요청마다 파일을 읽으므로 재시작이 필요 없습니다. Document Portal 탭으로 돌아가 Open assigned document를 클릭하거나 새로 고칩니다. Identity: portal-reader와 원래 명세서가 나와야 합니다. 포털이 읽을 수 없다고 하면 JSON이나 자격 증명을 수정한 후 Storage Admin에서 정책을 확인합니다.

전용 portal-reader ID를 사용하는 Document Portal

마지막으로 Storage Admin 탭으로 전환합니다. 익명 내부 요청과 공개 도움말을 테스트합니다. -sS는 진행률 없이 오류를 표시하고 -w는 응답 코드를 추가합니다.

다음 명령을 실행하기 전에 Storage Admin 탭으로 전환합니다.

curl -sS -w '\nHTTP %{http_code}\n' http://127.0.0.1:7070/documents/portal/statement.txt

AccessDenied와 HTTP 403이 나와야 합니다.

curl -sS http://127.0.0.1:7070/documents/public/help.txt

원래 도움말 텍스트가 나와야 합니다. 애플리케이션 ID와 익명 접근은 별도 경계이며 한쪽을 보호해도 다른 쪽이 자동으로 보호되지는 않습니다.

요약

일반 애플리케이션 ID를 만들고 필요한 접두사의 읽기만 허용했으며 정상 포털을 관리자 자격 증명에서 분리했습니다. 인증, 인가, 공개 접근, 애플리케이션 가용성을 따로 검증했습니다.