# Project 권한(Role)과 예제

## 개념

Project Role은 특정 Project에만 유효한 Role입니다. 예를 들어 test1 Project에 생성한 Role은 test1에만 유효하고 다른 Project에는 사용할 수 없습니다. 그리고 web UI로그인은 못하고 JWT방식만 지원합니다.&#x20;

## 사용 목적

Argo CD전체 관리 권한보다는 Project만 관리할 수 있는 제한된 권한을 설정할 때 적합합니다.

## 생성 방법

web UI, Argo CD CLI, appproject CRD 모두 가능합니다.&#x20;

web UI에서는 Project화면 왼쪽 위에 생성버튼이 있습니다.

<figure><img src="https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FnkEXGiKsj1PNfs6ik8bu%2Fimage.png?alt=media&#x26;token=d3cb8cd3-4d35-47a8-9137-5e4ee07bb32b" alt=""><figcaption></figcaption></figure>

Role이름과 설명을 입력하면 Role을 생성할 수 있습니다.

<figure><img src="https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FAIuWm1MN2ppmTA2xQPdj%2Fimage.png?alt=media&#x26;token=c66b48a4-62e8-411e-9152-904eaaad2005" alt=""><figcaption></figcaption></figure>

생성된 Role은 Project Role탭에서 확인할 수 있습니다.

<figure><img src="https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2Fv8yBcLfr4tESUzSxumzG%2Fimage.png?alt=media&#x26;token=9c465578-9e56-4416-b6ae-edf403765e91" alt=""><figcaption></figcaption></figure>

## Policy 설정

지금 생성한 Role은 권한설정이 안되어 있어 권한이 아무것도 없습니다. 권한 설정은 Project를 설정 후에 Global Role([role](https://sungwook-choi.gitbook.io/argocd/user/role "mention"))처럼 설정하면 됩니다.

<figure><img src="https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FGqKm2rd8bSh23q8L6azL%2Fimage.png?alt=media&#x26;token=d6d14e2e-62d2-4408-a11e-cb2e7d2dc625" alt=""><figcaption></figcaption></figure>

## JWT 생성

Project Role은 곧바로 Project에 적용되어 사용되지 않고 JWT를 발급받아 사용할 수 있습니다. JWT는 Project Role설정 화면에서 생성할 수 있습니다. 성성된 JWT는 설정화면이 닫힌 후에 알 수 없으므로 잘 보관해야 합니다.

<figure><img src="https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FQ292TPiziU4XEE64hKbH%2Fimage.png?alt=media&#x26;token=33d10696-901e-4d67-9b99-f769343c7894" alt=""><figcaption></figcaption></figure>

## JWT 사용 예

JWT는 WEB UI에 사용할 수 없고 Argo CLI 또는 REST API, SDK에서 사용할 수 있습니다. 저는 Argo CD CLI 사용 예를 소개드릴게요.

먼저 생성한 JWT를 환경변수에 설정합니다.&#x20;

```shell
TOKEN=<TOKEN>
```

<figure><img src="https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2Fbyat3KrNclwOiFxfxj3W%2Fimage.png?alt=media&#x26;token=6753b168-4457-4c94-99c7-f9c3e2871228" alt=""><figcaption></figcaption></figure>

argocd account can-i로 test1 Project의 Application 조회(get)이 가능한지 확인할 수 있습니다. Argo CD login을 하지 않아도 TOKEN으로 인증과 인가가 가능해졌습니다!.

```shell
argocd account can-i get applications 'test1/*' --auth-token $TOKENl
```

<figure><img src="https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FON2DxN9Fa3b9IZLdDx6p%2Fimage.png?alt=media&#x26;token=f9fe4680-5969-4bf7-b019-5dfc4dca6ce4" alt=""><figcaption></figcaption></figure>

test1 Project에 Application 생성 권한이 있는지 확인해볼까요? 당연히 create application Policy를 추가하지 않았으므로 No 메세지가 나옵니다.

```shell
argocd account can-i create applications 'test1/*' --auth-token $TOKEN
```

<figure><img src="https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FG0zyeoMw8voMi811QYSW%2Fimage.png?alt=media&#x26;token=d172fd63-cd59-465e-93df-67ec18c6ea3d" alt=""><figcaption></figcaption></figure>

WEB UI에서 test1 Project의 Appliction을 생성할 수 있도록 create Policy를 추가합니다.

<figure><img src="https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FKEebVmGNFYv0q4BegYqo%2Fimage.png?alt=media&#x26;token=138f5604-4516-478c-a46c-7e753e08276b" alt=""><figcaption></figcaption></figure>

그리고 다시 Application 생성 권한을 검사하면 yes가 나옵니다.

```
argocd account can-i create  applications 'test1/*' --auth-token $TOKEN
```

<figure><img src="https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FZGeSS0vDeW7fcD6zjr5k%2Fimage.png?alt=media&#x26;token=46a856af-c579-401a-a435-267df710579e" alt=""><figcaption></figcaption></figure>
