서비스 계정 API
서비스 계정 API
이 문서는 Grafana에서 서비스 계정을 검색, 생성, 조회, 갱신, 삭제하고 그 토큰을 관리하는 API를 설명해요. Grafana Enterprise를 실행 중이라면 일부 엔드포인트에 특정 권한이 필요합니다. 자세한 내용은 역할 기반 접근 제어 권한을 참고하세요.
출처: 문서
본문
참고: Grafana 13부터
/api엔드포인트는/apis경로를 위해 더 이상 사용되지 않습니다(deprecated). Grafana가 기존 API를 마이그레이션하는 동안 현재 여러분이 사용하는 레거시 API와 정확히 일치하는 항목이 없을 수도 있어요. 이 변경은 현재 설정을 방해하거나 깨지 않습니다. 레거시 API는 비활성화되지 않으며 완전히 접근 가능하고 정상 작동하지만,/api경로는 더 이상 업데이트되지 않습니다. 자세한 내용은 Grafana의 새 API 구조를 참고하세요.
Grafana Cloud 인스턴스에서는 Bearer 토큰으로 인증하세요. 이 섹션의 예시는 온프레미스(On-Prem) Grafana 인스턴스용인 Basic 인증을 참조합니다.
페이징으로 서비스 계정 검색하기
GET /api/serviceaccounts/search?perpage=10&page=1&query=myserviceaccount
필요 권한 (소개 참고):
| 액션 | 범위 |
|---|---|
| serviceaccounts:read | n/a |
예시 요청:
GET /api/serviceaccounts/search?perpage=10&page=1&query=mygraf HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic ***
perpage 파라미터의 기본값은 1000이고 page 파라미터의 기본값은 1이에요. 응답의 totalCount 필드는 사용자 목록 페이징에 사용할 수 있어요. 예를 들어 totalCount가 100명이고 perpage를 10으로 설정하면 사용자 페이지는 10개입니다. query 파라미터는 선택사항이며, 쿼리 값이 name 중 하나에 포함된 결과를 반환합니다. 공백이 있는 쿼리 값은 URL 인코딩해야 해요(예: query=Jane%20Doe).
예시 응답:
HTTP/1.1 200
Content-Type: application/json
{
"totalCount": 2,
"serviceAccounts": [
{
"id": 1,
"name": "grafana",
"login": "sa-grafana",
"orgId": 1,
"isDisabled": false,
"role": "Viewer",
"tokens": 0,
"avatarUrl": "/avatar/85ec38023d90823d3e5b43ef35646af9",
"accessControl": {
"serviceaccounts:delete": true,
"serviceaccounts:read": true,
"serviceaccounts:write": true
}
},
{
"id": 2,
"name": "test",
"login": "sa-test",
"orgId": 1,
"isDisabled": false,
"role": "Viewer",
"tokens": 0,
"avatarUrl": "/avatar/8ea890a677d6a223c591a1beea6ea9d2",
"accessControl": {
"serviceaccounts:delete": true,
"serviceaccounts:read": true,
"serviceaccounts:write": true
}
}
],
"page": 1,
"perPage": 10
}
서비스 계정 생성하기
POST /api/serviceaccounts
필요 권한:
| 액션 | 범위 |
|---|---|
| serviceaccounts:create | n/a |
예시 요청:
POST /api/serviceaccounts HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic ***
{
"name": "grafana",
"role": "Viewer",
"isDisabled": false
}
예시 응답:
HTTP/1.1 201
Content-Type: application/json
{
"id": 1,
"name": "test",
"login": "sa-test",
"orgId": 1,
"isDisabled": false,
"createdAt": "2022-03-21T14:35:33Z",
"updatedAt": "2022-03-21T14:35:33Z",
"avatarUrl": "/avatar/8ea890a677d6a223c591a1beea6ea9d2",
"role": "Viewer",
"teams": []
}
고정 역할과 커스텀 역할은 RBAC HTTP API로 서비스 계정에 설정할 수 있어요.
ID로 서비스 계정 가져오기
GET /api/serviceaccounts/:id
필요 권한:
| 액션 | 범위 |
|---|---|
| serviceaccounts:read | serviceaccounts:id:* |
예시 요청:
GET /api/serviceaccounts/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic ***
예시 응답:
HTTP/1.1 200
Content-Type: application/json
{
"id": 1,
"name": "test",
"login": "sa-test",
"orgId": 1,
"isDisabled": false,
"createdAt": "2022-03-21T14:35:33Z",
"updatedAt": "2022-03-21T14:35:33Z",
"avatarUrl": "/avatar/8ea890a677d6a223c591a1beea6ea9d2",
"role": "Viewer",
"teams": []
}
서비스 계정 갱신하기
PATCH /api/serviceaccounts/:id
필요 권한:
| 액션 | 범위 |
|---|---|
| serviceaccounts:write | serviceaccounts:id:* |
예시 요청:
PATCH /api/serviceaccounts/2 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic ***
{
"name": "test",
"role": "Editor"
}
예시 응답:
HTTP/1.1 200
Content-Type: application/json
{
"id": 2,
"name": "test",
"login": "sa-grafana",
"orgId": 1,
"isDisabled": false,
"createdAt": "2022-03-21T14:35:44Z",
"updatedAt": "2022-03-21T14:35:44Z",
"avatarUrl": "/avatar/8ea890a677d6a223c591a1beea6ea9d2",
"role": "Editor",
"teams": []
}
고정 역할과 커스텀 역할은 RBAC HTTP API로 서비스 계정에 설정할 수 있어요.
서비스 계정 삭제하기
DELETE /api/serviceaccounts/:id
필요 권한:
| 액션 | 범위 |
|---|---|
| serviceaccounts:delete | serviceaccounts:id:* |
예시 요청:
DELETE /api/serviceaccounts/2 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic ***
예시 응답:
HTTP/1.1 200
Content-Type: application/json
{
"message": "Service account deleted"
}
서비스 계정 토큰 가져오기
GET /api/serviceaccounts/:id/tokens
필요 권한:
| 액션 | 범위 |
|---|---|
| serviceaccounts:read | serviceaccounts:id:* |
예시 요청:
GET /api/serviceaccounts/2/tokens HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic ***
예시 응답:
HTTP/1.1 200
Content-Type: application/json
[
{
"id": 1,
"name": "grafana",
"role": "Viewer",
"created": "2022-03-23T10:31:02Z",
"expiration": null,
"secondsUntilExpiration": 0,
"hasExpired": false
}
]
서비스 계정 토큰 생성하기
POST /api/serviceaccounts/:id/tokens
필요 권한:
| 액션 | 범위 |
|---|---|
| serviceaccounts:write | serviceaccounts:id:* |
예시 요청:
POST /api/serviceaccounts/2/tokens HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic ***
{
"name": "grafana",
"secondsToLive": 604800
}
secondsToLive의 기본값은 0이며, 이는 서비스 계정 토큰이 만료되지 않는다는 뜻이에요.
예시 응답:
HTTP/1.1 200
Content-Type: application/json
{
"id": 7,
"name": "grafana",
"key": "eyJrIj...oxfQ=="
}
서비스 계정 토큰 삭제하기
DELETE /api/serviceaccounts/:id/tokens/:tokenId
필요 권한:
| 액션 | 범위 |
|---|---|
| serviceaccounts:write | serviceaccounts:id:* |
예시 요청:
DELETE /api/serviceaccounts/2/tokens/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic ***
예시 응답:
HTTP/1.1 200
Content-Type: application/json
{
"message": "API key deleted"
}