AWS KMS seal 구성
AWS KMS seal 구성
AWS KMS seal은 Vault가 AWS KMS를 seal wrapping 메커니즘으로 사용하도록 구성합니다. AWS KMS seal은 다음 중 하나로 활성화됩니다:
출처: 문서
본문
Seal wrapping에는 Vault Enterprise가 필요합니다 모든 Vault 버전은 AWS에 대해 auto-unseal을 지원하지만, seal wrapping에는 Vault Enterprise가 필요합니다. Vault Enterprise는 기본적으로 seal wrapping을 활성화하므로 KMS 서비스가 봉인 해제 과정 중뿐만 아니라 런타임에도 사용 가능해야 합니다. 자세한 내용은 Seal wrap overview를 참고하세요.
- Vault 구성 파일에
seal "awskms"블록이 있는 경우 - 환경 변수
VAULT_SEAL_TYPE이awskms로 설정된 경우. 환경 변수로 활성화한다면 AWS KMS 고유의 다른 필수 값(즉VAULT_AWSKMS_SEAL_KEY_ID)과 성공적인 인증에 도움이 되는 다른 모든 AWS 관련 환경 변수(즉AWS_ACCESS_KEY_ID등)도 제공해야 합니다.
awskms 예시
이 예시는 모든 필수 값을 제공해 Vault 구성 파일을 통해 AWS KMS seal을 구성합니다:
seal "awskms" {
region = "us-east-1"
access_key = "«redacted:AKIA…»"
secret_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
kms_key_id = "19ec80b0-dfdd-4d97-8164-c6examplekey"
endpoint = "https://vpce-0e1bb1852241f8cc6-pzi0do8n.kms.us-east-1.vpce.amazonaws.com"
}
awskms 파라미터
다음 파라미터는 Vault 구성 파일의 seal 스탠자에 적용됩니다:
-
region(string: "us-east-1"): 암호화 키가 있는 AWS 리전입니다. 제공하지 않으면AWS_REGION또는AWS_DEFAULT_REGION환경 변수,~/.aws/config파일, 또는 인스턴스 메타데이터에서 채워질 수 있습니다. -
access_key(string: <required>): 사용할 AWS access key ID입니다.AWS_ACCESS_KEY_ID환경 변수 또는 AWS CLI의 AWS 프로파일이나 instance profile의 일부로도 지정할 수 있습니다. -
session_token(string: ""): AWS 세션 토큰을 지정합니다. 환경 변수AWS_SESSION_TOKEN으로도 제공할 수 있습니다. -
secret_key(string: <required>): 사용할 AWS secret access key입니다.AWS_SECRET_ACCESS_KEY환경 변수 또는 AWS CLI의 AWS 프로파일이나 instance profile의 일부로도 지정할 수 있습니다. -
kms_key_id(string: <required>): 암호화와 복호화에 사용할 AWS KMS 키 ID 또는 ARN입니다.VAULT_AWSKMS_SEAL_KEY_ID환경 변수로도 지정할 수 있습니다.alias/key-alias-name형식의 별칭도 여기서 사용할 수 있습니다. -
disabled(string: ""): Vault가 auto seal 구성에서 마이그레이션 중이라면true로 설정하세요. 그렇지 않으면false로 설정하세요. -
endpoint(string: ""): AWS KMS 요청을 만드는 데 사용할 KMS API 엔드포인트입니다.AWS_KMS_ENDPOINT환경 변수로도 지정할 수 있습니다. 예를 들어 VPC Endpoint를 통해 KMS에 연결할 때 유용합니다. 설정하지 않으면 Vault는 해당 리전의 기본 API 엔드포인트를 사용합니다.
access_key, session_token, secret_key는 간접 값 참조(indirect value references)일 수 있습니다.
seal 마이그레이션 과정에 대한 자세한 내용은 Seal Migration 문서를 참고하세요.
인증
인증 관련 값은 환경 변수나 구성 파라미터로 제공해야 합니다.
참고: 구성 파일에서 AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY를 seal 파라미터로 전달할 수 있지만, 이 값을 환경 변수로 설정하는 것을 강력히 권장합니다.
AWS 인증 값:
AWS_REGION또는AWS_DEFAULT_REGIONAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
참고: 위의 AWS 고유 값이 제공되지 않으면 클라이언트는 공식 AWS SDK를 사용하며 지정된 자격 증명, 환경 자격 증명, 공유 파일 자격 증명, IAM 역할/ECS 태스크 자격 증명 순서로 사용합니다.
Vault는 KMS 키에 대해 다음 권한이 필요합니다:
kms:Encryptkms:Decryptkms:DescribeKey
이것은 Vault가 사용하는 주체(principal)에 대한 IAM 권한, KMS 키의 KMS 키 정책, 또는 키에 대한 KMS Grants를 통해 부여할 수 있습니다.
awskms 환경 변수
또는 다음 환경 변수를 제공해 AWS KMS seal을 활성화할 수 있습니다.
Vault Seal 고유 값:
VAULT_SEAL_TYPEVAULT_AWSKMS_SEAL_KEY_ID
키 회전
이 seal은 AWS KMS 문서에 정의된 root 키 회전을 지원합니다. 키 정보가 암호화된 데이터와 함께 저장되므로 KMS에 대해 자동 회전과 수동 회전이 모두 지원됩니다. 이전 키는 비활성화하거나 삭제해서는 안 되며, 이전 데이터를 복호화하는 데 사용됩니다. 새 데이터나 갱신된 데이터는 seal 구성에 정의된 현재 키 또는 키 별칭 아래의 현재 키로 암호화됩니다.
AWS 인스턴스 메타데이터 타임아웃
Vault 1.4 이상에 영향을 줌
Vault가 EC2 인스턴스에서 인스턴스 메타데이터 서비스를 사용할 때마다(예: instance profile에서 자격 증명을 가져올 때), 인스턴스 메타데이터 서비스 v2(IMDSv2) 도입으로 인해 지연이 있을 수 있습니다. Vault가 사용하는 AWS SDK는 먼저 IMDSv2에 연결을 시도하고, 타임아웃되면 v1으로 폴백합니다. Vault 1.4에서는 이 타임아웃이 최대 2분이 걸릴 수 있습니다. Vault 1.5.5 이상에서는 이 수정(#10133)으로 최대 2초가 걸릴 수 있습니다.
이 타임아웃은 Vault와 IMDSv2 사이에 프록시가 있고, 인스턴스 hop limit이 Vault와 IMDSv2 사이의 "hops" 수보다 작게 설정된 상황에서 발생합니다. 예를 들어 instance hop limit이 1로 설정된 EC2 인스턴스의 docker에서 Vault가 실행 중이면, AWS SDK 클라이언트는 IMDSv2에 연결을 시도하고 docker와 IMDS 사이의 추가 네트워크 hop 때문에 타임아웃 후 IMDSv1로 폴백합니다.
타임아웃 동작을 피하려면 기본 EC2 인스턴스에서 hop limit을 조정할 수 있습니다. docker 예시에서 hop limit을 2로 설정하면 Vault의 AWS SDK가 지연 없이 IMDSv2에 연결할 수 있습니다.
튜토리얼
Auto-unseal using AWS KMS 튜토리얼을 참고해 AWS KMS로 Vault를 auto-unseal하는 방법을 알아보세요.