관심분야/클라우드

#3 AWS IAM 설정 - AWS 음성지원 서비스를 활용한 신문 읽어주는 프로젝트

뱅노 2019. 10. 13. 20:05

앞에서 이야기한 거와 같이 python으로 crawling을 하여서 DynamoDB에 적재를 하려고 하였다.

그러나 먼저 DynamoDB에 접근을 하기 위해서는 IAM 설정이 필요하였다.

 

IAM이란 무엇인가?

 

IAM이란 Identity and Access Management의 약자이다. AWS에서 IAM에 관하여 설명하는 부분을 발췌해보면

AWS Identity and Access Management(IAM)를 사용하면 AWS 서비스와 리소스에 대한 액세스를 안전하게 관리할 수 있습니다. 또한, AWS 사용자 및 그룹을 만들고 관리하며 AWS 리소스에 대한 액세스를 허용 및 거부할 수 있습니다. 

라고 설명하고 있다. 쉽게 이야기해서 특정 사용자가 AWS의 서비스를 접근할 때 사용해야 하는 접근통제 시스템으로 생각하면 됩니다.

 

IAM는 사용자, 그룹, 역할, 정책으로 구성이 되어있다. 이번 작업에서는 사용자, 정책만 사용해서 DynamoDB에 접근할 수 있도록 할 예정이다. IAM에 대한 자세한 설명을 넣고 싶지만, 이번 설명과는 취지가 맞지 않아서 다음에 IAM만 따로 설명하도록 하겠다.(IAM만 알아도 AWS의 50% 정도는 알고 간다고 생각한다. IAM가 적용되지 않는 서비스가 없다.)

 

먼저 AWS 콘솔에 로그인을 한다.

검색창에 IAM이라고 검색 후 클릭을 한다. 그러면 IAM 섹션 페이지로 들어오게된다. 좌측 메뉴에 정책 메뉴를 클릭한다. 정책 메뉴를 클릭하면 위 화면과 동일한 화면이 나올 것이다. [정책생성] 버튼을 클릭한다.

 

클릭을 하게 되면 정책생성 섹션이 나온다. 시각적 편집기가 있고 JSON 편집 탭이 존재한다. 가능하면 JSON으로 하는 게 좋긴 하다. JSON으로 정책을 작성 및 읽을 수 있다면 현 프로젝트의 정책을 한눈에 볼 수 있다. 하지만 난 시각적 편집기를 사용하겠다. 왜? 아직 JSON 작성 규칙을 보지 않았다.

 

일단 [서비스 선택]를 클릭하고 DynamoDB를 검색한다. DynamoDB를 검색하게 되면 아래와 같은 엑세스 레벨이 나온다.

 

현재 나에게 필요한 정책만 사용하도록 하겠다. AWS에서는 가능하면 IAM의 설정을 최소 권한으로 권장하고 있다. 액세스 레벨에 나오는 항목들은 프로그래밍을 할 때 사용하는 함수라고 생각하면 된다. 각각의 기능 설명은 각 함수의 우측 ? 표시를 클릭하면 된다.

 

권한을 설정하다보면 리소스 항목에 주황색의 경고 메시지가 나온다. 경고 메시지가 나오면 정책을 생성할 수 없다. 따라서 경고 메시지를 확인해야 한다. "Specify table resource ARN for the Query and 6 more action" 메시지는 위에서 지정한 함수에 관해서 ARN을 지정해야 한다는 설명이다. ARN란 Amazon Resource Name라고 해서 AWS에 존재하는 모든 서비스는 서비스 생성 시 ARN이 나오게 된다. 다시 말해 위 경고는 "어떤 서비스만 접근할 건지 설정이 필요해"로 풀이할 수 있다.

 

리소스의 좌측 ▶를 클릭하면 위 이미지와 같이 index, table 두가지의 접근제어를 어떻게 할 건지 나온다. 나는 모든 리소스가 접근할 수 있도록 한다.

 

마지막으로 요청조건이다. MFA와 소스 IP가 있다. MFA는 Two Factor(이중 인증)을 할 것인지 물어보는 것이다. AWS에서 할 수 있는 이중 인증 방식은 가상 MFA 디바이스, U2F 보안키, 하드웨어 MFA 디바이스, SMS 문자메시지 기반 MFA 중 사용 가능하다. 소스 IP는 특정 IP만 접근하도록 설정하는 방법이다. 둘 다 권장사항이지만 가능하면 설정하는 게 좋다.

 

이제 다음버튼을 누르면

 

정책검토 섹션이 나온다. 정책 이름은 [TTSReadsNewsPolicyWithDeveloper]로 설정한다. 정책에 대한 설명을 작성하라고 한다. 정책은 무조건 최대 1000자, 영숫자 및 특정한 특수문자만 가능하다. 한글을 사용할 수 있다면 관리가 더 쉬울 텐데 조금은 아쉽다. 여기까지 정책 생성 시 필요한 정보를 입력하고 생성을 하면 정책이 생성된다. 이제 정책을 생성하였다면 생성한 정책을 사용할 사용자를 생성하고 정책과 연결시켜 줘야 한다.

 

IAM 좌측 메뉴에서 [사용자] 메뉴를 클릭한다.

 

사용자 추가 색션에서 사용자이름, 액세스 유형을 설정한다. [다음:권한] 버튼을 클릭하면

 

권한 설정이 나온다. 나의 경우 그룹을 설정하지 않았다. 그러나 이전에 정책을 생성을 하였으므로 [기존 정책 직접 연결]을 클릭하고 아까 생성한 정책을 검색 후 선택을 한다. [다음:태그] 버튼을 클릭한다. 그다음부터는 별다른 내용은 없으므로 설명을 생략하겠다. 위와 같은 절차대로 진행을 하면 정책 및 사용자를 생성하게 되고 사용자에게 정책을 부여하게 된다. 따라서 생성한 사용자 권한으로 DynamoDB를 접근할 수 있다.

 

사용자 설정 이후 Access key ID, Secret access key 정보가 나온다. 아래 AWS CLI 설정 시에 필요하다. 따라서 은닉할 수 있는 장소에 잘 보관해 놓도록 하자. 생성시 처음에만 다운로드가 가능하다. 만약 잃어버렸을 경우에는 IAM 메뉴 keypair에서 재 생성해야 한다. (CSV파일로 다운로드가 가능하다.)

 


나는 일단 EC2에 python crawling 프로그램을 생성하기 전에 나의 로컬에서 테스트를 해보고 싶었다. 따라서 나의 로컬에 사용자를 연결 시켜야 했다.(참고로 EC2를 사용하지 않을 수도 있다. AWS에 관련하여 찾다 보니, 배치를 수행할 수 있는 서비스도 존재한다고 한다. 따라서 좀 더 확인을 하고 아키텍처 구조를 변경할 예정이다.)

 

먼저 나의 로컬에 AWS CLI를 설치 해야 한다. 설치 방법은 AWS 웹 매뉴얼에 설명이 잘 되어 있다.(내가 굳이 똑같은 내용을 두 번 설명할 필요는 없다고 생각이 들었다...)

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-install.html

 

AWS CLI 설치 - AWS Command Line Interface

AWS CLI 설치 AWS Command Line Interface(AWS CLI) 설치 방법 Using pip 가상 환경 사용 번들 설치 관리자 사용 사전 요구 사항 Python 2 버전 2.6.5+ 또는 Python 3 버전 3.3+ Windows, Linux, macOS, or Unix 참고 Python의 이전 버전은 일부 AWS 서비스를 지원하지 않을 수 있습니다. AWS CLI를 설치하거나 사용할 때 InsecurePlatformWarning 또

docs.aws.amazon.com

각 OS에 맞게 AWS CLI를 설치를 한 후 아래의 링크에서 AWS 구성 방법을 확인한다. 아래의 링크에서 [빠르게 AWS CLI 구성] 부분만 확인해도 괜찮다.

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-configure.html

 

AWS CLI 구성 - AWS Command Line Interface

AWS CLI 구성 이 단원에서는 보안 자격 증명, 기본 출력 형식, 기본 AWS 리전을 비롯하여 AWS Command Line Interface (AWS CLI)가 AWS와 상호 작용하는 데 사용하는 설정을 구성하는 방법을 설명합니다. 참고 AWS에서는 모든 수신 요청이 암호화 서명되어야 합니다. AWS CLI에서 이 작업을 수행합니다. "서명"에는 날짜/시간 스탬프가 포함됩니다. 따라서 컴퓨터의 날짜 및 시간이 올바르게 설정되어야 합니다. 잘못 설정되

docs.aws.amazon.com

여기까지 하였다면 로컬에서 프로그램을 작성 후 DynamoDB를 접근 할 수 있도록 만든 상태이다. 다음에는 간단한 crawling 파일럿 프로그램 작성 후 DynamoDB에 Insert를 하도록 하겠다.