반응형

KMS(Key Management Service)란?

 

데이터를 암호화 할 때 사용되는 암호화 Key를 안전하게 관리하는데 목적을 둔 서비스다.

 

 

KMS 는 크게 세가지 방식으로 key 관리 서비스를 제공한다.

 

- AWS managed key

 AWS 서비스들이 KMS 를 통해 Key를 서비스 받는 것으로, 내부적으로 자동으로 일어나게 되며 사용자가 직접적으로 제어가 불가능하다. 

 

- Customer managed key(CMK)

사용자가 직접 key 를 생성하고 관리하는 것이다.

  • CMK는 region에 의존하므로 다른 region에서도 사용하고싶다면 CMK를 생성할 때 다른 region으로 복제를 허용(다중 리전 키)시켜야한다.
  • 최대 4KB의 데이터를 암호화할 수 있다. (4KB보다 큰 데이터를 암호화하려면 data key를 사용해야한다.)
  • KMS는 CMK를 관리하고 data key는 관리하지 않는다.
  • CMK를 통해서 여러 개의 data key를 생성할 수 있다.

 

- Custom key stores

AWS 에서 제공하는 또 다른 key 관리형 서비스인 CloudHSM 을 활용한 Key 관리 형태를 의미한다.

 

 

CMK를 이용한 KMS 예제

 

A 유저에게는 CMK를 주고, B 유저에게는 CMK를 주지 않은 상태에서
KMS로 암호화한 객체를 저장한 S3에 있는 데이터를 서로 다른 A, B 유저가 접근해보자

 

1. Group 생성

 

iam을 검색하여 IAM에 들어온다.

 

엑세스 관리 → 사용자 그룹 → 그룹 생성 클릭

 

 

사용자 그룹 이름 : mygroup

권한 정책 연결 : AdministratorAccess 입력 후 해당 정책 체크 하여 그룹 생성 (administrator 권한 부여)

 

결과적으로 그룹이 생성됨을 알 수 있다.

 

 

2. 사용자 생성

 

이번에는 2명의 사용자를 생성하고자 한다.

IAM → 엑세스 관리 → 사용자 → 사용자 추가 클릭

 

 

첫번째 사용자를 다음과 같이 생성해주고 다음 버튼을 누른다.

사용자 이름 : myuser1

콘솔 비밀번호 : myuser1!

 

그룹은 앞서 만든 mygroup을 선택해준 후 계속 다음 버튼을 눌러 사용자를 만들어준다.

 

 

 

 

 

 

 

 

두번째 사용자를 다음과 같이 생성해주고 다음 버튼을 누른다.

사용자 이름 : myuser2

콘솔 비밀번호 : myuser2!

 

 

 

두번째 사용자는 AmazonS3ReadOnlyAccess를 준다.

 

 

 

 

 

 

결과적으로 2개의 user가 생김을 알 수 있다.

 

 

3. KMS 키 생성

 

아래와 같이 KMS에서 CMK를 생성할 것이다.

이 때 Master key 는 데이터를 암호화 하기 위해 사용되는 Data key를 생성하는데 사용된다.

이는 AWS Console 에서 간단하게 생성 가능하다.

 

 

 

 

 

다음과 같이 KMS를 입력하여 Key Managerment Service로 진입한다.

 

고객 관리형 키를 누르고 키 생성을 누른다.

 

키 구성 단계에서 아래와 같이 설정해준다.

 

키 유형 : 대칭(symmetric) 

✔ symmetric를 선택했기 때문에 AWS 계정으로만 KMS에 접근이 가능, 만약 다른 곳에서 AWS kms 에 접근하고 싶다면 Asymmetric를 사용하자.

 

키 사용 : 암호화 및 해독

키 구성 요소 원본 : KMS

리전 특성 : 단일 리전 키(single region) 

 

 

 

 

레이블 추가 단계에서는 

별칭 : my-kms

설명 : my-kms 정도로 해준다

 

키 관리 권한 정의 단계에서는

myuser1이 s3접근을 하고자 하니 myuser1에게 권한을 정의해준다.

 

키 사용 권한 정의 단계에서도

myuser1이 s3접근을 하고자 하니 myuser1에게 권한을 정의해준다.

 

검토 단계에서 완료 버튼을 눌러준다.

 

 

4. S3 생성

S3를 생성하고 KMS로 암호화 하여 추후 사용자별 다운로드 권한을 다르게 주고자한다.

 

우선 S3에 접근한다.

 

그리고 버킷 만들기를 누른다.

 

 

다음과 같이 버킷 만들기 탭에서 설정 후 버킷 생성을 누른다..

버킷 이름 : my-crocus-bucket (✔ 버킷은 전세계에서 유일해야하기에 본인이 원하는 이름으로 지정)

리전 : 본인이 속해있는 리전 선택

기본 암호화 : 활성화

암호화 키 유형 : AWS Key Management Service 키(SSE-KMS)

AWS KMS 키 : AWS KMS 키 중에서 선택 클릭 후 본인이 만든 KMS 선택

 

 

 

 

 

 

 

 

 

이제 버킷에 들어가서 업로드 버튼을 누르고 아무 파일을 하나 업로드 해보고자 한다.

 

이때 파일을 추가하고, 아래 내용 순서대로 설정해준다.

(즉, 내가 생성한 kms 키를 선택해주고 나서 암호화했다면 upload를 해준다.)

 

 

정상적으로 데이터가 올라감을 알 수 있다.

 

 

5. IAM을 통한 접속

S3를 생성하고 KMS로 암호화 하여 추후 사용자별 다운로드 권한을 다르게 주고자한다.

 

우선 IAM을 들어가서 엑세스 관리 → 사용자 탭에 들어가서 

myuser1과 myuser2의 사용자 ARN을 저장해둔다.

 

arn:aws:iam::881414185305:user/myuser1

arn:aws:iam::881414185305:user/myuser2

 

 

 

 

이제 로그아웃 후 IAM 사용자로 로그인을 클릭하여 

아래와 같이 저장해둔 값을 이용하여 로그인한다. (사용자이름 : myuser1, 암호 : myuser1!)

myuser1은 권한이 있는 사용자이다.

 

 

S3로 들어와서 방금 전 올린 파일을 다운로드 하면 정상 다운로드 됨을 알 수 있다.

 

이번에는 myuser2로 로그인해보자(권한이 없는 user)

해당 계정으로 s3에 접근하여 다운로드를 누르면 다음과 같이 AccessDenied를 볼 수 있다.

반응형

'Applied > AWS' 카테고리의 다른 글

nodejs Lambda 함수에서 다른 Lambda 함수 호출하기  (0) 2023.12.17
[AWS] Lambda에서 S3 파일 읽기 실습  (0) 2022.12.02
Yaml 파일이란?  (0) 2022.09.20
[AWS] Lambda란?  (0) 2022.09.18
[EKS] Kubenetes 명령어 연습하기  (0) 2022.09.14