Teleport는 각 요청에 대해 Teleport의 권한으로 서명된 JWT 토큰을
대상 애플리케이션의 Teleport-Jwt-Assertion
헤더와 함께 전송합니다.
JWT 토큰을 사용하여 인증된 Teleport 사용자, 사용자의 역할 및 특성에 대한 정보를 얻을 수 있습니다. 이를 통해 다음을 수행할 수 있습니다:
- Teleport의 신원/역할/특성을 웹 애플리케이션의 신원/역할/특성에 매핑합니다.
- Teleport 신원을 신뢰하여 사용자를 애플리케이션에 자동으로 로그인 시킵니다.
JWT 소개
JSON 웹 토큰(JWT)은 정보를 당사자 간에 JSON 객체로 안전하게 전송하는 방법을 정의하는 개방형 표준입니다.
자세한 설명은 https://jwt.io/introduction/를 방문하세요.
Teleport JWT는 세 개의 섹션을 포함합니다:
- 헤더
- 페이로드
- 서명
헤더
예제 헤더
{
"alg": "RS256",
"typ": "JWT"
}
페이로드
예제 페이로드
{
"aud": [
"http://127.0.0.1:34679"
],
"iss": "aws",
"nbf": 1603835795,
"sub": "alice",
// Teleport 사용자 이름.
"username": "alice"
// Teleport 사용자 역할.
"roles": [
"admin"
],
// Teleport 사용자 특성.
"traits": {
"logins": [
"root",
"ubuntu",
"ec2-user"
]
},
// Teleport 신원 만료.
"exp": 1603943800,
}
JWT는 다음 헤더와 함께 전송됩니다: Teleport-Jwt-Assertion
.
예제 Teleport JWT 주장
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiaHR0cDovLzEyNy4wLjAuMTozNDY3OSJdLCJleHAiOjE2MDM5NDM4MDAsImlzcyI6ImF3cyIsIm5iZiI6MTYwMzgzNTc5NSwicm9sZXMiOlsiYWRtaW4iXSwic3ViIjoiYmVuYXJlbnQiLCJ1c2VybmFtZSI6ImJlbmFyZW50In0.PZGUyFfhEWl22EDniWRLmKAjb3fL0D4cTmkxEfb-Q30hVMzVhka5WB8AUsPsLPVhTzsQ6Nkk1DnXHdz6oxrqDDfumuRrDnpJpjiXj_l0D3bExrchN61enzBHxSD13VkRIqP1V6l4i8yt8kXDIBWc-QejLTodA_GtczkDfnnpuAfaxIbD7jEwF27KI4kZu7uES9LMu2iCLdV9ZqarA-6HeDhXPA37OJ3P6eVQzYpgaOBYro5brEiVpuJLr1yA0gncmR4FqmhCpCj-KmHi2vmjmJAuuHId6HZoEZJjC9IAsNlrSA4GHH9j82o7FF1F4J2s38bRy3wZv46MT8X8-QBSpg
JWT 주입
헤더 패스스루(headers passthrough)
구성을 사용하여 {{internal.jwt}}
템플릿 변수를 통해
JWT 토큰을 모든 헤더에 주입할 수 있습니다.
이 변수는 위에서 설명한 사용자 신원 정보를 포함하는
Teleport JWT CA로 서명된 JWT 토큰으로 교체됩니다.
예를 들어:
- name: "elasticsearch"
uri: https://localhost:4321
public_addr: elastic.example.com
rewrite:
headers:
- "Authorization: Bearer {{internal.jwt}}"
JWT 검증
Teleport는 JWT가 신뢰할 수 있는지 확인하기 위해
JSON 웹 키 세트(jwks
) 엔드포인트를 제공합니다.
이 엔드포인트는 https://[cluster-name]:3080/.well-known/jwks.json
입니다:
예제 jwks.json
{
"keys": [
{
"kty": "RSA",
"n": "xk-0VSVZY76QGqeN9TD-FJp32s8jZrpsalnRoFwlZ_JwPbbd5-_bPKcz8o2tv1eJS0Ll6ePxRCyK68Jz2UC4V4RiYaqJCRq_qVpDQMB1sQ7p9M-8qvT82FJ-Rv-W4RNe3xRmBSFDYdXaFm51Uk8OIYfv-oZ0kGptKpkNY390aJOzjHPH2MqSvhk9Xn8GwM8kEbpSllavdJCRPCeNVGJXiSCsWrOA_wsv_jqBP6g3UOA9GnI8R6HR14OxV3C184vb3NxIqxtrW0C4W6UtSbMDcKcNCgajq2l56pHO8In5GoPCrHqlo379LE5QqpXeeHj8uqcjeGdxXTuPrRq1AuBpvQ",
"e": "AQAB",
"alg": "RS256"
}
]
}
Teleport의 JWT 토큰을 검증하는 데 사용되는 예제 Go 프로그램은 GitHub에서 확인하세요.
애플리케이션 가이드
많은 기존 웹 애플리케이션 및 API가 JWT 인증을 지원합니다.
현재 사용 가능한 다음 가이드가 있습니다: