본 실습 과정은 AWS Training and Certification을 바탕으로 작성되었습니다.
현재 위와 같은 구조의 필수 리소스들이 실습 지원을 위해 미리 생성되어 있다.
Amazon DynamoDB 및 Amazon S3 버킷을 추가하여 아래와 같은 구조가 되도록 만들어보자.
PublicWebApplicationURL
을 통해서 먼저 EC2
로 띄워진 웹 서버에 접속해 보자.
이 웹 서버는 Amazon DynamoDB
및 Amazon S3 버킷
의 직원 사진(S3) 및 직원의 정보(DynamoDB)를 출력하고, 관리할 수 있는 웹 페이지이다.
현재 Amazon DynamoDB
및 Amazon S3 버킷
이 없으므로 찾을 수 없다는 메세지가 출력되는 것을 확인할 수 있다.
S3 구성의 문제를 해결해보자.
이 문제를 해결하려면 S3 버킷을 생성한 후 해당 버킷에 이미지를 업로드하면 된다.
다음과 같이 생성해주도록 하자.
Copy settings from an existing bucket 옵션?
다른 버킷과 동일한 설정을 사용하는 버킷을 생성할 수 있다.
이 실습에서는 사용하지 않는다.
현재 애플리케이션(EC2)은 직원용 이미지 버킷(S3)에 접근할 수 있는 권한이 없다.
따라서 애플리케이션(EC2)에 이미지를 표시할 수 있도록 하기 위해서 IAM 사용자가 해당 S3 버킷 액세스를 허용하는 정책을 구성해주도록 하자.
Amazon S3 👉 Bucket 👉 semployee-photo-bucket-vinca-0001 👉 Permissions
위치로 접근해준다.
Bucket policy 부분에서 EmployeeDirectoryAppRole
라는 역할을 가진 IAM 사용자가 S3에 접근이 가능하도록 정책을 구성한다.
이후 접근 가능한 리소스로는 arn:aws:s3:::employee-photo-bucket-vinca-0001
생성한 버킷의 ARN 값을 넣어준다.
이를 통해 employee-photo-bucket-vinca-0001
버킷에 EmployeeDirectoryAppRole
역할을 가진 사용자가 접근할 수 있게 되었다.
이는 S3의 리소스 기반 정책에 해당한다.
자세한 내용은 여기를 참고.
EmployeeDirectoryAppRole 역할은 어떤 권한을 가지고 있는지 확인해 보자.
DirectoryWebApplicationDynamoDBPolicy
와
DirectoryWebApplicationSSHPolicy
로 총 2개가 있는데 이 중 SSH 접속은 우리가 할일이 없으므로, 중요한 DynamoDB 쪽만 살펴 보자.
Action : dynamodb:ListTables
이 역할을 가진 사용자는 dynamodb:ListTables 작업을 수행할 수 있다.
Resource: arn:aws:dynamodb:ap-southeast-1:668206941722:table/*
어떤 리소스?
ap-southeast-1
에 생성된 668206941722
계정의 모든 DynamoDB 테이블 리소스에 대해서
Effect: "Allow"
권한을 허용한다.
아래 쪽이 짤리긴 했지만 동일하다.
Action으로 dynamodb:PutItem
, dynamodb:DeleteItem
, dynamodb:UpdateItem
, dynamodb:Scan
와 같은 작업을 수행 가능하다는 것을 의미하고,
이러한 작업을 수행할 Resuorce는 arn:aws:dynamodb:ap-southeast-1:668206941722:table/Employees
로 지정되어 있다.
EC2 인스턴스의 퍼블릭 아이피 주소를 통해 웹으로 다시 돌아가서 S3 버킷과 연결을 해보자.
Configuration Settings
에 버킷의 명을 입력하고 Save
버튼을 눌러 보자.
아니? 웹에서 접속이 잘된다?
분명 나는 EmployeeDirectoryAppRole
역할을 가지는 경우, 접속이 가능하도록 했는데?
Principal": {
"AWS": "arn:aws:iam::668206941722:role/EmployeeDirectoryAppRole"
}
S3 버킷에 접속할 수 있는 권한은 분명히 이전 버킷 정책 생성 과정에서 해주었다.
하지만, EmployeeDirectoryAppRole
라는 역할을 가진 IAM 사용자가 S3에 접근이 가능하도록 정책을 구성하였을 뿐.
그 어디에도 웹 접속에 대해서 허용한 적은 없다.
웹에서 IAM 사용자로 로그인한 기억이 아무리 봐도 없다.
하지만 웹에서S3
로의 접속이 되는 아이러니한 상황..😮
이는 두가지 경우의 수를 생각해 볼 수 있다.
사용자가 웹 페이지를 통해 AWS 자격 증명을 제공하고 이 자격 증명에
EmployeeDirectoryAppRole
의 권한이 부여되어 있는 경우, 사용자는 이 권한을 사용하여 S3 버킷에 액세스할 수 있다.
IAM 역할
EmployeeDirectoryAppRole
EC2 인스턴스에 연결 되었을 때는, 해당 인스턴스에서 IAM 역할을 사용하여 AWS 서비스에 액세스할 수 있다.
정답은 2번 " IAM 역할이 EC2 인스턴스에 연결되어 있는 경우 " 이다. (AWS 측 답변)
이를 알아보기 위해서는 EC2 인스턴스에 접속하여 다음 명령어를 치면 EC2 인스턴스에 연결된 IAM 역할을 알 수 있다.
aws iam get-role --role-name EmployeeDirectoryAppRole
하지만 안타깝게도 이는 AWS 측에서 EC2로의 접근을 차단해 놔서 직접 확인할 수는 없었다..
https://aws-tc-largeobjects.s3-us-west-2.amazonaws.com/ILT-TF-100-TECESS-5/app/sample-photos.zip
위 링크를 통해 이미지를 다운받고, 압축을 풀어서 S3 버킷에 추가해 주도록 하자.
웹 페이지로 돌아가 Images 탭을 확인해보면 S3버킷에 올렸던 이미지들이 출력되는 것을 확인할 수 있다.
Amazon DynamoDB는 대표적인 NoSQL DB이다.
따라서 Key와 value값으로 구성된다.
테이블 명과, Partition key만을 지정하고 생성해 주도록 하자.
여기서 "파티션 키(Partition Key)"는 테이블 내의 각 항목을 고유하게 식별하는 데 사용되는 필드이다.
IAM 역할EmployeeDirectoryAppRole
은 Employee Directory 웹 애플리케이션을 호스팅하는 EC2 인스턴스에 연결되어 있는 상태이다.
따라서, EC2 웹 페이지에서 DynamoDB 테이블에 액세스할 수 있으며, 웹 브라우저에서 애플리케이션 인터페이스를 통해 DynamoDB 테이블 항목을 확인하고 추가 및 삭제할 수 있다.
추가해 보도록 하자.
추가한 결과
관리 콘솔에서 다음과 같이 내용을 수정해보자.
다음과 같이 웹 페이지에서도 수정된 것을 확인할 수 있다.
관리 콘솔에서 Create Item을 통해서 생성해보자.
다음과 같이 웹 페이지에서도 잘 반영되어 생성된 것을 확인할 수 있다.