임시 링크로 비공개 파일 공유하기

AWSBeginner
지금 연습하기

소개

동료가 비공개 보고서를 임시로 다운로드해야 합니다. 서명된 링크를 생성하고 테스트하며 접근 제한을 확인한 뒤 파일을 공개하지 않고 연습용 리소스를 정리합니다.

먼저 키와 메타데이터로 문서 정리하기에서 키, 다운로드, 정리를 익히세요. 새 VM에 비공개 버킷과 제한된 신원이 준비되어 있으므로 개인 로그인이나 IAM 정책 작성은 필요하지 않습니다. Terminal과 옆의 AWS View 탭을 사용하세요. 전체 다운로드 링크는 비공개로 유지하세요.

인증 시험 관련 주제

이 실습은 다음 시험 주제에 대한 실습 경험을 제공합니다.

설정된 신원으로 보고서 읽기

이 단계에서는 허용된 보고서를 검색하고 다른 비공개 객체는 자신의 신원에 허용된 권한 밖에 있음을 확인합니다.

권한은 신원이 리소스에 대해 할 수 있는 작업을 정의합니다. 준비된 읽기 전용 신원은 이 버킷을 나열하고 shared/report.txt를 읽을 수 있지만 private/payroll.txt를 읽거나 스토리지를 변경할 수는 없습니다. 정책을 작성하지 않고 이 권한을 사용합니다. 정책 작성은 이후 IAM 과정에서 배웁니다.

cd(디렉터리 변경)로 작업 공간으로 이동하세요.

cd /home/labex/project

준비된 버킷의 공유 접두사를 나열하세요.

aws s3 ls s3://labex-private-documents/shared/

목록에는 report.txt로 끝나는 행이 있습니다. 이 접두사 아래에서는 완전한 키 shared/report.txt를 가리킵니다. 접두사는 키를 정리할 뿐 이름 때문에 객체가 공개되는 것은 아닙니다. 설정된 신원에 버킷 나열이 허용되어 있으므로 AWS CLI 요청이 성공합니다.

인증된 AWS CLI 요청으로 보고서를 다운로드하세요.

aws s3 cp s3://labex-private-documents/shared/report.txt authorized-report.txt

로컬 텍스트 파일을 출력하는 cat으로 이 합성 보고서를 확인하세요.

cat authorized-report.txt
Monthly report: 42000 revenue

AWS View에서 shared/report.txt를 여세요. 미리 보기는 읽기 전용 신원에 허용된 접근으로 같은 저장된 내용을 보여 줍니다.

예시: 읽기 전용 신원은 공유 보고서를 미리 볼 수 있습니다.

이 예시는 설정된 읽기 전용 신원이 보고서에 접근할 수 있음을 보여 줍니다. 다음 단계의 다운로드 명령은 임시 링크 자체를 확인합니다.

별도의 급여 객체를 읽어 보세요.

aws s3 cp s3://labex-private-documents/private/payroll.txt denied-payroll.txt

이 명령은 예상대로 실패하며 403 또는 AccessDenied 오류가 발생합니다. 객체는 존재하지만 이 읽기 전용 신원에는 검색이 허용되지 않습니다. 신원이 보고서 하나에 접근할 수 있다고 해서 버킷의 모든 객체에 접근할 수 있는 것은 아닙니다. 허용된 보고서만 공유합니다.

임시 다운로드 링크 생성하고 사용하기

이 단계에서는 서명된 링크를 생성하고 수신 요청에 AWS 신원을 사용하는 대신 HTTP 클라이언트로 보고서를 다운로드합니다.

임시 링크는 시간 제한이 끝날 때까지 허용된 다운로드를 가능하게 합니다.

임시 다운로드 링크

**사전 서명된 URL(presigned URL)**은 서명과 만료 시간이 담긴 링크입니다. 수신자는 AWS 자격 증명을 받지 않고 허용된 다운로드를 수행할 수 있습니다. 링크 파일은 제한된 권한으로 준비되어 있습니다. 전체 내용은 비공개로 유지하세요.

aws s3 presign은 지정한 객체의 다운로드를 승인하는 URL을 생성합니다. --expires-in은 요청한 유효 시간을 초 단위로 설정합니다. 600은 생성 시점부터 10분을 뜻합니다. 객체의 접근 권한을 변경하지는 않습니다. 셸의 >는 전체 링크를 표시하는 대신 이미 보호된 로컬 파일에 출력을 기록합니다.

aws s3 presign s3://labex-private-documents/shared/report.txt --expires-in 600 > download-link.txt

출력이 파일에 기록되므로 명령은 아무것도 출력하지 않습니다. URL을 가진 누구나 유효한 동안 위임된 접근을 사용할 수 있으므로 전체 링크를 스크린샷이나 공개 메시지에 넣지 마세요.

출력하지 않고 링크를 셸 변수로 읽으세요. $(...)는 명령 출력을 캡처하고 cat은 파일을 읽으며 DOWNLOAD_URL=...은 캡처한 텍스트를 할당합니다. 할당의 = 주위에는 공백이 없습니다.

DOWNLOAD_URL=$(cat download-link.txt)

curl은 HTTP 요청을 보냅니다. -f는 HTTP 오류 응답을 실패로 처리하고 -sS는 오류 메시지를 유지하면서 진행률 표시를 숨기며 -o는 응답 본문을 로컬 파일에 기록합니다. 큰따옴표는 쿼리 파라미터를 포함한 전체 URL을 하나의 인수로 유지합니다.

curl -fsS "$DOWNLOAD_URL" -o shared-download.txt

Curl에는 AWS 자격 증명이나 프로필을 전달하지 않습니다. URL 자체가 다운로드에 필요한 서명을 담고 있습니다. 결과를 읽으세요.

cat shared-download.txt
Monthly report: 42000 revenue

cmp는 두 파일을 바이트 단위로 비교합니다. &&는 비교가 성공했을 때만 메시지를 출력합니다.

cmp authorized-report.txt shared-download.txt && echo 'Temporary-link download matches'

메시지는 HTTP 다운로드에 같은 보고서가 포함되어 있음을 확인합니다. 링크를 생성하는 것만으로는 작동함을 증명할 수 없습니다. 이 요청은 실제 권한, 서명, 저장된 바이트를 테스트합니다. 다운로드하기 전에 10분 이상 지났다면 위의 두 명령으로 새 링크를 생성하고 변수를 다시 로드하세요.

링크 만료 시점 확인하기

이 단계에서는 공유 링크의 시간 제한을 관찰합니다. 10분 링크는 다운로드 성공 테스트에 유용했습니다. 별도의 짧은 링크는 만료를 빠르게 관찰할 수 있게 합니다.

일부러 15초로 짧게 설정한 다른 링크를 생성하여 두 번째 보호된 파일에 저장하세요.

aws s3 presign s3://labex-private-documents/shared/report.txt --expires-in 15 > short-link.txt

표시하지 않고 캡처하세요.

SHORT_URL=$(cat short-link.txt)

sleep은 지정한 초만큼 기다립니다. 짧은 링크의 요청된 유효 시간을 넘기도록 16초 기다리세요.

sleep 16

새 링크로 교체하지 않고 원래 짧은 링크를 다시 사용하세요. 여기서 -s는 진행률 표시를 숨기고 -o는 응답 본문을 저장하며 -w는 HTTP 상태만 출력합니다. %{http_code}는 curl의 상태 필드이고 \n은 줄을 끝냅니다. 거부 응답을 확인할 수 있도록 -f는 생략합니다.

curl -s -o expired-response.xml -w '%{http_code}\n' "$SHORT_URL"

예상 상태: 403. 파일은 여전히 존재하고 자신의 신원으로도 읽을 수 있지만 위임된 URL의 시간 범위가 끝났습니다. XML 응답 본문은 만료된 요청을 설명합니다. 링크를 포함하지 않으므로 이 응답은 안전하게 확인할 수 있습니다.

cat expired-response.xml

Code는 AccessDenied이고 Message는 Request has expired.입니다. 이는 거부 이유를 확인해 줍니다. 연결 실패로는 만료를 증명할 수 없습니다.

준비된 유지 관리 신원으로 정리하기

이 단계에서는 준비된 유지 관리 신원으로 실습에 속한 객체와 버킷을 삭제합니다.

기본 읽기 전용 신원에는 의도적으로 삭제 권한이 없습니다. AWS CLI **프로필(profile)**은 신원과 서비스 설정을 선택하는 이름이 있는 설정입니다. 준비된 cleanup 프로필에는 이 연습 리소스를 삭제할 권한이 있습니다. --profile cleanup은 다음 명령에 이 프로필을 선택합니다. 자격 증명을 입력하거나 확인하지 않습니다.

정확한 키로 공유 보고서를 삭제하세요.

aws --profile cleanup s3 rm s3://labex-private-documents/shared/report.txt

다른 일회성 제공 객체도 정확한 키로 삭제하세요.

aws --profile cleanup s3 rm s3://labex-private-documents/private/payroll.txt

두 삭제 메시지는 의도한 객체를 표시합니다. 인증된 목록 조회로 버킷이 비어 있는지 확인하세요.

aws --profile cleanup s3 ls s3://labex-private-documents/ --recursive

성공한 명령은 객체 행을 출력하지 않습니다. 빈 버킷을 삭제하세요.

aws --profile cleanup s3 rb s3://labex-private-documents

출력은 remove_bucket: labex-private-documents입니다. 남은 버킷을 확인하세요.

aws --profile cleanup s3 ls

남은 버킷 행이 없고 AWS View에 No buckets가 표시됩니다. 다운로드 링크는 삭제된 파일을 제공할 수 없습니다. 보호된 로컬 URL 파일도 더 이상 필요하지 않으므로 로컬 rm으로 삭제할 수 있습니다.

rm download-link.txt short-link.txt

다운로드한 보고서 사본은 검토용으로 남습니다. 스토리지 삭제, 링크 만료, 로컬 파일 정리는 서로 다른 작업입니다. 이 연습에 필요한 각 작업을 완료했습니다.

요약

허용된 비공개 보고서를 검색하고 객체 읽기의 거부를 관찰했습니다. 임시 다운로드 URL을 생성하고 HTTP 다운로드를 인증된 사본과 비교했습니다. 그런 다음 짧은 링크가 만료 후 거부되는지 확인했습니다.

사전 서명된 URL은 서명 신원에 이미 허용된 작업을 위임합니다. 객체를 공개하거나 권한을 우회하지는 않습니다. 전체 링크를 임시 접근 비밀 정보로 취급하세요. 마지막으로 별도의 유지 관리 프로필을 사용하여 실습에 속한 객체, 버킷, 로컬 URL 파일을 삭제했습니다.