Skip to content

Commit

Permalink
포스팅 내용 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
wusub.shin@softcamp.co.kr committed Dec 11, 2024
1 parent fe4ca9f commit 0b1763b
Showing 1 changed file with 81 additions and 0 deletions.
81 changes: 81 additions & 0 deletions pages/msa/add-jwt-verification-proxy-to-istio.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ istiod-8454df4fbb-7z8xz 1/1 Running 0 2m

서비스 간 트래픽의 인증을 설정하는 역할을 한다. 주로 트래픽의 인증 방법(예: mTLS, JWT 등)을 정의한다

**`PeerAuthentication``namespace` 범위로 적용되기에 같은 목적일 경우 하나만 존재하면 된다**

여기서는 `jwt 인증` 만 살펴보겠다

```yaml filename="peer-authentication.yaml"
Expand All @@ -55,6 +57,8 @@ metadata:
name: jwt-authentication
namespace: my-namespace
spec:
mtls:
mode: DISABLE
jwt:
issuer: "https://auth.example.com"
jwksUri: "https://auth.example.com/.well-known/jwks.json"
Expand All @@ -64,14 +68,21 @@ spec:
- `kind` : 리소스의 유형. 여기서는 PeerAuthentication을 정의.
- `metadata.name` : 리소스의 이름.
- `metadata.namespace` : 리소스가 적용될 네임스페이스. 특정 네임스페이스에만 영향을 미침
- `spec.mtls.mode` : 클라이언트, 서버 간의 TLS 상호 인증 기능 비활성화
- `spec.jwt.issuer` : JWT 토큰의 발급자(iss 클레임). 필수.
- `spec.jwt.jwksUri` : JWT 서명 키를 가져오는 URI (JWKS). 이 URI에서 공개 키를 가져와 토큰 검증에 사용.
- `spec.jwt.audiences` : JWT 토큰의 aud 클레임과 일치해야 하는 값. 리스트로 제공하며 여러 Audience를 지정 가능.





### AuthorizationPolicy 란?

요청을 필터링하거나 특정 조건에 맞는 요청만 허용하기 위해 사용

**`AuthorizationPolicy` 는 `app` 별로 적용되기에 적용되어야할 `app` 이 여러개라면 똑같이 여러개의 `AuthorizationPolicy` 를 생성해야한다**

```yaml filename="authorization-policy.yaml"
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
Expand Down Expand Up @@ -105,3 +116,73 @@ spec:
- `to.operation` : 요청의 속성(HTTP 메서드, 경로 등)을 정의.
- `to.methods` : 허용할 HTTP 메서드 (예: GET, POST).
- `to.paths` : 특정 경로를 필터링.



### RequestAuthentication 란?

```yaml filename="requestAuthentication-yaml "
apiVersion: security.istio.io/v1
kind: RequestAuthentication
metadata:
name: httpbin
namespace: foo
spec:
selector:
matchLabels:
app: httpbin
jwtRules:
- issuer: "issuer-foo"
jwksUri: https://example.com/.well-known/jwks.json
```

- `selector` : app: httpbin 라벨이 있는 Pod에 적용
- `jwtRules` : JWT 토큰의 검증 규칙을 정의
- `issuer` : JWT 토큰의 iss 클레임 값과 비교하여 발급자를 검증.
- `jwksUri` : JWT 토큰 서명을 검증하기 위한 공개 키를 포함한 JWKS URI.

## RequestAuthentication + AuthorizationPolicy

```yaml filename="RequestAuthentication"
apiVersion: security.istio.io/v1
kind: RequestAuthentication
metadata:
name: httpbin
namespace: foo
spec:
selector:
matchLabels:
app: httpbin
jwtRules:
- issuer: "issuer-foo"
jwksUri: https://example.com/.well-known/jwks.json
```

```yaml filename="AuthorizationPolicy"
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: httpbin-policy
namespace: foo
spec:
selector:
matchLabels:
app: httpbin
rules:
- from:
- source:
requestPrincipals: ["issuer-foo/subject@example.com"]
```

**RequestAuthentication**은 HTTP 요청에서 JWT 검증을 수행하기 위한 리소스.
**PeerAuthentication**은 서비스 간 mTLS 인증 또는 네트워크 수준 인증을 설정하는 데 사용.


### 등록 방법

`kubectl apply -f authorization-policy.yaml`
`kubectl apply -f peer-authentication.yaml`

이런식으로 등록할 수 있다


0 comments on commit 0b1763b

Please sign in to comment.