서비스 계정 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"
}

더 알아보기 (Learn more)