이 페이지에서는 서비스 계정의 공개 키를 업로드하는 방법을 설명합니다. 공개 키를 업로드한 후 키 쌍의 비공개 키를 사용하여 서비스 계정으로 인증할 수 있습니다.
시작하기 전에
Enable the IAM API.
서비스 계정 사용자 인증 정보에 대해 이해해야 합니다.
필요한 역할
서비스 계정 키를 업로드하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 서비스 계정 키 관리자(roles/iam.serviceAccountKeyAdmin
) IAM 역할, 또는 키를 관리할 서비스 계정을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
자세한 내용은 서비스 계정 역할을 참조하세요.
조직 정책 구성에 따라 키를 업로드하기 전에 프로젝트에서 서비스 계정 키 업로드를 허용해야 할 수도 있습니다.
프로젝트에서 서비스 계정 키 업로드를 허용하는 데 필요한 권한을 얻으려면 관리자에게 조직에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
조직 정책 관리자(
roles/orgpolicy.policyAdmin
) -
조직 뷰어(
roles/resourcemanager.organizationViewer
) -
태그 관리자(
roles/resourcemanager.tagAdmin
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
이러한 사전 정의된 역할에는 프로젝트에서 서비스 계정 키 업로드를 허용하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.
필수 권한
프로젝트에서 서비스 계정 키 업로드를 허용하려면 다음 권한이 필요합니다.
-
orgpolicy.constraints.list
-
orgpolicy.customConstraints.create
-
orgpolicy.customConstraints.delete
-
orgpolicy.customConstraints.get
-
orgpolicy.customConstraints.list
-
orgpolicy.customConstraints.update
-
orgpolicy.policies.create
-
orgpolicy.policies.delete
-
orgpolicy.policies.list
-
orgpolicy.policies.update
-
orgpolicy.policy.get
-
orgpolicy.policy.set
-
resourcemanager.organizations.get
-
resourcemanager.projects.listTagBindings
-
resourcemanager.projects.listEffectiveTags
-
resourcemanager.tagKeys.get
-
resourcemanager.tagKeys.list
-
resourcemanager.tagValues.list
-
resourcemanager.tagValues.get
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
서비스 계정 키 업로드 허용
서비스 계정 키를 만들기 전에 프로젝트에 iam.disableServiceAccountKeyUpload
조직 정책 제약 조건이 적용되지 않았는지 확인합니다. 프로젝트에 이 제약 조건이 적용되면 해당 프로젝트에서 서비스 계정 키를 업로드할 수 없습니다.
서비스 계정 키가 실제로 필요한 프로젝트만 제외하고 대부분의 프로젝트에 이 제약 조건을 적용하는 것이 좋습니다. 대체 인증 방법에 관한 자세한 내용은 사용 사례에 적합한 인증 방법 선택을 참고하세요.
프로젝트를 iam.disableServiceAccountKeyUpload
조직 정책 제약 조건에서 제외하려면 조직 정책 관리자에게 다음을 요청하세요.
-
조직 수준에서 프로젝트나 폴더를 조직 정책에서 제외할지 여부를 정의하는 데 사용할 태그 키와 태그 값을 만듭니다.
disableServiceAccountKeyUpload
키와enforced
및not_enforced
값으로 태그를 만드는 것이 좋습니다.태그 키와 태그 값을 만드는 방법은 새 태그 만들기 및 정의를 참조하세요.
-
disableServiceAccountKeyUpload
태그를 조직에 연결하고 값을enforced
로 설정합니다. 다른 태그 값으로 덮어쓰지 않는 한 조직의 모든 프로젝트나 폴더에서 이 태그 값을 상속합니다.태그를 리소스에 연결하는 방법은 리소스에 태그 연결을 참조하세요.
-
조직 정책에서 제외하려는 프로젝트나 폴더마다
disableServiceAccountKeyUpload
태그를 연결하고 값을not_enforced
로 설정합니다. 이러한 방식으로 프로젝트나 폴더의 태그 값을 설정하면 조직에서 상속된 태그 값이 재정의됩니다. -
예외 리소스에 대한 제약 조건을 적용하지 않도록 서비스 계정 키 업로드를 방지하는 조직 정책을 만들거나 업데이트합니다. 이 정책에는 다음 규칙이 있어야 합니다.
-
disableServiceAccountKeyUpload: not_enforced
태그가 있는 리소스에 적용되지 않도록iam.disableServiceAccountKeyUpload
제약 조건을 구성합니다. 이 규칙의 조건은 다음과 같이 표시됩니다.resource.matchTag(\"ORGANIZATION_ID/disableServiceAccountKeyUpload\", \"not_enforced\")
- 다른 모든 리소스에 적용되도록
iam.disableServiceAccountKeyUpload
제약 조건을 구성합니다.
태그 조건이 있는 조직 정책을 만드는 방법은 태그를 사용한 조직 정책 설정을 참조하세요.
-
서비스 계정의 공개 키 업로드
사용자 관리형 키 쌍의 공개 키 부분을 업로드하여 서비스 계정과 연결할 수 있습니다. 공개 키를 업로드한 후 키 쌍의 비공개 키를 서비스 계정 키로 사용할 수 있습니다.
업로드하는 키는 X.509 v3 인증서로 래핑되고 base64로 인코딩된 RSA 공개 키여야 합니다. OpenSSL과 같은 도구를 사용하여 이 형식으로 키와 인증서를 생성할 수 있습니다.
X.509 인증서에 개인 정보를 포함하지 마세요. 구체적으로는 일반적인 제목을 사용하고 선택적 속성을 추가하지 않습니다. 인증서는 공개적으로 표시됩니다. 인증서의 모든 개인 정보가 인증서를 가져오는 모든 사용자에게 표시됩니다. 자세한 내용은 업로드된 X.509 인증서에 기밀 정보 공개하지 않기를 참조하세요.
예를 들어 다음 명령어는 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
파일을 서비스 계정의 공개 키로 업로드할 수 있습니다.
콘솔
- Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.
나머지 단계는 Google Cloud 콘솔에 표시됩니다.
- 프로젝트를 선택합니다.
- 서비스 계정 페이지에서 키를 업로드할 서비스 계정의 이메일 주소를 클릭합니다.
- 키 탭을 클릭합니다.
- 키 추가 드롭다운 메뉴를 클릭한 후 기존 키 업로드를 선택합니다.
- 찾아보기를 클릭한 후 공개 키 파일을 찾아 선택합니다. 또는 공개 키 파일 콘텐츠를 복사하여 기존 키 붙여넣기 상자에 붙여넣을 수 있습니다.
- 업로드를 클릭합니다.
gcloud
gcloud iam service-accounts keys upload
명령어를 실행하여 서비스 계정 키 서명용 공개 키를 업로드합니다.
다음 값을 바꿉니다.
KEY_FILE
: 업로드할 키 데이터가 포함된 파일의 경로입니다(예:./public_key.pem
).SA_NAME
: 키를 업로드할 서비스 계정의 이름입니다.PROJECT_ID
: Google Cloud 프로젝트 ID입니다.
gcloud iam service-accounts keys upload KEY_FILE \ --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:42Z | 9999-12-31T23:59:59Z |
REST
projects.serviceAccounts.keys.upload
메서드는 사용자 관리 키 쌍에서 공개 키를 업로드하고 이 키를 서비스 계정에 추가합니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_ID
: Google Cloud 프로젝트 ID. 프로젝트 ID는my-project
같은 영숫자 문자열입니다.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" }
공개 키 업로드 사용 중지
프로젝트의 키를 업로드하는 기능을 중지하려면 서비스 계정 키 업로드 제한을 참조하세요.
다음 단계
- 서비스 계정 키 만들기 및 관리 방법 알아보기
- 서비스 계정 키를 나열하고 가져오는 방법 알아보기
- 인증을 위한 서비스 계정 키의 대안에 대해 알아보기
- 서비스 계정 키를 사용하여 서비스 계정으로 인증하는 방법 알아보기
- 서비스 계정 키 관리 권장사항 이해하기
직접 사용해 보기
Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
무료로 시작하기