S3 API 레거시 인증 방식

S3 API 레거시 인증 방식

버전 0.10.0 이전에는 DuckDB에 시크릿 매니저가 없었어요. 그래서 S3 엔드포인트의 구성과 인증을 변수로 처리했어요. 이 페이지는 그 S3 API 레거시 인증 방식을 설명합니다.

출처: 문서

본문

경고 — 이 페이지는 시크릿을 DuckDB 설정으로 저장하는 레거시 방법을 설명해요. 이는 시크릿이 (값을 출력하는 것과 같은 방식으로) 실수로 유출될 위험을 높입니다. 따라서 이런 방법으로 시크릿을 저장하는 것은 피하세요. S3 엔드포인트를 구성·인증하는 권장 방법은 secrets를 사용하는 것이에요.

레거시 인증 방식

S3에서 읽거나 쓰려면 올바른 리전을 설정해야 해요.

SET s3_region = 'us-east-1';

선택적으로, AWS가 아닌 객체 스토리지 서버를 사용하는 경우 엔드포인트를 구성할 수 있어요.

SET s3_endpoint = '⟨domain⟩.⟨tld⟩:⟨port⟩';

엔드포인트가 SSL을 지원하지 않으면 다음을 실행하세요.

SET s3_use_ssl = false;

path-style URL과 vhost-style URL 사이를 전환하려면 다음을 쓰면 돼요.

SET s3_url_style = 'path';

다만 이 경우 엔드포인트도 업데이트해야 할 수 있어요. 예를 들어 AWS S3에서는 엔드포인트를 s3.⟨region⟩.amazonaws.com으로 바꿔야 해요.

올바른 엔드포인트와 리전을 구성한 뒤에는 공개 파일을 읽을 수 있어요. 비공개 파일을 읽으려면 인증 자격 증명을 추가하면 됩니다.

SET s3_access_key_id = '⟨aws_access_key_id⟩';
SET s3_secret_access_key = '⟨aws_secret_access_key⟩';

또는 임시 S3 자격 증명도 지원돼요. 이 경우 추가 세션 토큰을 설정해야 합니다.

SET s3_session_token = '⟨aws_session_token⟩';

aws 확장은 AWS 자격 증명을 로드하도록 해줍니다.

요청별 구성

위에서 설명한 전역 S3 구성 외에도, 특정 구성 값을 요청별로 사용할 수 있어요. 이렇게 하면 여러 세트의 자격 증명·리전 등을 사용할 수 있죠. 이 값들은 S3 URI에 쿼리 파라미터로 포함시켜 사용합니다. 위에서 나열한 개별 구성 값을 모두 쿼리 파라미터로 설정할 수 있어요. 예를 들어 볼게요.

SELECT *
FROM 's3://bucket/file.parquet?s3_access_key_id=accessKey&s3_secret_access_key=secretKey';

쿼리당 여러 구성을 설정하는 것도 허용돼요.

SELECT *
FROM 's3://bucket/file.parquet?s3_access_key_id=accessKey1&s3_secret_access_key=secretKey1' t1
INNER JOIN 's3://bucket/file.csv?s3_access_key_id=accessKey2&s3_secret_access_key=secretKey2' t2;

구성

S3 업로드에는 몇 가지 추가 구성 옵션이 있는데, 대부분의 사용 사례에는 기본값으로 충분해요.

또한 대부분의 구성 옵션은 환경 변수로 설정할 수 있어요.

DuckDB 설정 환경 변수 비고
s3_region AWS_REGION AWS_DEFAULT_REGION보다 우선
s3_region AWS_DEFAULT_REGION
s3_access_key_id AWS_ACCESS_KEY_ID
s3_secret_access_key AWS_SECRET_ACCESS_KEY
s3_session_token AWS_SESSION_TOKEN
s3_endpoint DUCKDB_S3_ENDPOINT
s3_use_ssl DUCKDB_S3_USE_SSL
s3_requester_pays DUCKDB_S3_REQUESTER_PAYS

더 알아보기 (Learn more)

  • S3 API의 시크릿 기반 구성은 core_extensions/httpfs/s3api 문서를 참고해 주세요.