awskms KMS

awskms KMS

AWS KMS는 키 관리를 위해 Boundary가 AWS KMS를 사용하도록 구성해요.

출처: HashiCorp Boundary docs

본문

AWS KMS는 키 관리를 위해 Boundary가 AWS KMS를 사용하도록 구성해요.

awskms 예시

이 예시는 필요한 모든 값을 제공해 Boundary 구성 파일을 통해 AWS KMS를 구성하는 방법을 보여줘요.

kms "awskms" {
  purpose    = "root"
  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"
  key_id     = "global_worker-auth"
}

awskms 파라미터

이 파라미터들은 Boundary 구성 파일의 kms 스탠자에 적용돼요.

  • purpose — 이 KMS의 목적이에요. 허용되는 값은 bsr, config, downstream-worker-auth, previous-root, recovery, root, worker-auth, worker-auth-storage예요. 세션 녹화를 활성화하려면 purpose에 bsr 값을 구성해야 해요. 지원되는 KMS purpose에 대한 자세한 내용은 Data encryption in Boundary를 참고하세요.
  • region (string: "us-east-1") — 암호화 키가 있는 AWS 지역이에요. 제공하지 않으면 AWS_REGION 또는 AWS_DEFAULT_REGION 환경 변수, ~/.aws/config 파일, 또는 인스턴스 메타데이터에서 채워질 수 있어요.
  • kms_key_id (string: <required>) — 암호화와 복호화에 사용할 AWS KMS 키 ID예요. AWSKMS_WRAPPER_KEY_ID 환경 변수로도 지정할 수 있어요.
  • access_key (string: "") — 사용할 AWS 액세스 키 ID예요. AWS_ACCESS_KEY_ID 환경 변수나, AWS CLI 또는 인스턴스 프로파일의 AWS 프로파일 일부로도 지정할 수 있어요.
  • session_token (string: "") — AWS 세션 토큰을 지정해요. AWS_SESSION_TOKEN 환경 변수로도 제공할 수 있어요.
  • secret_key (string: "") — 사용할 AWS 시크릿 액세스 키예요. AWS_SECRET_ACCESS_KEY 환경 변수나, AWS CLI 또는 인스턴스 프로파일의 AWS 프로파일 일부로도 지정할 수 있어요.
  • shared_creds_filename (string: "") — 설정하면 공유 자격 증명 파일로 읽을 파일 이름이에요.
  • shared_creds_profile (string: "") — 설정하면 공유 자격 증명 파일에서 사용할 프로파일이에요. 설정하지 않으면 AWS_PROFILE 환경 변수를 사용하고, 그것도 없으면 "default"를 사용해요.
  • role_arn (string: "") — 이것과 web_identity_token_file이 설정되면, STS와 함께 웹 ID 역할 제공자를 사용할 때 사용할 역할 ARN이에요.
  • web_identity_token_file (string: "") — 이것과 role_arn이 설정되면, STS와 함께 웹 ID 역할 제공자를 사용할 때 사용할 토큰 파일이에요.
  • role_session_name (string: "") — 웹 ID 역할 제공자를 사용한다면 사용할 역할 세션이에요.
  • endpoint (string: "") — AWS KMS 요청을 보내는 데 사용할 KMS API 엔드포인트예요. AWS_KMS_ENDPOINT 환경 변수로도 지정할 수 있어요. 예를 들어 VPC Endpoint를 통해 KMS에 연결할 때 유용해요. 설정하지 않으면 Boundary는 지역의 기본 API 엔드포인트를 사용해요.
  • key_id — 이 키의 고유한 이름이에요. 루트 키 마이그레이션을 수행할 때 키를 식별하는 데 사용돼요. key_id 필드는 모든 KMS 스탠자에서 사용할 수 있어요.

인증

인증 관련 값은 환경 변수나 구성 파라미터로 제공해야 해요.

Note: 구성 파일에서 KMS의 파라미터로 AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY를 전달할 수는 있지만, 이 값들은 환경 변수로 설정하는 것을 강력히 권장해요.

AWS 인증 값:

  • AWS_REGION 또는 AWS_DEFAULT_REGION
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

Note: 클라이언트는 공식 AWS SDK를 사용하며, 위 AWS 특정 값들이 제공되지 않으면 지정된 자격 증명, 환경 자격 증명, 공유 파일 자격 증명, IAM 역할/ECS 태스크 자격 증명 순서로 사용해요.

Boundary는 KMS 키에 다음 권한이 필요해요.

  • kms:Encrypt
  • kms:Decrypt
  • kms:DescribeKey

이들은 Boundary가 사용하는 주체(principal)에 대한 IAM 권한, KMS 키의 키 정책, 또는 키의 KMS Grants를 통해 부여할 수 있어요.

키 순환(Key rotation)

이 KMS는 AWS KMS에 정의된 마스터 키 순환을 지원해요. 키 정보가 암호화된 데이터와 함께 저장되므로 KMS의 자동 순환과 수동 순환을 모두 지원해요. 이전 키는 비활성화하거나 삭제하면 안 되며, 이전 데이터의 복호화에 사용돼요. 새 데이터나 갱신된 데이터는 KMS 구성에 정의된 현재 키, 또는 키 별칭(alias) 아래에서 현재로 설정된 키로 암호화돼요.