사이트를 비공개 S3 자료와 연결하기

AWSBeginner
지금 연습하기

소개

제한된 EC2 역할을 연결하고 액세스 키를 복사하지 않고 비공개 S3 이미지를 표시합니다.

앞선 포트폴리오 실습을 먼저 완료하세요. 새 환경에는 앞 단계의 기능과 별도 리소스가 준비되어 있습니다. 이전 서버, 파일이나 자격 증명을 보관할 필요가 없습니다.

자격 시험과 연결

자격 시험 과제 실습 내용
AWS Certified Cloud Practitioner (CLF-C02) Task 2.3 인스턴스 역할로 네 객체만 읽을 수 있게 사이트를 허용합니다.

실습 개요

제한된 EC2 역할을 연결하고 액세스 키를 복사하지 않고 비공개 S3 이미지를 표시합니다.

이미지를 읽지 못하는 이유 확인하기

이 단계에서는 처음에는 페이지가 표시되지만 이미지가 없습니다. 작업자의 CLI 권한과 EC2 앱의 권한은 별개입니다. 버킷을 공개해서 해결하지 않습니다.

프로젝트로 이동합니다.

cd /home/labex/project

식별자를 읽습니다.

source website.env
echo "$PORTFOLIO_BUCKET"

버킷에 이미지가 존재하는지 확인합니다.

aws s3api list-objects-v2 --bucket "$PORTFOLIO_BUCKET"

정책은 s3:GetObject를 허용합니다. Resource 배열은 세 이미지와 projects.json의 정확한 ARN만 포함하여 쓰기나 다른 객체를 허용하지 않습니다. ARN은 완전한 리소스 식별자이며 네 객체로 제한하는 것이 최소 권한입니다.

cat read-image-policy.json

준비된 신뢰 정책은 EC2가 역할을 맡게 합니다. 인스턴스 프로파일은 역할을 EC2에 연결합니다. 객체 존재와 앱의 권한은 별도 조건입니다.

역할 연결하고 이미지 확인하기

이 단계에서는 SDK가 IMDSv2를 통해 역할의 임시 자격 증명을 얻어 S3를 읽습니다. 비밀 키나 액세스 키를 복사하지 않습니다.

INSTANCE_ID를 표시하고 AWS View와 비교합니다.

echo "$INSTANCE_ID"

associate로 지정 프로파일을 연결합니다. $(...)로 결과를 가져오고 query로 AssociationId를 선택하여 output text로 문자열을 반환합니다. ID를 변수에 저장하고 echo로 확인합니다.

ASSOCIATION_ID=$(aws ec2 associate-iam-instance-profile   --instance-id "$INSTANCE_ID"   --iam-instance-profile Name=portfolio-reader   --query 'IamInstanceProfileAssociation.AssociationId'   --output text)
echo "$ASSOCIATION_ID"

새로고침하여 AURA, FORMA, ECHO를 확인합니다. 이미지를 누르면 S3의 projects.json에서 제목과 설명을 읽어 패널을 엽니다. 버킷은 비공개로 유지하고 필요하면 서버와 프로파일을 확인합니다. SDK는 IMDSv2 임시 자격 증명을 쓰며 키는 복사하지 않습니다.

실제 실습의 확인 예시입니다. 리소스 ID는 환경마다 다릅니다.

실제 실습의 확인 예시입니다. 리소스 ID는 환경마다 다릅니다.

연결과 서버 정리하기

이 단계에서는 만든 연결을 해제한 뒤 서버를 종료합니다.

저장한 연결 ID로 해제합니다.

aws ec2 disassociate-iam-instance-profile --association-id "$ASSOCIATION_ID"

인스턴스를 종료합니다.

aws ec2 terminate-instances --instance-ids "$INSTANCE_ID"

최종 상태를 기다립니다.

aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID"

연결 해제는 이미 발급된 임시 자격 증명을 즉시 무효화하지 않을 수 있습니다. 종료로 이 실행 주체를 멈춥니다. 버킷, 역할, 참조 데이터와 네트워크는 유지합니다.

요약

인스턴스 프로파일로 제한된 읽기 권한을 제공하고 실제 이미지를 확인한 뒤 연결을 해제했습니다.

공식 문서: EC2 application roles, instance profiles.