2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

서비스 계정의 키를 사용하여 Cloud Run의 HTTP 엔드포인트를 호출하는 방법은?

_____
Q: Cloud Run 서비스에 대한 HTTP 요청을 서비스 계정 키를 사용해 인증하는 방법은 무엇인가요?
A: 서비스 계정 키(JSON)를 사용해 Cloud Run HTTP 엔드포인트를 호출하려면, 다음 절차를 따릅니다.

---

Q: 서비스 계정 키를 이용해 인증 토큰을 어떻게 발급받나요?
A: 서비스 계정 키 JSON 파일을 사용해 OAuth 2.0 액세스 토큰을 발급받아야 합니다. 구체적인 방법은:
1. Google OAuth 2.0 JWT Bearer 토큰 교환 방식을 사용하거나,
2. Google Cloud SDK의 `gcloud auth activate-service-account` 후 `gcloud auth print-access-token` 실행, 또는
3. [Google API Client 라이브러리](https://cloud.google.com/run/docs/authenticating/service-to-service) 활용 시 자동으로 토큰을 획득할 수 있습니다.

---

Q: 액세스 토큰을 사용해 Cloud Run HTTP 엔드포인트를 호출하는 방법은?
A: 발급받은 액세스 토큰을 HTTP 요청 헤더에 `Authorization: Bearer <액세스 토큰>` 형태로 포함해서 요청을 보냅니다. 예:
```bash
curl -H "Authorization: Bearer $(ACCESS_TOKEN)" https://SERVICE_URL
```

---

Q: 어떤 범위(scope)를 사용해야 하나요?
A: Cloud Run 호출을 위한 OAuth 2.0 범위로는 보통 `https://www.googleapis.com/auth/cloud-platform`을 사용합니다.

---

Q: 직접 서비스 계정 키를 사용해 토큰을 얻는 예시가 있나요?
A: 네, Python 예시:
```python
from google.oauth2 import service_account
import google.auth.transport.requests
import requests

SERVICE_ACCOUNT_FILE = 'path/to/key.json'
SERVICE_URL = 'https://your-cloud-run-url.run.app'
SCOPES = ['https://www.googleapis.com/auth/cloud-platform']

credentials = service_account.IDTokenCredentials.from_service_account_file(
SERVICE_ACCOUNT_FILE,
target_audience=SERVICE_URL
)

auth_req = google.auth.transport.requests.Request()
credentials.refresh(auth_req)

headers = {'Authorization': f'Bearer {credentials.token}'}
response = requests.get(SERVICE_URL, headers=headers)
print(response.text)
```
이 코드는 서비스 계정 키로 ID 토큰을 생성해 Cloud Run 엔드포인트를 호출합니다.

---

Q: 서비스 계정 키 없이도 요청할 수 있나요?
A: 가능합니다. Cloud Run 리소스에 적절한 IAM 권한이 있는 경우 `gcloud auth print-identity-token` 명령어 등으로 직접 토큰을 얻어 호출할 수 있습니다.

---

Q: 서비스 계정 키를 사용한 호출 시 주의사항은?
A:
- 키 파일 유출을 방지해야 하며, 키 관리 정책을 철저히 해야 합니다.
- 권한은 최소 권한 원칙에 따라 필요한 권한만 할당합니다.
- 키 대신 Workload Identity Federation 등 다른 인증 방식을 고려하는 것이 보안상 권장됩니다.

---

요약:
서비스 계정 키로 Cloud Run HTTP 엔드포인트를 호출하려면, 키로 OAuth2 또는 ID 토큰을 생성해 Authorization 헤더에 넣어 요청하면 됩니다. Google 인증 라이브러리나 `gcloud` 명령어를 활용해 토큰을 취득할 수 있습니다.
Cloud Run은 Google Cloud Platform(GCP)에서 제공하는 서버리스 컴퓨팅 서비스로, 컨테이너화된 애플리케이션을 쉽게 배포하고 관리할 수 있게 해줍니다.

Cloud Run의 HTTP 엔드포인트를 호출할 때, 서비스 계정의 키를 사용하여 인증을 수행하는 방법에 대해 자세히 설명하겠습니다.

1. 서비스 계정 생성 및 키 다운로드 1. GCP 콘솔에 로그인 : [Google Cloud Console](https://console.cloud.google.com/)에 로그인합니다.



2. 프로젝트 선택 : Cloud Run 서비스를 배포할 프로젝트를 선택합니다.



3. IAM 및 관리자 : 왼쪽 사이드바에서 "IAM 및 관리자"를 클릭한 후 "서비스 계정"을 선택합니다.



4. 서비스 계정 생성 : - "서비스 계정 만들기" 버튼을 클릭합니다.

- 서비스 계정의 이름과 설명을 입력하고 "만들기"를 클릭합니다.

- 필요한 역할을 선택합니다.

Cloud Run에 접근할 수 있는 권한을 부여하기 위해 "Cloud Run Invoker" 역할을 추가합니다.

- "완료"를 클릭하여 서비스 계정을 생성합니다.



5. 키 생성 : - 생성한 서비스 계정을 클릭하고 "키" 탭으로 이동합니다.

- "키 추가" 버튼을 클릭한 후 "새 키 만들기"를 선택합니다.

- JSON 형식의 키를 선택하고 "만들기"를 클릭합니다.

이때 JSON 파일이 다운로드됩니다.

이 파일은 나중에 API 호출 시 인증에 사용됩니다.



2. Cloud Run 서비스 배포 Cloud Run 서비스를 배포할 때, 서비스 계정이 HTTP 요청을 수신할 수 있도록 설정해야 합니다.

이를 위해 Cloud Run 서비스의 IAM 정책을 설정합니다.

1. Cloud Run 서비스 배포 : Cloud Run 서비스를 배포합니다.

이때, 서비스 계정의 권한을 확인하고, 필요한 경우 "Cloud Run Invoker" 역할을 부여합니다.



2. IAM 정책 설정 : Cloud Run 서비스에 대한 IAM 정책을 설정하여 특정 서비스 계정만이 해당 서비스에 접근할 수 있도록 합니다.



3. HTTP 엔드포인트 호출 이제 서비스 계정의 키를 사용하여 Cloud Run의 HTTP 엔드포인트를 호출할 수 있습니다.

이를 위해 Google의 `google-auth` 라이브러리를 사용하여 JWT(JSON Web Token)를 생성하고, 이를 사용하여 요청을 인증합니다.

Python 예제 ```python import json import requests from google.oauth2 import service_account from google.auth.transport.requests import Request 서비스 계정 키 파일 경로 SERVICE_ACCOUNT_FILE = 'path/to/your/service-account-file.json' Cloud Run 서비스 URL CLOUD_RUN_URL = 'https://your-cloud-run-service-url.run.app' 서비스 계정으로부터 인증 정보 가져오기 credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE ) JWT 토큰 생성 auth_request = Request() credentials.refresh(auth_request) token = credentials.token HTTP 요청 헤더 설정 headers = { 'Authorization': f'Bearer {token}' } Cloud Run 엔드포인트 호출 response = requests.get(CLOUD_RUN_URL, headers=headers) 응답 처리 if response.status_code == 200: print('Success:', response.json()) else: print('Error:', response.status_code, response.text) ```

4. 주의사항 - 보안 : 서비스 계정 키 파일은 매우 중요한 정보입니다.

이 파일을 안전하게 보관하고, 필요하지 않은 경우에는 삭제하는 것이 좋습니다.

- IAM 정책 : Cloud Run 서비스에 대한 IAM 정책을 적절히 설정하여, 불필요한 접근을 차단해야 합니다.

- 토큰 유효성 : JWT 토큰은 일정 시간 후 만료되므로, 필요할 때마다 새로 생성해야 합니다.

이와 같은 방법으로 서비스 계정의 키를 사용하여 Cloud Run의 HTTP 엔드포인트를 안전하게 호출할 수 있습니다.

작성자: 박지후 [비회원] | 작성일자: 1년 전 2024-12-18 16:51:59
조회수: 163 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.