본문 바로가기

DevOps/AWS

AWS DynamoDB - (2) 인증 및 접근 제어 ( Authentication and Access Control )

시작하기 전에

지난 포스팅에서는 Local 환경에서 DynamoDB를 띄우고 Spring Boot와 연결하는 방법에 대해 다루었다. 이번 포스팅에서는 EC2 instance에서 실행되는 Spring boot에서 DynamoDB에 접근하기 위한 인증과 접근제어 설정에 관해 다루어 보겠다.

 DynamoDB에 접근 권한을 가진 Credential만 접근이 가능하도록 하여 resource를 보호할 수 있다. 이 번 장에서 리소스를 보호하기 위해 AWS IAM(identity and access management)와 DynamoDB를 어떻게 설정해야 되는지에 대해 다루어보자.

인증 ( Authentication )


접근 제어 ( Access Control )


Request를 인증할 Credentail이 있다하더라도, DynamoDB 접근할 권한이 없다면 아무것도 할 수 없다. 예를 들어, DynamoDB table를 만들 수 있는 권한을 계정에 줘야 한다. DynamoDB를 위한 권한을 어떻게 관리하는지 살펴보자.


DynamoDB resource에 접근하기 위한 권한 관리

resource에 접근하고 생성하는 권한은 권한 정책에 따라 결정된다. 계정 관리자는 권한정책을 IAM identities (  즉, 사용자, 그룹, 역할(role) )에 적용하거나 AWS Lambda와 같은 서비스는 resource에 권한 정책을 더할 수 있다.

권한을 부여할 때, 1) 누구에게 권한을 줄지, 2) 어떤 resource에 접근하기 위한 권한인지, 3) resource에 접근할 때 어떠한 동작만 허용할 것인지를 정해야 한다.


DynamoDB 리소스 및 작업

DynamoDB에서는 table이 기본 리소스다. DynamoDB도 index와 stream과 같은 다른 리소스도 제공해준다. 이 둘은 생성된 table 안에서만 생성할 수 있다. 이 둘을 가리켜 하위리소스 ( subresource )라 한다. 

아래 표를 보면, resource와 subresource는 유일한 Amazon 리소스 이름과 연결되어 있다.

Resource TypeARN Format
Tablearn:aws:dynamodb:region:account-id:table/table-name
Indexarn:aws:dynamodb:region:account-id:table/table-name/index/index-name
Streamarn:aws:dynamodb:region:account-id:table/table-name/stream/stream-label


DynamoDB는 위의 리소스들을 처리하기 위한 API들을 제공한다. 권한 쪽에 집중하기 위해 API는 다음 포스팅에서 살펴보도록 하겠다. 


DynamoDB 리소스 접근 관리

권한 정책(permissions policy)는 어떤 사용자가 어떤 것에 접근 가능한지에 대해 설명한다. 권한 정책을 만들 때 가능한 옵션들에 대해 살펴보자

IAM identity에 부여된 권한 정책은 자격 증명 기반 정책(IAM 정책, Identity-Based Policies)라 한다. 그리고 resource에 부여된 권한 정책은 리소스 기반 정책(resource-based polices)라 한다. DynamoDB는 IAM 정책만을 지원한다.

  • user나 group에 권한 정책 부여하기 - 사용자에게 Table 생성 권한을 주거나 사용자가 속한 그룹에 해당 권한을 주는 형태
  • role에 권한 정책 부여하기 ( cross-account permission 주기 ) - 다른 AWS account에게도 만들어진 role을 부여할 수 있다고 한다. ( 왜 이렇게 하는거지?, 얻는 장점이 뭘까? - update 예정 ) 

다음은 하나의 DynamoDB 작업 권한을 부여하는 정책 예제다.


{

"Statement": [

{

"Sid" : "ListTables",

"Effect": "Allow",

"Action": [

"dynamodb: ListTables"

],

"Resource":"db_my_table"

}

]

}


정책 요소 지정

DynamoDB 리소스마다 API를 정의한다. API 동작마다 권한을 주기 위해, DynamoDB는 권한 정책을 구체화한 action을 정의해놨다. 자세한 정보를 확인하고 싶다면, https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/api-permissions-reference.html 해당 페이지의 표를 참조하자.


정책 요소의 구성을 살펴보면

  1. Resource - 정책을 적용할 리소스
  2. Action - 예를 들어 dynamodb:Query를 사용하여 DynamoDB에서 Query작업을 수행할 수 있도록 권한을 줄 수 있다.
  3. Effect - ??
  4. Principal - 해당 정책이 연결된 사용자를 가리킨다. 


작성 중....

모범 사례를 살펴보자 ( https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/specifying-conditions.html )