AWS KMS (Key Management Service)
- KMS 키를 사용해 데이터에 액세스할 수 있는 사람과 대상을 쉽게 제어할 수 있고 AWS가 모든 암호화 키를 관리해 줌
- KMS는 권한 부여를 위해 IAM과 완전히 통합되므로 규칙들을 매우 간단하고 중앙 집중식으로 관리할 수 있음
- KMS는 AWS 중심에 있고 거의 모든 서비스와 통합되어 있음
예) EBS 볼륨 암호화, S3 서버 측 객체 암호화, Redshift로 데이터 암호화, 기본 데이터 암호화 RDS, SSM 파라미터 스토어 등 - KMS는 보유한 AWS 서비스와 함께 사용할 수 있을 뿐만 아니라 CLI나 모든 AWS SDK와 함께 사용할 수 있음
KMS – Customer Master Key (CMK) Types
- KMS의 고객 마스터 키인 CMK에는 두 가지 유형이 존재
- KMS에서 제공하는 대칭 키
AES-256비트 유형의 암호화키이며 KMS의 첫 제품
단일 암호화 키로 데이터를 암호화하고 복호화하므로 대칭 키라고 불려짐
KMS와 통합된 많은 서비스가 대칭 고갹 마스터 키를 사용하고 있음
KMS로 대칭 키를 생성하면 암호화되지 않은 키에 절대 액세스할 수 없으며 KMS API를 사용해야만 해당 키를 사용할 수 있음 - KMS에서 제공하는 비대칭 키
RSA 및 ECC 키 쌍이 속함
비대칭 키에는 암호화를 위한 공개 키와 복화화를 위한 개인 키가 존재하며 이것은 SSL 작동 원리의 기본
공개 키로는 암호화를 하고 개인 키로 복호화를 하며 서명/검증 작업에도 사용됨
공개 키는 공개되어 있으므로 다운로드할 수 있지만 개인 키는 액세스할 수 없으므로
KMS API를 호출할 수 없는 사용자의 경우 비대칭 키를 이용해 AWS 외부에서 암호화를 할 수 있게 해 줌
AWS KMS (Key Management Service)
- 대칭 키는 키와 정책을 완전히 관리할 수 있음
즉, 키를 생성하고 교체 정책을 정의하고 비활성화하거나 활성화할 수 있음
또한 CloudTrail 통합으로 키 사용을 감사할 수 있어 누가 언제 키를 사용하는지 확인할 수 있음 - 고객 마스터 키에는 세 종류가 존재
1) AWS 관리형 서비스 기본 고객 마스터 키 : EBS 볼륨에 들어가서 AWS/EBS 키를 사용하면 무료
2) 키 직접 생성 : 매달 1달러가 과금
3) 자체 키를 가져오기 : KMS 외부에서 생성하는 것은 권장되지는 않지만 매달 1달러가 과금 - KMS의 경우 KMS에 수행된 각 API 호출에 대해 호출 10000건당 약 3센트가 과금됨
AWS KMS 101
- 데이터베이스 비밀번호 외부 서비스에 대한 자격 증명, SSL 인증서의 개인 키, 암호화해야 하는 모든 것 등
민감한 정보를 공유해야 할 때 KMS를 사용하는 것이 좋음 - KMS를 사용하면 데이터를 암호화하거나 복호화하는 키를 볼 수 없기 때문에 전체 보안이 AWS에 속하게 되며
해당 키는 KMS로 데이터를 보낼 때 복호화하고 암호화할 때 쓸 수 있음 - KMS는 추가 보안을 위해 키를 교체할 수 있음
- 암호화의 경우 데이터베이스 비밀번호 등의 비밀을 절대로 평문으로 특히 코드에 저장하지 않으며
대신 비밀을 암호화해야 하기 때문에 암호화한 다음 코드나 환경 변수에 저장하면 문제가 발생하지 않음 - KMS에는 호출당 최대 4KB의 데이터만 암호화할 수 잇는 제한이 존재하며
더 많은 데이터를 암호화하려면 봉투 암호화를 사용해야 함 - KMS 액세스 권한을 부여하려면 키 정책에서 사용자가 키에 액세스할 수 있도록 하고 IAM 정책에서 API 호출을 허용해야 함
이 두 가지 요건을 충족하게 되면 KMS 키에 대한 액세스를 갖게 됨
Copying Snapshots across regions
- KMS 키는 특정 리전에 바인딩됨
즉, 리전 A에서 KMS 키를 생성하면 리전 B로 전송할 수 없음 - 예) 리전 eu-west-2에 KMS 키가 있고 KMS로 암호화된 EBS 볼륨을 새로운 리전인 ap-southeast-2로 복사하려고 할 때
KMS 키는 특정 리전에 연결되어 있기 때문에 특정 작업을 수행해야 하며 이는 KMS로 암호화된 거의 모든 것에 적용됨
먼저 볼륨의 스냅샷을 생성하고 암호화된 볼륨에서 만든 모든 스냅샷은 KMS와 동일한 키로 암호화됨
그 후 해당 스냅샷을 새 리전으로 복사할 때 데이터를 다시 암호화하기 위해 새 KMS 키를 지정해야하며
다른 리전에 새로운 키로 암호화된 스냅샷을 얻을 수 있게 됨
마지막으로 해당 스냅샷에서 볼륨을 다시 만들면 그 볼륨은 새로운 KMS로 암호화됨
즉, 스냅샷을 복사할 때 KMS 키가 특정 리전에 바인딩되기 때문에 다시 새로운 KMS로 암호화해야 함
KMS Key Policies
- 키 정책은 모든 리소스 기반 정책과 비슷하지만 키 정책 없이는 액세스를 제어할 수 없음
따라서 키 정책을 지정하지 않으면 아무도 키에 액세스할 수 없음 - 기본 KMS 키 정책은 매우 허용적이며
특정 KMS 키 정책을 제공하지 않으면 기본값으로 생성되고 루트 사용자에게 액세스 권한을 부여
즉, 전체 AWS 계정이 IAM 정책을 사용할 수 있는 경우에만 KMS 키를 쓸 수 있는 권한이 있음 - 기본 KMS 키 정책으로 사용자에게 KMS 키 액세스 권한을 부여하기 위해서는
올바른 IAM 정책을 생성해 사용자와 연결하기만 하면 됨 - 사용자 지정 KMS 키 정책을 정의하면 특정 KMS 키에 액세스할 수 있는 사용자와 역할을 구체적으로 정의하고
키를 관리할 수 있는 사람을 정의하면 됨 - KMS 키는 교차 계정 액세스를 수행할 때 매우 유용
Copying Snapshots across accounts
- 교차 계정 복사
- 계정 간 스냅샷을 생성하고 복사하는 방법
- 스냅샷을 생성한 후 자체 CMK로 암호화
- KMS 키 정책을 연결하여 해당 키에 대한 교차 액세스를 승인하여 교차 계정 액세스 권한 부여
- 대상 계정이 KMS 키를 읽을 수 있도록 허용한 다음 대상 계정에서 암호화된 스냅샷을 공유
- (대상에서) 스냅샷의 복사본을 만들고 계정의 KMS 키로 암호화
- 스냅샷에서 볼륨 생성
<CLI를 통한 KMS 실습>
- KMS - AWS 키 관리
aws/라는 별칭으로 시작하기 때문에 AWS 관리 키라는 것을 알 수 있음
S3에 대한 키와 ACM에 대한 키가 있고 CodeCommit, DynamoDB, Lambda, Elastic File System에 대한 키도 있음
암호화를 활성화한 서비스에 따라 다른 종류의 키가 있을 수 있음
이는 무료 키이며 여섯 개의 키가 있고 이 숫자는 달라질 수 있음
Elastic File System을 KMS로 암호화하고 기본 AWS 관리 키를 사용하기를 원한다면
자동으로 aws/elasticfilesystem이라는 별칭을 사용하게 됨
이들은 무료이지만 접근 권한이 없기 때문에 서비스 외부에서는 사용할 수 없으며
지울 수도 없고 순환시킬 수도 없고 단지 키 정책과 같은 기본적인 정보만 얻을 수 있음
- KMS - 고객 관리 키 생성
우리들만의 키를 생성할 수 있으며 키를 생성할 경우 매달 1달러를 지불해야 함
고객 관리 키에서 키를 생성하고 키 형식을 구성해야하는데 대칭 키와 비대칭 키를 선택할 수 있음
대칭 키는 암호화와 복호화에 동일한 키를 사용하는 것이고
비대칭 키는 암호화와 복호화 그리고 서명 및 검증 작업에 공용 및 사설 키 페어를 사용하는 것임
이번 실습에서는 대칭을 선택하고 대칭의 오리진으로 KMS를 사용
KMS가 우리 키를 생성할 수도 있지만 원한다면 키 값을 입력하거나 CloudHSM가 우리를 위해 키를 생성하도록 할 수 있음
그리고서는 별칭과 설명 글을 입력할 수 있으므로 tutorial로 별칭을 입력하고 설명 글은 입력하지 않음
또한 키를 태그할 수도 있음
키 정책에 대한 곳에 키 관리자를 정의할 수 있으며 이를 정의하지 않으면 기본 키 정책이 적용됨
만약 맞춤 키 정책을 원한다면 어떤 서비스 또는 어떤 사용자와 담당자가 KMS API를 통해 키를 관리할 수 있는지 선택해야 함
또한 한 명의 사용자만이 이 키에 접근하고 싶다면 그에 대해 체크 박스 표시를 할 수 있음
그리고 다른 AWS 계정들도 이 키에 접근하도록 명시할 수 있으며
이를 통해 계정간의 스냅샷 복사를 할 때 매우 유용한 기능이 될 수 있음
마지막으로 검토를 통해 키 정책을 확인하고 편집해야 함
현재는 계정의 루트 사용자가 KMS 키를 사용할 수 있도록 허용하는 기본 키 정책이며
계정의 루트 사용자를 허용함으로써 계정 내의 모든 사용자와 담당자도 이 KMS 키에 접근할 수 있도록 허용함
이를 확인한 후 키를 생성
- KMS - 고객 관리 키 확인
별칭, 키 활성화 여부 , 해당 ARN, 키 비활성화나 키 삭제, 예약 같은 키 관련 작업을 볼 수 있음
암호 구성 부분을 보면 대칭 형식의 키라는 것과 키를 생성한 출처가 KMS 서비스라는 것을 알 수 있음
그리고 SYMMETRIC_DEFAULT라는 것을 이용해 암호화 및 복호화를 할 수 있음
키 정책 부분을 보면 기본 키 정책이 적용되어 모두에게 허용된 것을 볼 수 있음
키 관리자, 키 삭제 예약, 키 사용자나 다른 계정을 추가하지 않았음을 볼 수 있음
마지막으로 키 순환에서는 추가적인 보안을 위해 매년 키를 순환시킬 수 있도록 해줌
- KMS - 사용자 지정 키
AWS CloudHSM 클러스에 대한 것 - 일부 데이터 암호화 복호화 CLI 실습
KMS 아래의 kms-demo-cli.sh를 통해 KMS의 암호화 및 복호화 호출을 어떻게 사용하는지 볼 것
먼저 ExampleSecretFile.txt를 생성한 후 그 안에 SuperSecretPassword라고 적은 후 이와 동일하게 비밀번호를 입력
이후 KMS를 이용해 이것을 암호화했다가 복호화할 것임
KMS 암호화를 위해 첫 번째로 할 일은 encrypt 명령을 사용하는 것이며 이를 위해 키 ID를 명시해야 함
위에서 생성한 별칭은 tutorial이었으므로 alias/tutorial을 사용할 수도 있고 키 ID를 사용할 수도 있음
이 후 --plaintest 부분에 파일의 주소가 오게 되므로 ExampleSecretFile.txt를 적어줌
이 후 쿼리 입력 부분에 암호화된 내용을 의미하는 CipherTextBlob에 대해 쿼리를 하도록 함
그리고 마지막으로 키가 있는 리전인 --region eu-west-2를 적어줌
이렇게 하면 암호화된 내용을 가진 base64 파일인 ExampleSecretFileEcrypted.base64 파일이 생성되게 됨
이것은 암호화된 파일이며 base64 파일 내에는 이해할 수 없는 문자와 숫자가 섞이게 됨
이제 바이너리 암호화 값을 얻기 위해 base64를 복호화해야 하며 리눅스와 윈도우에 따라 명령어가 달라짐
이를 하면 base64 없이 ExampleSecretFileEncrypted라는 이름의 파일을 생성하게 됨
이 파일은 바이너리 또는 미지원 텍스트 인코딩을 사용하기 때문에 텍스트 에디터로 열려고 해도 열리지 않음
바이너리 파일이기 때문에 다른 누군가와 공유할 수 있는 일종의 비밀 파일인 것
암호화된 바이너리 파일을 복호화를 하기 위해서는 kms decrypt 명령어를 실행해야 함
암호화된 파일을 적고 plaintext에 복호화된 값에 대한 쿼리를 하고 base64로 복호화될 다른 파일에 저장하고 리전을 명시
암호화된 값의 블랍 내에 포함되어 있기 때문에 KMS는 암호화를 위해 어느 키를 사용해야 하는지 자동적으로 알 수 있음
마지막으로 텍스트 값을 얻기 위해 base64로 복호화해야 함
이후 ExampleFileDecrypted.txt 파일로 돌아가면 SuperSecretPassword를 찾을 수 있음
이들은 다 저레벨 명령어이고 SDK가 일부를 추상화해줌
'Cloud > AWS' 카테고리의 다른 글
[SAA] SSM 매개변수 저장소 개요 (0) | 2022.04.22 |
---|---|
[SAA] KMS 키 순환 (0) | 2022.04.22 |
[SAA] 암호화 101 (0) | 2022.04.21 |
[SAA] AWS 보안 섹션 소개 (0) | 2022.04.21 |
[SAA] AWS 싱글 사인온 (SSO) 개요 (0) | 2022.04.21 |