mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-03-12 21:22:57 -07:00
Translated ['src/pentesting-cloud/aws-security/aws-services/aws-kms-enum
This commit is contained in:
@@ -4,13 +4,13 @@
|
||||
|
||||
## KMS - Key Management Service
|
||||
|
||||
AWS Key Management Service (AWS KMS)는 관리형 서비스로 제공되어 사용자가 **고객 마스터 키** (CMK)를 **생성하고 관리하는 과정**을 간소화합니다. 이러한 CMK는 사용자 데이터의 암호화에 필수적입니다. AWS KMS의 주목할 만한 특징은 CMK가 주로 **하드웨어 보안 모듈** (HSM)에 의해 **보호된다는 것**으로, 암호화 키의 보호를 강화합니다.
|
||||
AWS Key Management Service (AWS KMS)는 관리형 서비스로 제공되어 사용자가 **고객 마스터 키** (CMK)를 **생성하고 관리하는 과정**을 단순화합니다. 이러한 CMK는 사용자 데이터의 암호화에 필수적입니다. AWS KMS의 주목할 만한 특징은 CMK가 주로 **하드웨어 보안 모듈** (HSM)에 의해 **보호**된다는 점으로, 암호화 키의 보호를 강화합니다.
|
||||
|
||||
KMS는 **대칭 암호화**를 사용합니다. 이는 **정보를 저장할 때 암호화하는 데 사용됩니다** (예: S3 내부). **전송 중 정보를 암호화해야 하는 경우** **TLS**와 같은 것을 사용해야 합니다.
|
||||
KMS는 **대칭 암호화**를 사용합니다. 이는 **정보를 저장할 때 암호화**하는 데 사용됩니다 (예: S3 내부). **전송 중 정보를 암호화**해야 하는 경우 **TLS**와 같은 것을 사용해야 합니다.
|
||||
|
||||
KMS는 **지역별 서비스**입니다.
|
||||
|
||||
**아마존의 관리자는 귀하의 키에 접근할 수 없습니다**. 그들은 귀하의 키를 복구할 수 없으며 귀하의 키 암호화에 도움을 주지 않습니다. AWS는 단순히 운영 체제와 그 기반 애플리케이션을 관리하며, 암호화 키를 관리하고 이러한 키가 어떻게 사용되는지를 관리하는 것은 우리에게 달려 있습니다.
|
||||
**아마존의 관리자는 귀하의 키에 접근할 수 없습니다**. 그들은 귀하의 키를 복구할 수 없으며 귀하의 키 암호화에 도움을 주지 않습니다. AWS는 단순히 운영 체제와 그 기반 애플리케이션을 관리하며, 우리의 책임은 암호화 키를 관리하고 그 키가 어떻게 사용되는지를 관리하는 것입니다.
|
||||
|
||||
**고객 마스터 키** (CMK): 최대 4KB 크기의 데이터를 암호화할 수 있습니다. 일반적으로 DEK(데이터 암호화 키)를 생성, 암호화 및 복호화하는 데 사용됩니다. 그런 다음 DEK는 데이터를 암호화하는 데 사용됩니다.
|
||||
|
||||
@@ -18,10 +18,10 @@ KMS는 **지역별 서비스**입니다.
|
||||
|
||||
마스터 키에는 2가지 유형이 있습니다:
|
||||
|
||||
- **AWS 관리 CMK: 다른 서비스에서 데이터를 암호화하는 데 사용됩니다**. 이는 해당 지역에서 암호화를 구현할 때 처음 생성된 서비스에서 사용됩니다. 3년마다 회전하며 변경할 수 없습니다.
|
||||
- **AWS 관리 CMK: 다른 서비스에서 데이터를 암호화하는 데 사용됩니다**. 해당 지역에서 이를 생성한 서비스에서 사용됩니다. 해당 서비스에서 암호화를 처음 구현할 때 생성됩니다. 3년마다 회전하며 변경할 수 없습니다.
|
||||
- **고객 관리 CMK**: 유연성, 회전, 구성 가능한 접근 및 키 정책. 키를 활성화 및 비활성화할 수 있습니다.
|
||||
|
||||
**키 관리 서비스(KMS)에서의 Envelope Encryption**: **데이터 키로 데이터를 암호화한 다음 마스터 키로 데이터 키를 암호화하는** 두 계층 계층 시스템입니다.
|
||||
**키 관리 서비스(KMS)에서의 봉투 암호화**: 데이터 키로 데이터를 **암호화한 다음 마스터 키로 데이터 키를 암호화하는** 두 계층 계층 시스템입니다.
|
||||
|
||||
### 키 정책
|
||||
|
||||
@@ -31,17 +31,17 @@ KMS는 **지역별 서비스**입니다.
|
||||
|
||||
- KMS 키를 소유한 **AWS 계정의 IAM에 KMS 키에 대한 접근을 관리할 수 있는 권한을 부여합니다**.
|
||||
|
||||
다른 AWS 리소스 정책과 달리, AWS **KMS 키 정책은 계정의 어떤 주체에게도 자동으로 권한을 부여하지 않습니다**. 계정 관리자가 권한을 부여받으려면, **키 정책은 이 권한을 제공하는 명시적 문장을 포함해야 합니다**, 다음과 같은 방식으로.
|
||||
다른 AWS 리소스 정책과 달리, AWS **KMS 키 정책은 계정의 어떤 주체에게도 자동으로 권한을 부여하지 않습니다**. 계정 관리자가 권한을 부여받으려면, **키 정책은 이 권한을 제공하는 명시적 문장을 포함해야 합니다**, 다음과 같은 형식으로.
|
||||
|
||||
- 계정(`"AWS": "arn:aws:iam::111122223333:root"`) IAM 권한을 허용하지 않으면 작동하지 않습니다.
|
||||
- 계정(`"AWS": "arn:aws:iam::111122223333:root"`)에 대한 IAM 권한이 없으면 작동하지 않습니다.
|
||||
|
||||
- 이는 **키 정책 외에도 KMS 키에 대한 접근을 허용하기 위해 IAM 정책을 사용할 수 있도록 계정에 허용합니다**.
|
||||
|
||||
**이 권한이 없으면 키에 대한 접근을 허용하는 IAM 정책은 효과가 없지만**, 키에 대한 접근을 거부하는 IAM 정책은 여전히 효과적입니다.
|
||||
**이 권한이 없으면 키에 대한 접근을 허용하는 IAM 정책은 효과가 없습니다**, 비록 키에 대한 접근을 거부하는 IAM 정책은 여전히 효과적입니다.
|
||||
|
||||
- 이는 **키가 관리 불가능해지는 위험을 줄입니다**. 계정 관리자는 계정 루트 사용자 포함하여 접근 제어 권한을 부여받습니다. 이 사용자는 삭제할 수 없습니다.
|
||||
- 이는 **키가 관리 불가능해질 위험을 줄입니다**. 계정 관리자는 계정 루트 사용자 포함하여 접근 제어 권한을 부여받습니다. 이 사용자는 삭제할 수 없습니다.
|
||||
|
||||
**기본 정책** 예:
|
||||
**기본 정책** 예시:
|
||||
```json
|
||||
{
|
||||
"Sid": "Enable IAM policies",
|
||||
@@ -54,7 +54,7 @@ KMS는 **지역별 서비스**입니다.
|
||||
}
|
||||
```
|
||||
> [!WARNING]
|
||||
> **계정이 허용된 경우** (`"arn:aws:iam::111122223333:root"`) 해당 계정의 **주체**는 KMS 키를 사용하기 위해 **IAM 권한**이 여전히 필요합니다. 그러나 예를 들어 **역할의 ARN**이 **키 정책**에서 **특별히 허용된 경우**, 해당 역할은 **IAM 권한이 필요하지 않습니다**.
|
||||
> **계정이 허용된 경우** (`"arn:aws:iam::111122223333:root"`) 해당 계정의 **주체**는 KMS 키를 사용하기 위해 **IAM 권한**이 여전히 필요합니다. 그러나 예를 들어 역할의 **ARN**이 **키 정책**에서 **특별히 허용된 경우**, 해당 역할은 **IAM 권한이 필요하지 않습니다**.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -76,7 +76,7 @@ KMS는 **지역별 서비스**입니다.
|
||||
|
||||
**접근**:
|
||||
|
||||
- **키 정책**을 통해 -- 이 정책이 존재하면 IAM 정책보다 **우선합니다**.
|
||||
- **키 정책**을 통해 -- 이 정책이 존재하면 IAM 정책보다 **우선합니다**
|
||||
- **IAM 정책**을 통해
|
||||
- **부여**를 통해
|
||||
|
||||
@@ -90,19 +90,19 @@ KMS는 **지역별 서비스**입니다.
|
||||
- IAM 사용자와 역할만 키 관리자 목록에 추가할 수 있습니다 (그룹은 불가능).
|
||||
- 외부 CMK가 사용되는 경우, 키 관리자는 키 자료를 가져올 수 있는 권한이 있습니다.
|
||||
|
||||
### CMK의 회전
|
||||
### CMK 회전
|
||||
|
||||
- 동일한 키가 오랫동안 유지될수록 해당 키로 암호화되는 데이터가 많아지고, 그 키가 침해되면 데이터의 위험 범위가 넓어집니다. 또한 키가 활성 상태로 유지될수록 침해될 확률이 증가합니다.
|
||||
- **KMS는 고객 키를 매 365일마다 회전합니다** (원하는 경우 수동으로 프로세스를 수행할 수 있음) 및 **AWS가 관리하는 키는 3년마다 회전하며 이 시점은 변경할 수 없습니다**.
|
||||
- **KMS는 고객 키를 매 365일마다 회전합니다** (원하는 경우 수동으로 프로세스를 수행할 수 있습니다) 그리고 **AWS가 관리하는 키는 3년마다 회전하며 이 시간은 변경할 수 없습니다**.
|
||||
- **오래된 키는 회전 이전에 암호화된 데이터를 복호화하기 위해 보존됩니다**.
|
||||
- 침해가 발생한 경우, 키를 회전해도 위협이 제거되지 않으며, 침해된 키로 암호화된 모든 데이터를 복호화할 수 있습니다. 그러나 **새로운 데이터는 새로운 키로 암호화됩니다**.
|
||||
- 침해가 발생한 경우, 키를 회전해도 위협이 제거되지 않으며, 침해된 키로 암호화된 모든 데이터를 복호화할 수 있습니다. 그러나 **새 데이터는 새 키로 암호화됩니다**.
|
||||
- **CMK**가 **비활성화** 상태이거나 **삭제 대기** 상태인 경우, KMS는 CMK가 다시 활성화되거나 삭제가 취소될 때까지 **키 회전을 수행하지 않습니다**.
|
||||
|
||||
#### 수동 회전
|
||||
|
||||
- **새로운 CMK를 생성해야 하며**, 그 후 새로운 CMK-ID가 생성되므로 **응용 프로그램**을 **업데이트**하여 새로운 CMK-ID를 **참조**해야 합니다.
|
||||
- 이 프로세스를 쉽게 하기 위해 **키-ID를 참조하기 위해 별칭을 사용할 수 있으며**, 그런 다음 별칭이 참조하는 키를 업데이트하면 됩니다.
|
||||
- **구형 키를 보존하여** 해당 키로 암호화된 이전 파일을 복호화해야 합니다.
|
||||
- **새 CMK를 생성해야 하며**, 그러면 새 CMK-ID가 생성되므로 **응용 프로그램**을 **업데이트**하여 새 CMK-ID를 **참조**해야 합니다.
|
||||
- 이 프로세스를 쉽게 하려면 **키-ID를 참조하기 위해 별칭을 사용할 수** 있으며, 그런 다음 별칭이 참조하는 키를 업데이트하면 됩니다.
|
||||
- **구형 키를 보존하여 해당 키로 암호화된 이전 파일을 복호화해야 합니다**.
|
||||
|
||||
온프레미스 키 인프라에서 키를 가져올 수 있습니다.
|
||||
|
||||
@@ -116,7 +116,7 @@ KMS 정책을 사용하여 다음을 수행할 수 있습니다:
|
||||
|
||||
- 데이터 키를 생성할 수 있는 사람과 이러한 키를 사용할 수 있는 서비스 제한
|
||||
- 시스템 접근을 암호화 전용, 복호화 전용 또는 둘 다로 제한
|
||||
- 시스템이 지역 간 키에 접근할 수 있도록 정의 (KMS를 호스팅하는 지역의 실패가 다른 지역의 시스템 가용성에 영향을 미치므로 권장되지 않음).
|
||||
- 시스템이 지역 간에 키에 접근할 수 있도록 정의 (KMS를 호스팅하는 지역의 실패가 다른 지역의 시스템 가용성에 영향을 미치므로 권장되지 않음).
|
||||
|
||||
지역 간에 키를 동기화하거나 이동/복사할 수 없으며, 지역 간 접근을 허용하는 규칙만 정의할 수 있습니다.
|
||||
|
||||
@@ -128,6 +128,11 @@ aws kms list-grants --key-id <id>
|
||||
aws kms describe-key --key-id <id>
|
||||
aws kms get-key-policy --key-id <id> --policy-name <name> # Default policy name is "default"
|
||||
aws kms describe-custom-key-stores
|
||||
|
||||
# This script enumerates AWS KMS keys across all available regions.
|
||||
for region in $(aws ec2 describe-regions --query "Regions[].RegionName" --output text); do
|
||||
echo -e "\n### Region: $region ###"; aws kms list-keys --region $region --query "Keys[].KeyId" --output text | tr '\t' '\n';
|
||||
done
|
||||
```
|
||||
### 권한 상승
|
||||
|
||||
@@ -147,7 +152,7 @@ aws kms describe-custom-key-stores
|
||||
../aws-persistence/aws-kms-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
## 참고자료
|
||||
## 참조
|
||||
|
||||
- [https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user