S3 파일시스템 지원
S3 파일시스템 지원 (S3 file system support)
Trino는 Delta Lake, Hive, Hudi, Iceberg 커넥터를 사용하는 카탈로그로 Amazon S3와 호환되는 스토리지 시스템에 접근하는 네이티브 구현을 포함해요.
출처: 문서
본문
Trino는 Delta Lake, Hive, Hudi, Iceberg 커넥터를 사용하는 카탈로그로 Amazon S3와 호환되는 스토리지 시스템에 접근하는 네이티브 구현을 포함해요. Trino는 S3 호환 스토리지 시스템을 지원하도록 설계되었지만, 호환성 테스트를 거친 것은 AWS S3와 MinIO뿐이에요. 다른 스토리지 시스템은 직접 테스트하고 공급업체에 문의하세요.
카탈로그 프로퍼티 파일에서 fs.s3.enabled=true로 네이티브 구현을 활성화해요.
일반 구성 (General configuration)
S3 파일시스템 지원의 일반적인 측면을 구성하려면 다음 프로퍼티를 사용해요.
| 프로퍼티 | 설명 |
|---|---|
fs.s3.enabled |
S3 스토리지 지원의 네이티브 구현을 활성화해요. 기본값은 false. true로 설정하면 S3를 사용하고 다른 모든 프로퍼티를 활성화해요. |
s3.endpoint |
통신할 S3 서비스 엔드포인트 URL. |
s3.region |
통신할 S3 리전. |
s3.cross-region-access |
크로스 리전 접근을 활성화해요. 기본값은 false. |
s3.path-style-access |
모든 S3 요청에 path-style 접근을 사용해요. |
s3.storage-class |
데이터를 쓸 때 사용할 S3 스토리지 클래스. 기본값은 STANDARD. 다른 허용 값: STANDARD_IA, INTELLIGENT_TIERING, REDUCED_REDUNDANCY, ONEZONE_IA, GLACIER, DEEP_ARCHIVE, OUTPOSTS, GLACIER_IR, SNOW, EXPRESS_ONEZONE. |
s3.signer-type |
S3 요청 인증에 사용할 AWS 서명 프로토콜. 지원 값: AwsS3V4Signer, Aws4Signer, AsyncAws4Signer, Aws4UnsignedPayloadSigner, EventStreamAws4Signer. |
s3.canned-acl |
S3에 파일을 업로드할 때 사용할 canned ACL. 기본값은 NONE으로 PRIVATE와 같은 효과. 다른 AWS 사용자가 소유한 S3 버킷에 파일을 업로드해야 한다면 canned ACL을 다음 중 하나로 설정할 수 있어요: PRIVATE, PUBLIC_READ, PUBLIC_READ_WRITE, AUTHENTICATED_READ, BUCKET_OWNER_READ, BUCKET_OWNER_FULL_CONTROL. |
s3.sse.type |
사용할 S3 서버 측 암호화(SSE) 타입을 설정해요. 기본값은 NONE으로 암호화 없음. 다른 유효 값은 S3 관리 키로 암호화하는 S3, AWS Key Management Service(KMS)의 키로 암호화하는 KMS, s3.sse.customer-key의 고객 제공 키로 암호화하는 CUSTOMER. S3는 자동으로 SSE를 사용하므로 NONE과 S3는 동일해요. S3 호환 시스템은 다르게 동작할 수 있어요. |
s3.sse.kms-key-id |
SSE에 사용할 KMS 키의 식별자. |
s3.sse.customer-key |
s3.sse.type을 CUSTOMER로 설정한 SSE-C 모드에서 S3의 데이터를 암호화·복호화하는 256비트 base64 인코딩 AES-256 암호화 키. |
s3.streaming.part-size |
S3 스트리밍 업로드의 파트 크기. 5MB와 256MB 사이의 값이 유효. 기본값은 32MB. |
s3.requester-pays |
청구 전송 비용을 요청자에게 이전하도록 활성화하는 스위치. 기본값은 false. |
s3.max-connections |
S3에 대한 최대 연결 수. 기본값은 500. |
s3.connection-ttl |
교체되기 전에 연결 풀에서 연결을 재사용할 수 있는 최대 시간. |
s3.connection-max-idle-time |
닫히기 전에 연결 풀에서 연결이 유휴 상태로 남을 수 있는 최대 시간. |
s3.socket-connect-timeout |
소켓 연결 요청이 타임아웃되기 전에 완료될 수 있는 최대 시간. |
s3.socket-timeout |
소켓 읽기·쓰기 동작이 타임아웃되기 전의 최대 시간. |
s3.tcp-keep-alive |
생성된 연결에서 TCP keep alive를 활성화해요. 기본값은 false. |
s3.http-proxy |
S3에 연결할 때 사용할 HTTP 프록시 서버의 URL. |
s3.http-proxy.secure |
프록시 서버에 대해 HTTPS를 활성화하려면 true로 설정. |
s3.http-proxy.username |
프록시 서버를 통해 연결할 때 사용할 프록시 사용자 이름. |
s3.http-proxy.password |
프록시 서버를 통해 연결할 때 사용할 프록시 비밀번호. |
s3.http-proxy.non-proxy-hosts |
프록시 서버를 거치지 않고 접근할 호스트 목록. |
s3.http-proxy.preemptive-basic-auth |
기본 인증을 사용할 때 프록시 서버에 대해 선제적으로 인증을 시도할지 여부. 기본값은 false. |
s3.retry-mode |
AWS SDK가 재시도를 시도하는 방식을 지정해요. 기본값은 LEGACY. 다른 허용 값은 STANDARD와 ADAPTIVE. STANDARD 모드는 재시도되는 표준 오류 집합을 포함해요. ADAPTIVE 모드는 자동 클라이언트 측 스로틀링을 포함한 STANDARD 모드의 기능을 포함해요. |
s3.max-error-retries |
클라이언트가 오류 시 수행할 최대 재시도 횟수. 기본값은 20. |
s3.application-id |
S3로 보내는 모든 요청의 User-Agent 헤더에 추가되는 애플리케이션 식별자를 지정해요. 기본값은 Trino. |
인증 (Authentication)
access·secret 키, STS, 또는 IAM 역할로 S3 인증을 구성하려면 다음 프로퍼티를 사용해요. access key, secret key, STS, external ID 프로퍼티는 DEFAULT와 IAM_ROLE 인증 모드에서만 사용돼요. ANONYMOUS 또는 WEB_IDENTITY에 대해 이 중 하나라도 설정하면 시작 시 실패해요.
| 프로퍼티 | 설명 |
|---|---|
s3.aws-access-key |
인증에 사용할 AWS access key. |
s3.aws-secret-key |
인증에 사용할 AWS secret key. |
s3.sts.endpoint |
S3에 인증할 때 사용할 AWS Security Token Service의 엔드포인트 URL. |
s3.sts.region |
STS 서비스의 AWS 리전. |
s3.iam-role |
S3에 연결할 때 맡을 IAM 역할의 ARN. s3.auth-type=IAM_ROLE이 필요해요. |
s3.role-session-name |
S3에 연결할 때 사용할 역할 세션 이름. 기본값은 trino-filesystem. |
s3.external-id |
S3에 연결할 때 IAM 역할 신뢰 정책의 외부 ID. |
s3.auth-type |
S3 접근용 인증 모드로, 다음 중 하나: |
ANONYMOUS: 자격 증명을 보내지 않아 퍼블릭 버킷을 읽을 때 사용.DEFAULT(기본): 설정된 경우 정적 access 키를 사용하고, 그렇지 않으면 AWS 기본 자격 증명 체인을 사용. 보안 매핑 역할은 여전히 적용돼요.IAM_ROLE:s3.iam-role에 구성된 IAM 역할을 맡아요.WEB_IDENTITY: 기본 자격 증명 체인 대신 웹 아이덴티티 토큰 파일 자격 증명 제공자를 사용. Amazon EKS에서 service account용 IAM 역할(IRSA)로 Trino를 실행할 때 유용해요. |
보안 매핑 (Security mapping)
Trino는 S3에 대한 유연한 보안 매핑을 지원해, 특정 사용자나 S3 위치에 대해 별도의 자격 증명 또는 IAM 역할을 사용할 수 있게 해줘요. 특정 쿼리의 IAM 역할은 허용된 역할 목록에서 하나를 선택해 추가 자격 증명(extra credential)으로 제공할 수 있어요.
각 보안 매핑 항목은 하나 이상의 매칭 기준을 지정할 수 있어요. 여러 기준을 지정하면 모든 기준이 일치해야 해요. 사용 가능한 매칭 기준은 다음과 같아요.
user: 사용자 이름에 매칭되는 정규식. 예:alice|bobgroup: 사용자가 속한 그룹 중 하나에 매칭되는 정규식. 예:finance|salesprefix: S3 URL 접두사. 전체 버킷 또는 버킷 안의 경로를 지정할 수 있어요. URL은s3://로 시작해야 하며s3a또는s3n에도 매칭돼요. 예:s3://bucket-name/abc/xyz/
보안 매핑은 하나 이상의 구성 설정을 제공해야 해요.
accessKey와secretKey: AWS access key와 secret key. access key나 인스턴스 자격 증명 같은 전역 구성 자격 증명을 덮어써요.iamRole: 사용자가 제공한 역할이 추가 자격 증명으로 지정되지 않았을 때 사용할 IAM 역할. 전역 구성 IAM 역할을 덮어써요. 이 역할은 추가 자격 증명으로 지정될 수 있지만, 명시적으로 지정해도 효과는 없어요.roleSessionName:iamRole과 함께 사용할 선택적 역할 세션 이름.iamRole이 지정될 때만 사용할 수 있어요.roleSessionName에${USER}문자열이 포함되면 그 부분이 현재 세션의 사용자 이름으로 대체돼요. 지정하지 않으면 기본값은trino-session.allowedIamRoles: 추가 자격 증명으로 지정될 수 있는 IAM 역할들. 특정 AWS 계정이 많은 역할을 사용할 권한이 있을 수 있지만, 특정 사용자는 그 역할들의 하위 집합만 사용하도록 허용해야 할 때 유용해요.kmsKeyId: 클라이언트 측 암호화에 사용할 KMS 관리 키의 ID.allowedKmsKeyIds: 추가 자격 증명으로 지정될 수 있는 KMS 관리 키 ID들. 목록에*가 있으면 추가 자격 증명으로 어떤 키든 지정할 수 있어요.sseCustomerKey: 서버 측 암호화를 위한 고객 제공 키(SSE-C).allowedSseCustomerKey: 추가 자격 증명으로 지정될 수 있는 SSE-C 키들. 목록에*가 있으면 추가 자격 증명으로 어떤 키든 지정할 수 있어요.endpoint: S3 스토리지 엔드포인트 서버. 버킷별로 S3 엔드포인트를 덮어쓰는 데 사용할 수 있는 선택적 프로퍼티.region: 연결할 S3 리전. 버킷별로 S3 리전을 덮어쓰는 데 사용할 수 있는 선택적 프로퍼티.
보안 매핑 항목은 JSON 구성에 나열된 순서대로 처리돼요. 따라서 특정 매핑을 덜 특정한 매핑보다 먼저 지정해야 해요. 예를 들어 매핑 목록에 URL 접두사 s3://abc/xyz/ 다음에 s3://abc/를 두어, 버킷 안의 특정 경로에 대해 버킷 안의 다른 경로와는 다른 구성을 허용할 수 있어요. 목록의 마지막 항목에는 매칭 기준을 포함하지 않아 기본 구성을 지정할 수 있어요.
앞선 규칙 외에 기본 매핑에는 선택적 useClusterDefault boolean 프로퍼티를 true로 설정해 기본 S3 구성을 사용할 수 있어요. 다른 구성 설정과 함께 사용할 수는 없어요.
매칭 항목이 없고 기본도 구성되지 않으면 접근이 거부돼요.
구성 JSON은 s3.security-mapping.config-file로 파일에서, 또는 s3.security-mapping.config-uri로 HTTP 엔드포인트에서 읽어요.
예시 JSON 구성:
{
"mappings": [
{
"prefix": "s3://bucket-name/abc/",
"iamRole": "arn:aws:iam::123456789101:role/test_path"
},
{
"user": "bob|charlie",
"iamRole": "arn:aws:iam::123456789101:role/test_default",
"allowedIamRoles": [
"arn:aws:iam::123456789101:role/test1",
"arn:aws:iam::123456789101:role/test2",
"arn:aws:iam::123456789101:role/test3"
]
},
{
"prefix": "s3://special-bucket/",
"accessKey": "AKIAxxxaccess",
"secretKey": "iXbXxxxsecret"
},
{
"prefix": "s3://regional-bucket/",
"iamRole": "arn:aws:iam::123456789101:role/regional-user",
"endpoint": "https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com",
"region": "us-east-1"
},
{
"prefix": "s3://encrypted-bucket/",
"kmsKeyId": "kmsKey_10"
},
{
"user": "test.*",
"iamRole": "arn:aws:iam::123456789101:role/test_users"
},
{
"group": "finance",
"iamRole": "arn:aws:iam::123456789101:role/finance_users"
},
{
"iamRole": "arn:aws:iam::123456789101:role/default"
}
]
}
보안 매핑 프로퍼티 (Security mapping properties)
| 프로퍼티 | 설명 |
|---|---|
s3.security-mapping.enabled |
보안 매핑 기능을 활성화해요. 기본값은 false. 다른 모든 프로퍼티가 사용되려면 true로 설정해야 해요. |
s3.security-mapping.config-file |
보안 매핑을 담은 JSON 구성 파일의 경로. |
s3.security-mapping.config-uri |
보안 매핑을 담은 HTTP 엔드포인트 URI. |
s3.security-mapping.json-pointer |
구성 파일 또는 HTTP 엔드포인트에서 가져온 JSON 안의 매핑을 가리키는 JSON pointer(RFC 6901). 기본값은 문서의 루트. |
s3.security-mapping.iam-role-credential-name |
IAM 역할을 제공하는 데 사용되는 추가 자격 증명의 이름. |
s3.security-mapping.kms-key-id-credential-name |
KMS 관리 키 ID를 제공하는 데 사용되는 추가 자격 증명의 이름. |
s3.security-mapping.sse-customer-key-credential-name |
고객 제공 키가 있는 서버 측 암호화(SSE-C)를 제공하는 데 사용되는 추가 자격 증명의 이름. |
s3.security-mapping.refresh-period |
보안 매핑 구성을 새로 고치는 빈도(시간으로 지정). 기본적으로 구성은 새로 고쳐지지 않아요. |
s3.security-mapping.colon-replacement |
IAM 역할 이름을 추가 자격 증명으로 지정할 때 콜론 문자 대신 사용할 문자(들). 추가 자격 증명 값에서 이 대체 값의 모든 인스턴스는 콜론으로 변환돼요. IAM ARN에서 사용되지 않는 값을 선택하세요. |
레거시 S3 파일시스템에서 마이그레이션 (Migration from legacy S3 file system)
이전 Trino 릴리스에는 fs.hadoop.enabled와 hive.s3.* 프로퍼티로 구성된 카탈로그가 사용하는 레거시 Amazon S3 파일시스템 구현이 포함돼 있었어요. 그 레거시 지원은 제거됐어요. 네이티브 S3 파일시스템 구현을 사용하세요.
카탈로그가 S3용 네이티브 파일시스템 구현을 사용하도록 마이그레이션하려면 카탈로그 구성에서 다음 편집을 해요.
fs.s3.enabled=true카탈로그 구성 프로퍼티를 추가해요.- 카탈로그가 레거시 S3 접근에만
fs.hadoop.enabled를 활성화했다면 그 프로퍼티를 제거해요. - 다음 표를 참고해 기존 레거시 카탈로그 구성 프로퍼티를 해당 네이티브 구성 프로퍼티로 이름을 바꿔요. 별도 표기 외에는 지원되는 구성 값이 동일해요.
| 레거시 프로퍼티 | 네이티브 프로퍼티 | 비고 |
|---|---|---|
hive.s3.aws-access-key |
s3.aws-access-key |
|
hive.s3.aws-secret-key |
s3.aws-secret-key |
|
hive.s3.iam-role |
s3.iam-role |
더 많은 역할 구성 옵션은 앞선 섹션의 s3.role-session-name도 참고하세요. |
hive.s3.external-id |
s3.external-id |
|
hive.s3.endpoint |
s3.endpoint |
값을 올바른 URL로 만들려면 https:// 접두사를 추가해요. |
hive.s3.region |
s3.region |
|
hive.s3.sse.enabled |
없음 | s3.sse.type을 기본값 NONE으로 설정하는 것은 hive.s3.sse.enabled=false와 동일해요. |
hive.s3.sse.type |
s3.sse.type |
|
hive.s3.sse.kms-key-id |
s3.sse.kms-key-id |
|
hive.s3.upload-acl-type |
s3.canned-acl |
지원 값은 앞선 섹션 참고. |
hive.s3.streaming.part-size |
s3.streaming.part-size |
|
hive.s3.proxy.host, hive.s3.proxy.port |
s3.http-proxy |
하나의 URL로 호스트와 포트를 지정해요. 예: localhost:8888. |
hive.s3.proxy.protocol |
s3.http-proxy.secure |
HTTPS를 활성화하려면 TRUE로 설정. |
hive.s3.proxy.non-proxy-hosts |
s3.http-proxy.non-proxy-hosts |
|
hive.s3.proxy.username |
s3.http-proxy.username |
|
hive.s3.proxy.password |
s3.http-proxy.password |
|
hive.s3.proxy.preemptive-basic-auth |
s3.http-proxy.preemptive-basic-auth |
|
hive.s3.sts.endpoint |
s3.sts.endpoint |
|
hive.s3.sts.region |
s3.sts.region |
|
hive.s3.max-error-retries |
s3.max-error-retries |
더 많은 재시도 동작 옵션은 앞선 섹션의 s3.retry-mode도 참고하세요. |
hive.s3.connect-timeout |
s3.socket-connect-timeout |
|
hive.s3.connect-ttl |
s3.connection-ttl |
더 많은 연결 keep-alive 옵션은 앞선 섹션의 s3.connection-max-idle-time도 참고하세요. |
hive.s3.socket-timeout |
s3.socket-timeout |
더 많은 소켓 연결 keep-alive 옵션은 앞선 섹션의 s3.tcp-keep-alive도 참고하세요. |
hive.s3.max-connections |
s3.max-connections |
|
hive.s3.path-style-access |
s3.path-style-access |
|
hive.s3.signer-type |
s3.signer-type |
- 카탈로그 구성에 존재한다면 다음 레거시 구성 프로퍼티를 제거해요.
hive.s3.storage-classhive.s3.signer-classhive.s3.staging-directoryhive.s3.pin-client-to-current-regionhive.s3.ssl.enabledhive.s3.sse.enabledhive.s3.kms-key-idhive.s3.encryption-materials-providerhive.s3.streaming.enabledhive.s3.max-client-retrieshive.s3.max-backoff-timehive.s3.max-retry-timehive.s3.multipart.min-file-sizehive.s3.multipart.min-part-sizehive.s3-file-system-typehive.s3.user-agent-prefix
더 알아보기 (Learn more)
S3 파일시스템 구성을 배웠어요. 이어서 로컬 파일시스템 지원을 살펴보면 좋아요.