Vault backend storage용 S3 구성

Vault backend storage용 S3 구성

S3 storage backend는 Vault의 데이터를 Amazon S3 버킷에 영구 저장하는 데 사용됩니다.

출처: 문서

본문

  • 고가용성 없음 – S3 storage backend는 고가용성을 지원하지 않습니다.
  • 커뮤니티 지원 – S3 storage backend는 커뮤니티가 지원합니다. HashiCorp 직원의 검토를 거쳤지만 기술에 대해 그렇게 잘 알지 못할 수 있습니다. 문제가 발생하면 원저자에게 문의하도록 안내받을 수 있습니다.
storage "s3" {
  access_key = "abcd1234"
  secret_key = "defg5678"
  bucket     = "my-bucket"
}

s3 파라미터

  • bucket (string: <required>) – S3 버킷의 이름을 지정합니다. 환경 변수 AWS_S3_BUCKET으로도 제공할 수 있습니다.

  • endpoint (string: "") – AWS 호환 대체 S3 엔드포인트를 지정합니다. 환경 변수 AWS_S3_ENDPOINT로도 제공할 수 있습니다.

  • region (string "us-east-1") – AWS 리전을 지정합니다. 환경 변수 AWS_REGION 또는 AWS_DEFAULT_REGION으로도 제공할 수 있으며, 선호 순서는 그 순서입니다.

AWS로 인증하는 데 다음 설정이 사용됩니다. EC2 인스턴스에서 Vault 서버를 실행한다면 EC2 인스턴스 프로파일 서비스를 사용해 Vault가 S3 API 호출에 사용할 자격 증명을 제공할 수도 있습니다. access_keysecret_key 필드를 비워 두면 Vault가 AWS 메타데이터 서비스에서 자격 증명을 검색하려 시도합니다.

  • access_key – AWS access key를 지정합니다. 환경 변수 AWS_ACCESS_KEY_ID, AWS 자격 증명 파일 또는 IAM 역할로도 제공할 수 있습니다.

  • secret_key – AWS secret key를 지정합니다. 환경 변수 AWS_SECRET_ACCESS_KEY, AWS 자격 증명 파일 또는 IAM 역할로도 제공할 수 있습니다.

  • session_token (string: "") – AWS 세션 토큰을 지정합니다. 환경 변수 AWS_SESSION_TOKEN으로도 제공할 수 있습니다.

  • max_parallel (string: "128") – S3에 대한 최대 동시 요청 수를 지정합니다.

  • s3_force_path_style (string: "false") - 구성된 엔드포인트와 함께 호스트 버킷 스타일 도메인을 사용할지 여부를 지정합니다.

  • disable_ssl (string: "false") - 엔드포인트 연결에 SSL을 사용해야 하는지 여부를 지정합니다(프로덕션에서는 비활성화하지 않는 것이 좋음).

  • kms_key_id (string: "") - S3 backend에서 데이터를 암호화하는 데 사용되는 KMS 키의 ID 또는 별칭을 지정합니다. Vault는 이 KMS 키에 대해 kms:Encrypt, kms:Decrypt, kms:GenerateDataKey 권한이 있어야 합니다. 계정의 기본 키를 지정하려면 alias/aws/s3을 사용할 수 있습니다.

  • path (string: "") - Vault 데이터가 저장될 S3 버킷의 경로를 지정합니다.

s3 예시

기본 예시

이 예시는 Amazon S3를 storage backend로 사용하는 방법을 보여줍니다.

storage "s3" {
  access_key = "abcd1234"
  secret_key = "defg5678"
  bucket     = "my-bucket"
}

기본 키를 사용한 S3 KMS 암호화

이 예시는 계정의 기본 S3 KMS 키로 KMS 암호화를 사용해 Amazon S3를 storage backend로 사용하는 방법을 보여줍니다.

storage "s3" {
  access_key = "abcd1234"
  secret_key = "defg5678"
  bucket     = "my-bucket"
  kms_key_id = "alias/aws/s3"
}

사용자 지정 키를 사용한 S3 KMS 암호화

이 예시는 고객 관리 KMS 키로 KMS 암호화를 사용해 Amazon S3를 storage backend로 사용하는 방법을 보여줍니다.

storage "s3" {
  access_key = "abcd1234"
  secret_key = "defg5678"
  bucket     = "my-bucket"
  kms_key_id = "001234ac-72d3-9902-a3fc-0123456789ab"
}

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에 연결할 수 있습니다.

더 알아보기