배포 키 API
GitLab v19.5Offering: GitLab Self-Managed, GitLab Dedicated
요약
일부 엔드포인트는 응답의 일부로 공개 키 지문을 반환합니다. 다음 속성에 배포 키 지문이 들어 있습니다. GitLab 인스턴스의 모든 프로젝트에 걸쳐 배포 키 전체 목록을 가져옵니다. GitLab 인스턴스의 배포 키를 생성합니다.
이 API로 배포 키를 다룹니다.
배포 키 지문#
일부 엔드포인트는 응답의 일부로 공개 키 지문을 반환합니다. 이 지문으로 배포 키를 생성한 사용자를 식별할 수 있습니다. 자세한 내용은 배포 키 지문으로 사용자 조회를 참고합니다.
다음 속성에 배포 키 지문이 들어 있습니다.
fingerprint: MD5 해시를 사용합니다. FIPS가 활성화된 시스템에서는 사용할 수 없습니다.fingerprint_sha256: SHA256 해시를 사용합니다.
모든 배포 키 조회#
GitLab 인스턴스의 모든 프로젝트에 걸쳐 배포 키 전체 목록을 가져옵니다. 이 엔드포인트는 관리자 액세스 권한이 필요하며, GitLab.com에서는 사용할 수 없습니다.
GET /deploy_keys
지원되는 속성:
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
public |
boolean | No | 공개된 배포 키만 반환합니다. 기본값은 false 입니다. |
요청 예시:
curl --request GET \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/deploy_keys?public=true"
응답 예시:
[
{
"id": 1,
"title": "Public key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==",
"fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9",
"fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU",
"created_at": "2013-10-02T10:12:29Z",
"expires_at": null,
"projects_with_write_access": [
{
"id": 73,
"description": null,
"name": "project2",
"name_with_namespace": "Sidney Jones / project2",
"path": "project2",
"path_with_namespace": "sidney_jones/project2",
"created_at": "2021-10-25T18:33:17.550Z"
},
{
"id": 74,
"description": null,
"name": "project3",
"name_with_namespace": "Sidney Jones / project3",
"path": "project3",
"path_with_namespace": "sidney_jones/project3",
"created_at": "2021-10-25T18:33:17.666Z"
}
],
"projects_with_readonly_access": []
},
{
"id": 3,
"title": "Another Public key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDIJFwIL6YNcCgVBLTHgM6hzmoL5vf0ThDKQMWT3HrwCjUCGPwR63vBwn6+/Gx+kx+VTo9FuojzR0O4XfwD3LrYA+oT3ETbn9U4e/VS4AH/G4SDMzgSLwu0YuPe517FfGWhWGQhjiXphkaQ+6bXPmcASWb0RCO5+pYlGIfxv4eFGQ==",
"fingerprint": "0b:cf:58:40:b9:23:96:c7:ba:44:df:0e:9e:87:5e:75",
"": "SHA256:lGI/Ys/Wx7PfMhUO1iuBH92JQKYN+3mhJZvWO4Q5ims",
"created_at": "2013-10-02T11:12:29Z",
"expires_at": null,
"projects_with_write_access": [],
"projects_with_readonly_access": [
{
"id": 74,
"description": null,
"name": "project3",
"name_with_namespace": "Sidney Jones / project3",
"path": "project3",
"path_with_namespace": "sidney_jones/project3",
"created_at": "2021-10-25T18:33:17.666Z"
}
]
}
]
배포 키 추가#
히스토리
- GitLab 17.5에서 도입되었습니다.
GitLab 인스턴스의 배포 키를 생성합니다. 이 엔드포인트는 관리자 액세스 권한이 필요합니다.
POST /deploy_keys
지원되는 속성:
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
key |
string | yes | 새 배포 키 |
title |
string | yes | 새 배포 키의 제목 |
expires_at |
datetime | no | 배포 키의 만료일입니다. 값을 지정하지 않으면 만료되지 않습니다. ISO 8601 형식(2024-12-31T08:00:00Z)이어야 합니다 |
요청 예시:
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--header "Content-Type: application/json" \
--data '{"title": "My deploy key", "key": "ssh-rsa AAAA...", "expires_at": "2024-12-31T08:00:00Z"}' \
--url "https://gitlab.example.com/api/v4/deploy_keys/"
응답 예시:
{
"id": 5,
"title": "My deploy key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==",
"fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9",
"fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU",
"usage_type": "auth_and_signing",
"created_at": "2024-10-03T01:32:21.992Z",
"expires_at": "2024-12-31T08:00:00.000Z"
}
프로젝트의 배포 키 조회#
프로젝트의 배포 키 목록을 가져옵니다.
GET /projects/:id/deploy_keys
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
integer or string | yes | 프로젝트의 ID 또는 URL 인코딩된 경로 |
curl --request GET \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/deploy_keys"
응답 예시:
[
{
"id": 1,
"title": "Public key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==",
"fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9",
"fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU",
"created_at": "2013-10-02T10:12:29Z",
"expires_at": null,
"can_push": false
},
{
"id": 3,
"title": "Another Public key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDIJFwIL6YNcCgVBLTHgM6hzmoL5vf0ThDKQMWT3HrwCjUCGPwR63vBwn6+/Gx+kx+VTo9FuojzR0O4XfwD3LrYA+oT3ETbn9U4e/VS4AH/G4SDMzgSLwu0YuPe517FfGWhWGQhjiXphkaQ+6bXPmcASWb0RCO5+pYlGIfxv4eFGQ==",
"fingerprint": "0b:cf:58:40:b9:23:96:c7:ba:44:df:0e:9e:87:5e:75",
"": "SHA256:lGI/Ys/Wx7PfMhUO1iuBH92JQKYN+3mhJZvWO4Q5ims",
"created_at": "2013-10-02T11:12:29Z",
"expires_at": null,
"can_push": false
}
]
사용자의 프로젝트 배포 키 조회#
지정한 사용자(요청 대상)와 인증된 사용자(요청자)가 공통으로 가진 프로젝트 배포 키 목록을 가져옵니다. 요청자와 요청 대상의 공통 프로젝트에서 활성화된 프로젝트 키만 조회합니다.
GET /users/:id_or_username/project_deploy_keys
매개변수:
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id_or_username |
string | yes | 프로젝트 배포 키를 조회할 대상 사용자의 ID 또는 사용자 이름입니다. |
[
{
"id": 1,
"title": "Key A",
"created_at": "2022-05-30T12:28:27.855Z",
"expires_at": null,
"key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILkYXU2fVeO4/0rDCSsswP5iIX2+B6tv15YT3KObgyDl Key",
"fingerprint": "40:8e:fa:df:70:f7:a7:06:1e:0d:6f:ae:f2:27:92:01",
"fingerprint_sha256": "SHA256:Ojq2LZW43BFK/AMP81jBkDGn9YpPWYRNcViKBB44LPU"
},
{
"id": 2,
"title": "Key B",
"created_at": "2022-05-30T13:34:56.219Z",
"expires_at": null,
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==",
"fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9",
"": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU"
}
]
curl --request GET \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/users/20/project_deploy_keys"
응답 예시:
[
{
"id": 1,
"title": "Key A",
"created_at": "2022-05-30T12:28:27.855Z",
"expires_at": "2022-10-30T12:28:27.855Z",
"key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILkYXU2fVeO4/0rDCSsswP5iIX2+B6tv15YT3KObgyDl Key",
"fingerprint": "40:8e:fa:df:70:f7:a7:06:1e:0d:6f:ae:f2:27:92:01",
"fingerprint_sha256": "SHA256:Ojq2LZW43BFK/AMP81jBkDGn9YpPWYRNcViKBB44LPU"
}
]
배포 키 조회#
지정한 배포 키를 조회합니다.
GET /projects/:id/deploy_keys/:key_id
매개변수:
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
integer or string | yes | 프로젝트의 ID 또는 URL 인코딩된 경로 |
key_id |
integer | yes | 배포 키의 ID |
curl --request GET \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/deploy_keys/1"
응답 예시:
{
"id": 1,
"title": "Public key",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDNJAkI3Wdf0r13c8a5pEExB2YowPWCSVzfZV22pNBc1CuEbyYLHpUyaD0GwpGvFdx2aP7lMEk35k6Rz3ccBF6jRaVJyhsn5VNnW92PMpBJ/P1UebhXwsFHdQf5rTt082cSxWuk61kGWRQtk4ozt/J2DF/dIUVaLvc+z4HomT41fQ==",
"fingerprint": "4a:9d:64:15:ed:3a:e6:07:6e:89:36:b3:3b:03:05:d9",
"fingerprint_sha256": "SHA256:Jrs3LD1Ji30xNLtTVf9NDCj7kkBgPBb2pjvTZ3HfIgU",
"created_at": "2013-10-02T10:12:29Z",
"expires_at": null,
"can_push": false
}
프로젝트에 배포 키 추가#
지정한 프로젝트에 배포 키를 추가합니다.
해당 배포 키가 다른 프로젝트에 이미 있으면, 원본 배포 키에 같은 사용자가 접근할 수 있는 경우에만 현재 프로젝트에 연결됩니다.
POST /projects/:id/deploy_keys
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
integer or string | yes | 프로젝트의 ID 또는 URL 인코딩된 경로 |
key |
string | yes | 새 배포 키 |
title |
string | yes | 새 배포 키의 제목 |
can_push |
boolean | no | 배포 키가 프로젝트 리포지터리에 푸시할 수 있는지 여부 |
expires_at |
datetime | no | 배포 키의 만료일입니다. 값을 지정하지 않으면 만료되지 않습니다. ISO 8601 형식(2019-03-15T08:00:00Z)이어야 합니다 |
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--header "Content-Type: application/json" \
--data '{"title": "My deploy key", "key": "ssh-rsa AAAA...", "can_push": true}' \
--url "https://gitlab.example.com/api/v4/projects/5/deploy_keys/"
응답 예시:
{
"key": "ssh-rsa AAAA...",
"id": 12,
"title": "My deploy key",
"can_push": true,
"created_at": "2015-08-29T12:44:31.550Z",
"expires_at": null
}
배포 키 업데이트#
프로젝트의 배포 키를 업데이트합니다.
PUT /projects/:id/deploy_keys/:key_id
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
integer or string | yes | 프로젝트의 ID 또는 URL 인코딩된 경로 |
key_id |
integer | yes | 배포 키의 ID |
can_push |
boolean | no | 배포 키가 프로젝트 리포지터리에 푸시할 수 있는지 여부 |
title |
string | no | 새 배포 키의 제목 |
can_push 또는 title 중 하나 이상을 지정해야 합니다.
curl --request PUT \
--header "PRIVATE-TOKEN: <your_access_token>" \
--header "Content-Type: application/json" \
--data '{"title": "New deploy key", "can_push": true}' \
--url "https://gitlab.example.com/api/v4/projects/5/deploy_keys/11"
응답 예시:
{
"id": 11,
"title": "New deploy key",
"key": "ssh-rsa AAAA...",
"created_at": "2015-08-29T12:44:31.550Z",
"expires_at": null,
"can_push": true
}
배포 키 삭제#
프로젝트에서 배포 키를 제거합니다. 해당 배포 키를 이 프로젝트에서만 사용하고 있으면 시스템에서 삭제됩니다.
DELETE /projects/:id/deploy_keys/:key_id
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
integer or string | yes | 프로젝트의 ID 또는 URL 인코딩된 경로 |
key_id |
integer | yes | 배포 키의 ID |
curl --request DELETE \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/deploy_keys/13"
배포 키 활성화#
프로젝트에서 배포 키를 사용할 수 있도록 활성화합니다. 성공하면 상태 코드 201과 함께 활성화된 키를 반환합니다.
POST /projects/:id/deploy_keys/:key_id/enable
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
id |
integer or string | yes | 프로젝트의 ID 또는 URL 인코딩된 경로 |
key_id |
integer | yes | 배포 키의 ID |
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/5/deploy_keys/12/enable"
응답 예시:
{
"key": "ssh-rsa AAAA...",
"id": 12,
"title": "My deploy key",
"created_at": "2015-08-29T12:44:31.550Z",
"expires_at": null
}
여러 프로젝트에 배포 키 추가#
같은 그룹에 속한 여러 프로젝트에 동일한 배포 키를 추가하려면 API로 처리할 수 있습니다.
먼저 대상 프로젝트의 ID를 확인합니다. 모든 프로젝트를 조회하는 방법은 다음과 같습니다.
curl --request GET \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects"
또는 그룹의 ID를 확인합니다.
curl --request GET \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/groups"
그다음 해당 그룹의 모든 프로젝트를 조회합니다(예: 그룹 1234).
curl --request GET \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/groups/1234"
이렇게 확인한 ID로 모든 프로젝트에 동일한 배포 키를 추가합니다.
for project_id in 321 456 987; do
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--header "Content-Type: application/json" \
--data '{"title": "my key", "key": "ssh-rsa AAAA..."}' \
--url "https://gitlab.example.com/api/v4/projects/${project_id}/deploy_keys"
done