본문 바로가기
WIKI 기술 지식 베이스

S3 게이트웨이 임시 자격 증명

원문 보기 위키 갱신

lakeFS Team과 lakeFS Enterprise에서 사용할 수 있어요. 무료 체험을 시작하거나 문의하세요.

대부분의 S3 클라이언트는 임시 자격 증명으로 S3 게이트웨이에 요청에 서명할 수 있어요. 그러면 워크로드가 손으로 프로비저닝하고, 저장하고, 로테이션해야 하는 수명이 긴 lakeFS access key를 들고 있지 않아도 돼요. lakeFS는 AWS STS AssumeRoleWithWebIdentity 액션을 제공해서, 이미 아이덴티티 토큰을 보유한 워크로드가 그것을 단기 S3 자격 증명으로 교환하고 S3 자격 증명이 받아들여지는 어디서든 사용할 수 있어요. lakeFS는 그 토큰 뒤의 principal의 권한을 계속 강제해요.

출처: S3 게이트웨이 임시 자격 증명

본문

교환이 동작하는 방식

클라이언트는 lakeFS 서버 URL(예: https://lakefs.example.com)에서 AssumeRoleWithWebIdentity를 호출하고, 자신의 아이덴티티 토큰을 WebIdentityToken 파라미터로 넘겨요. lakeFS는 토큰을 검증하고 ASIA로 시작하는 access key ID, secret access key, 세션 토큰, 만료 시각을 반환해요. 클라이언트는 이 자격 증명으로 S3 게이트웨이 요청에 서명하고, AWS STS가 발급한 자격 증명에서와 같이 모든 요청에 세션 토큰을 함께 보내요.

lakeFS는 두 종류의 아이덴티티 토큰을 받아들여요:

  • lakeFS 로그인 토큰 - 로그인한 lakeFS 사용자의 권한을 담아요.

  • JWT Login에 설정된 아이덴티티 프로바이더가 발급한 JWT - 그 groups 클레임이 매핑하는 lakeFS 그룹의 정책을 담아요. JWT Login이 반환한 lakeFS bearer 토큰도 받아들여져요.

STS API는 RoleArn 파라미터를 요구하고, AWS 클라이언트는 그것이 없으면 교환을 시작하지 않지만, lakeFS는 그 값을 무시해요. 그래서 arn:aws:iam::000000000000:role/lakefs 같은 잘 구성된 값이면 충분해요. Policy나 PolicyArns로 전달되는 세션 정책은 거부돼요. lakeFS가 그것들로 principal의 권한을 좁힐 수 없기 때문이에요.

AWS SDK 기반 클라이언트는 환경에서 토큰 파일과 STS 엔드포인트를 발견하면 보통 스스로 교환을 수행해요:

export AWS_WEB_IDENTITY_TOKEN_FILE=/path/to/token
export AWS_ROLE_ARN=arn:aws:iam::000000000000:role/lakefs
export AWS_ENDPOINT_URL_STS=https://lakefs.example.com
export AWS_ENDPOINT_URL_S3=https://lakefs.example.com

STS 엔드포인트는 gateways.s3.domain_name 호스트가 아니라 lakeFS 서버 URL을 가리키도록 하세요. lakeFS는 그 호스트로 오는 모든 요청을 S3 요청으로 처리하거든요. 그리고 STS 요청은 서명하지 않은 채 두세요. AWS SDK에서 이 액션의 기본값이에요. 일부 클라이언트는 STS 엔드포인트를 HTTPS로만 호출하므로, 클라이언트가 엔드포인트를 잡아내지 않는다면 lakeFS를 TLS로 제공하세요.

자격 증명 수명과 취소

자격 증명은 기본으로 1시간 후 만료되고, 클라이언트는 DurationSeconds 파라미터로 15분에서 12시간 사이를 요청할 수 있어요. 자격 증명은 교환의 원천이 된 아이덴티티 토큰보다 오래 살지 못해요. 그래서 10분 후 만료되는 토큰은 같은 시각에 만료되는 자격 증명을 만들고, 아이덴티티 프로바이더 JWT로 교환된 자격 증명은 JWT Login의 session_max_ttl 설정으로도 제한돼요.

lakeFS는 임시 자격 증명을 발급할 때 아무 것도 저장하지 않아요. 그래서 취소 방식은 교환의 원천이 된 토큰에 따라 달라져요. lakeFS 사용자를 위해 발급된 자격 증명은 그 사용자가 비활성화되거나 삭제되는 즉시 동작을 멈추고, 사용자 정책의 변경은 다음 요청에 적용돼요. JWT Login bearer 토큰으로 교환된 자격 증명은 그 세션이 삭제되거나 만료되는 즉시 동작을 멈춰요(Revocation 참고). 반면 아이덴티티 프로바이더 JWT로 교환된 자격 증명은 교환 시점에 해석된 그룹 정책을 담고 만료될 때까지 유효해요.

임시 자격 증명 비활성화하기

교환은 기본으로 활성화돼 있어요. gateways.s3.sts.enabled를 false로 설정하면 AssumeRoleWithWebIdentity 제공이 중단되고, 이전에 발급된 임시 자격 증명도 S3 게이트웨이가 거부해요. auth.allowed_authentication_methods에 access_key가 포함되지 않으면 lakeFS는 교환도 거부해요.

더 알아보기 (Learn more)

공식 문서의 원문은 https://docs.lakefs.io/security/s3-temporary-credentials/ 에서 확인할 수 있어요.