이 페이지에서는 Google Cloud Console, gcloud
명령줄 도구, Identity and Access Management API 또는 Google Cloud 클라이언트 라이브러리 중 하나를 사용하여 서비스 계정 키를 만들고 관리하는 방법을 설명합니다.
이 가이드 기본 요건
필수 권한
사용자가 서비스 계정 키를 관리할 수 있게 하려면 서비스 계정 키 관리자 역할(roles/iam.serviceAccountKeyAdmin
)을 부여합니다. 자세한 내용은 서비스 계정 역할을 참조하세요.
IAM 기본 역할에는 서비스 계정 키를 관리할 수 있는 권한도 포함되어 있습니다. 프로덕션 환경에서는 기본 역할을 부여하지 말아야 하지만 개발 환경이나 테스트 환경에서는 부여해도 됩니다.
서비스 계정 키 만들기
다른 플랫폼이나 온프레미스와 같이 Google Cloud 외부에서 서비스 계정을 사용하려면 먼저 서비스 계정의 ID를 설정해야 합니다. 공개 키/비공개 키 쌍을 통해 안전하게 제공할 수 있습니다.
Cloud Console, gcloud
도구 또는 serviceAccounts.keys.create()
메서드를 사용하거나 클라이언트 라이브러리 중 하나를 사용하여 서비스 계정 키를 만들 수 있습니다.
서비스 계정은 최대 10개의 키를 가질 수 있습니다.
아래 예시에서 sa-name
은 서비스 계정의 이름이고, project-id
는 Google Cloud 프로젝트의 ID입니다. Cloud Console의 서비스 계정 페이지에서 sa-name@project-id.iam.gserviceaccount.com
문자열을 검색할 수 있습니다.
Console
Cloud Console에서 서비스 계정 페이지로 이동합니다.
프로젝트 선택을 클릭하고 프로젝트를 선택한 후 열기를 클릭합니다.
키를 만들 서비스 계정의 행을 찾습니다. 이 행에서
을 클릭한 다음 키 만들기를 클릭합니다. 버튼키 유형을 선택하고 만들기를 클릭합니다.
만들기를 클릭하면 서비스 계정 키 파일이 다운로드됩니다. 키 파일을 다운로드한 후에는 다시 다운로드할 수 없습니다.
키 파일은 서비스 계정으로 인증하는 데 사용될 수 있으므로 안전하게 저장해야 합니다. 원하는 경우 이 파일을 이동하고 이름을 바꿀 수 있습니다.
gcloud
gcloud iam service-accounts keys create
명령어를 실행하여 서비스 계정 키를 만듭니다.
명령어:
gcloud iam service-accounts keys create ~/key.json \ --iam-account sa-name@project-id.iam.gserviceaccount.com
출력:
created key [e44da1202f82f8f4bdd9d92bc412d1d8a837fa83] of type [json] as [/usr/home/username/key.json] for [sa-name@project-id.iam.gserviceaccount.com]
이제 서비스 계정 키 파일이 머신에 다운로드됩니다. 키 파일을 다운로드한 후에는 다시 다운로드할 수 없습니다.
키 파일은 서비스 계정으로 인증하는 데 사용될 수 있으므로 안전하게 저장해야 합니다. 원하는 경우 이 파일을 이동하고 이름을 바꿀 수 있습니다.
REST
projects.serviceAccounts.keys.create
메서드는 서비스 계정의 키를 만듭니다.
아래의 요청 데이터를 사용하기 전에 다음을 바꿉니다.
project-id
: Google Cloud 프로젝트 ID입니다.sa-name
: 키를 만들려는 서비스 계정의 이름입니다.private-key-type
: 선택사항. 비공개 키의 출력 형식입니다. 기본값은 base64로 인코딩된 JSON 키 파일인TYPE_GOOGLE_CREDENTIALS_FILE
입니다. 가능한 모든 값의 목록은ServiceAccountPrivateKeyType
참조를 확인하세요.key-algorithm
: 선택사항. 키에 사용할 키 알고리즘입니다. 변경될 수 있는 기본값은 2,048비트 RSA 키입니다. 가능한 모든 값의 목록은ServiceAccountKeyAlgorithm
참조를 확인하세요.
HTTP 메서드 및 URL:
POST https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-name@project-id.iam.gserviceaccount.com/keys
JSON 요청 본문:
{ "privateKeyType": "private-key-type", "keyAlgorithm": "key-algorithm" }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
응답에는 서비스 계정의 키가 포함됩니다. 예를 들면 다음과 같습니다.
{ "name":"projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c", "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE", "privateKeyData":"MIIJqAIB . . .", "validAfterTime": "2020-05-17T18:48:27Z", "validBeforeTime": "9999-12-31T23:59:59Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED" }
키 데이터는 서비스 계정으로 인증하는 데 사용될 수 있으므로 안전하게 저장해야 합니다.
C#
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 IAM C# API 참조 문서를 확인하세요.
Go
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 IAM Go API 참조 문서를 확인하세요.
자바
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 IAM 자바 API 참조 문서를 확인하세요.
Python
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 IAM Python API 참조 문서를 확인하세요.
반환되는 privateKeyData
는 base64로 인코딩된 TYPE_GOOGLE_CREDENTIALS_FILE
값(JSON 또는 P12 키/사용자 인증 정보)의 문자열 표현입니다.
키를 만들면 새 공개 키/비공개 키 쌍이 생성되어 머신에 다운로드됩니다. 이 키는 유일한 비공개 키 사본입니다. 비공개 키를 안전하게 보관할 책임은 사용자에게 있습니다. 파일 위치를 잘 기록해 두고 애플리케이션에서 액세스할 수 있도록 조치하세요. 인증된 API 호출을 수행하려면 이 키가 필요합니다.
키 형식은 생성 방법에 따라 다를 수 있습니다. Cloud Console 또는 gcloud
명령줄 도구를 사용하여 생성된 키는 다음과 같습니다.
{ "type": "service_account", "project_id": "project-id", "private_key_id": "key-id", "private_key": "-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n", "client_email": "service-account-email", "client_id": "client-id", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email" }
반면 REST API 또는 클라이언트 라이브러리에서 생성된 키는 다음과 같습니다.
{ "name": "projects/project-id/serviceAccounts/service-account-email/keys/key-id", "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE", "privateKeyData": "private-key", "validAfterTime": "date", "validBeforeTime": "date", "keyAlgorithm": "KEY_ALG_RSA_2048" }
반환되는 privateKeyData
는 base64로 인코딩된 TYPE_GOOGLE_CREDENTIALS_FILE
값(JSON 또는 P12 키/사용자 인증 정보)의 문자열 표현입니다. base64로 디코딩된 privateKeyData
를 해당 확장자(.p12
또는 .json
)를 사용하여 파일에 저장하고 클라이언트 라이브러리에 입력하거나 gcloud auth activate-service-account
명령어로 사용할 수 있습니다.
각 메서드마다 형식이 다르기 때문에 앞으로 API를 호출할 때는 동일한 방법으로 키를 생성하는 것이 가장 쉽습니다. 예를 들어 gcloud
를 사용하는 경우 gcloud
를 사용하여 키를 생성합니다. 키를 생성한 방법과 다르게 사용하려면(REST에서 생성된 키를 gcloud
로 사용하는 등) 올바른 형식에 맞춰 키를 수정해야 합니다.
누구나 모든 서비스 계정의 모든 공개 키에 공개적으로 액세스할 수 있으며, 비공개 키로 생성한 서명을 검증하는 데 이러한 공개 키를 사용할 수 있습니다. 다음 URL에서 공개 키에 공개적으로 액세스할 수 있습니다.
- x.509 인증서: https://www.googleapis.com/service_accounts/v1/metadata/x509/sa-name@project-id.iam.gserviceaccount.com
- JSON 웹 키(JWK): https://www.googleapis.com/service_accounts/v1/jwk/sa-name@project-id.iam.gserviceaccount.com
- 원시 엔드포인트: https://www.googleapis.com/service_accounts/v1/metadata/raw/sa-name@project-id.iam.gserviceaccount.com
서비스 계정 키 나열
Cloud Console, gcloud
도구 또는 serviceAccount.keys.list()
메서드를 사용하거나 클라이언트 라이브러리 중 하나를 사용하여 서비스 계정의 서비스 계정 키를 나열할 수 있습니다.
serviceAccount.keys.list()
메서드는 일반적으로 서비스 계정과 키를 감사하거나 서비스 계정을 관리하는 커스텀 도구를 빌드하는 데 사용됩니다.
키가 속한 프로젝트를 찾으려면 키를 JSON 파일로 다운로드하고 이 파일을 조사하면 됩니다.
직접 만들지 않은 키가 나열될 수 있습니다. App Engine 및 Compute Engine과 같은 Google Cloud 서비스에서 사용되는 Google Cloud 관리형 키입니다. 사용자 관리 키와 Google Cloud 관리 키의 차이점에 대한 자세한 내용은 서비스 계정 이해를 참조하세요.
Console
Cloud Console에서 서비스 계정 페이지로 이동합니다.
프로젝트 선택을 클릭하고 프로젝트를 선택한 후 열기를 클릭합니다. Console에 프로젝트의 모든 서비스 계정과 해당 키가 나열됩니다.
gcloud
gcloud iam service-accounts keys list
명령어를 실행하여 서비스 계정 키를 나열합니다.
명령어:
gcloud iam service-accounts keys list \ --iam-account sa-name@project-id.iam.gserviceaccount.com
출력:
KEY_ID | CREATED_AT | EXPIRES_AT |
8e6e3936d7024646f8ceb39792006c07f4a9760c | 2016-01-26T21:01:42.000Z | 2026-01-23T21:01:42.000Z |
937c98f870f5c8db970af527aa3c12fd88b1c20a | 2016-01-26T20:55:40.000Z | 2026-01-23T20:55:40.000Z |
REST
projects.serviceAccounts.keys.list
메서드는 서비스 계정의 모든 서비스 계정 키를 나열합니다.
아래의 요청 데이터를 사용하기 전에 다음을 바꿉니다.
project-id
: Google Cloud 프로젝트 ID입니다.sa-name
: 키를 나열하려는 서비스 계정의 이름입니다.key-types
: 선택사항. 응답에 포함할 키 유형의 쉼표로 구분된 목록입니다. 키 유형은 키가 사용자 관리(USER_MANAGED
)인지 시스템 관리(SYSTEM_MANAGED
)인지를 나타냅니다. 비워두면 모든 키가 반환됩니다.
HTTP 메서드 및 URL:
GET https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-name@project-id.iam.gserviceaccount.com/keys?keyTypes=key-types
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "keys": [ { "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c", "validAfterTime": "2020-03-04T17:39:47Z", "validBeforeTime": "9999-12-31T23:59:59Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED" }, { "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/e5e3800831ac1adc8a5849da7d827b4724b1fce8", "validAfterTime": "2020-03-31T23:50:09Z", "validBeforeTime": "9999-12-31T23:59:59Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED" }, { "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/b97699f042b8eee6a846f4f96259fbcd13e2682e", "validAfterTime": "2020-05-17T18:58:13Z", "validBeforeTime": "9999-12-31T23:59:59Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "GOOGLE_PROVIDED", "keyType": "USER_MANAGED" } ] }
C#
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 IAM C# API 참조 문서를 확인하세요.
Go
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 IAM Go API 참조 문서를 확인하세요.
자바
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 IAM 자바 API 참조 문서를 확인하세요.
Python
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 IAM Python API 참조 문서를 확인하세요.
서비스 계정 키 받기
키를 처음 만들면 서비스 계정 키에 대한 비공개 키 데이터만 가져올 수 있습니다.
projects.serviceAccounts.keys.get()
REST API 메서드를 사용하여 ID, 알고리즘, 공개 키 데이터 등 키 기본 정보를 가져올 수 있습니다. Cloud Console 또는 gcloud
명령줄 도구를 사용할 수 없습니다.
서비스 계정의 공개 키 업로드
사용자 관리 키 쌍의 공개 키 부분을 서비스 계정에 업로드할 수 있습니다. 업로드한 공개 키는 서비스 계정과 영구적으로 연결되며 다른 사용자 관리 서비스 계정 키와 동일한 방식으로 사용됩니다. 프로젝트의 키 업로드 기능을 사용 중지하려면 서비스 계정 키 업로드 제한을 참조하세요.
Google 관리 키 쌍 대신 사용자 관리 키 쌍을 사용할 경우 키 쌍을 유지하고 정기적으로 순환해야 합니다.
업로드하는 키는 X.509 v3 인증서로 래핑되고 base64로 인코딩된 RSA 공개 키여야 합니다. OpenSSL과 같은 도구를 사용하여 이 형식으로 키와 인증서를 생성할 수 있습니다. 예를 들어 다음 명령어는 2048비트 RSA 키 쌍을 생성하고 365일 동안 유효한 자체 서명 인증서로 공개 키를 래핑합니다.
openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
-keyout /path/to/private_key.pem \
-out /path/to/public_key.pem \
-subj "/CN=unused"
그러면 public_key.pem
파일을 서비스 계정의 공개 키로 업로드할 수 있습니다.
gcloud
gcloud iam service-accounts keys upload
명령어를 실행하여 서비스 계정 키 서명용 공개 키를 업로드합니다.
명령어:
gcloud iam service-accounts keys upload /path/to/public_key.pem \ --iam-account sa-name@project-id.iam.gserviceaccount.com
출력에는 업로드된 키의 고유 식별자가 포함됩니다.
Name: projects/project-id/serviceAccounts/sa-name@project-id.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0
명령어가 성공했는지 확인하려면 gcloud iam service-accounts keys list
명령어를 실행합니다.
gcloud iam service-accounts keys list \ --iam-account sa-name@project-id.iam.gserviceaccount.com
출력에는 키가 생성된 후에 반환된 식별자와 동일한 고유 식별자가 포함됩니다.
KEY_ID | CREATED_AT | EXPIRES_AT |
c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0 | 2019-06-26T21:01:42.000Z | 2029-06-23T21:01:42.000Z |
REST
projects.serviceAccounts.keys.upload
메서드는 사용자 관리 키 쌍에서 공개 키를 업로드하고 이 키를 서비스 계정에 추가합니다.
아래의 요청 데이터를 사용하기 전에 다음을 바꿉니다.
project-id
: Google Cloud 프로젝트 ID입니다.sa-name
: 키를 연결할 서비스 계정의 이름입니다.public-key-data
: 키 쌍의 공개 키 데이터입니다. X.509 v3 인증서로 래핑된 RSA 공개 키여야 합니다. base64에 첫 번째 줄-----BEGIN CERTIFICATE-----
및 마지막 줄-----END CERTIFICATE-----
을 비롯한 공개 키 데이터를 인코딩합니다.
HTTP 메서드 및 URL:
POST https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-name@project-id.iam.gserviceaccount.com/keys:upload
JSON 요청 본문:
{ "publicKeyData": "public-key-data" }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0", "validAfterTime": "2020-05-17T19:31:19Z", "validBeforeTime": "2021-05-17T19:31:19Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "USER_PROVIDED", "keyType": "USER_MANAGED" }
서비스 계정 키 삭제
Cloud Console, gcloud
도구 또는 serviceAccount.keys.delete()
메서드를 사용하거나 클라이언트 라이브러리 중 하나를 사용하여 서비스 계정 키를 삭제할 수 있습니다.
키를 삭제하면 애플리케이션에서 더 이상 해당 키를 사용하여 Google Cloud 리소스에 액세스 할 수 없습니다. 보안을 위해 서비스 계정 키를 정기적으로 순환하는 방법이 권장됩니다. 새로운 키를 만든 후 애플리케이션에서 새로운 키를 사용하도록 전환한 다음 이전 키를 삭제하여 키를 순환할 수 있습니다. serviceAccount.keys.create()
메서드와 serviceAccount.keys.delete()
메서드를 함께 사용하면 자동으로 순환합니다.
Console
Cloud Console에서 서비스 계정 페이지로 이동합니다.
프로젝트 선택을 클릭하고 프로젝트를 선택한 후 열기를 클릭합니다. Console에 프로젝트의 모든 서비스 계정과 해당 키가 나열됩니다.
키를 만들 서비스 계정의 행을 찾습니다. 해당 행에서
을 클릭한 다음 수정을 클릭합니다. 버튼키 목록에서 삭제할 키마다 삭제
를 클릭합니다.
gcloud
gcloud iam service-accounts keys delete
명령어를 실행하여 서비스 계정 키를 삭제합니다.
명령어:
gcloud iam service-accounts keys delete key-id \ --iam-account sa-name@project-id.iam.gserviceaccount.com
출력:
Deleted key [8e6e3936d7024646f8ceb39792006c07f4a9760c] for service account [sa-name@project-id.iam.gserviceaccount.com]
REST
projects.serviceAccounts.keys.delete
메서드는 서비스 계정 키를 삭제합니다.
아래의 요청 데이터를 사용하기 전에 다음을 바꿉니다.
project-id
: Google Cloud 프로젝트 ID입니다.sa-name
: 키를 삭제하려는 서비스 계정의 이름입니다.key-id
: 삭제하려는 키의 ID입니다.
HTTP 메서드 및 URL:
DELETE https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-name@project-id.iam.gserviceaccount.com/keys/key-id
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ }
C#
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 IAM C# API 참조 문서를 확인하세요.
Go
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 IAM Go API 참조 문서를 확인하세요.
자바
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 IAM 자바 API 참조 문서를 확인하세요.
Python
이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 IAM Python API 참조 문서를 확인하세요.