이 문서에서는 Pub/Sub에서 사용할 수 있는 액세스 제어 옵션을 설명합니다.
개요
Pub/Sub는 액세스 제어에 Identity and Access Management(IAM)를 사용합니다.
Pub/Sub에서는 프로젝트 수준과 개별 리소스 수준에서 액세스 제어를 구성할 수 있습니다. 예를 들면 다음과 같습니다.
전체 Cloud 프로젝트가 아닌 주제별 또는 구독별로 액세스 권한을 부여합니다.
단일 주제 또는 구독에 대한 보기 전용 액세스 권한이 있는 경우 Google Cloud 콘솔을 사용하여 주제 또는 구독을 볼 수 없습니다. 대신 Google Cloud CLI를 사용하면 됩니다.
주제에 대한 메시지 게시, 구독에서 온 메시지 소비, 주제 또는 구독 미삭제 같은 제한된 기능으로 액세스 권한을 부여합니다.
프로젝트 내의 모든 Pub/Sub 리소스에 대한 액세스 권한을 개발자 그룹에 부여합니다.
IAM과 그 기능에 대한 자세한 설명은 IAM 문서를 참조하세요. 특히 리소스에 대한 액세스 권한 부여, 변경, 취소를 참조하세요.
모든 Pub/Sub 메서드에는 필수 권한이 필요합니다. Pub/Sub IAM이 지원하는 권한 및 역할 목록은 아래의 역할 섹션을 참조하세요.
권한 및 역할
이 섹션에서는 Pub/Sub IAM이 지원하는 권한과 역할을 요약합니다.
필수 권한
다음 표에는 각 메서드를 호출하는 데 필요한 권한이 나와 있습니다.
REST 메서드 | 필수 권한 |
---|---|
projects.snapshots.create |
포함하는 Cloud 프로젝트에 대한 pubsub.snapshots.create 권한과 소스 구독에 대한 pubsub.subscriptions.consume 권한 |
projects.snapshots.delete |
요청한 스냅샷에 대한 pubsub.snapshots.delete 권한 |
projects.snapshots.getIamPolicy |
요청한 스냅샷에 대한 pubsub.snapshots.getIamPolicy 권한 |
projects.snapshots.list |
요청한 Cloud 프로젝트에 대한 pubsub.snapshots.list 권한 |
projects.snapshots.patch |
요청한 스냅샷에 대한 pubsub.snapshots.update 권한 |
projects.snapshots.setIamPolicy |
요청한 스냅샷에 대한 pubsub.snapshots.setIamPolicy 권한 |
projects.snapshots.testIamPermissions |
없음. |
projects.subscriptions.acknowledge |
요청한 구독에 대한 pubsub.subscriptions.consume 권한 |
projects.subscriptions.create |
포함하는 Cloud 프로젝트에 대한 pubsub.subscriptions.create 권한과 요청한 주제에 대한 pubsub.topics.attachSubscription 권한
프로젝트 B의 주제 T에 대한 프로젝트 A의 구독을 만들려면 프로젝트 A와 주제 T 모두에 대한 적절한 권한을 부여해야 합니다. 이 경우 사용자 ID 정보는 프로젝트 B의 감사 로그에서 캡처할 수 있습니다. |
projects.subscriptions.delete |
요청한 구독에 대한 pubsub.subscriptions.delete 권한 |
projects.subscriptions.get |
요청한 구독에 대한 pubsub.subscriptions.get 권한 |
projects.subscriptions.getIamPolicy |
요청한 구독에 대한 pubsub.subscriptions.getIamPolicy 권한 |
projects.subscriptions.list |
요청한 Cloud 프로젝트에 대한 pubsub.subscriptions.list 권한 |
projects.subscriptions.modifyAckDeadline |
요청한 구독에 대한 pubsub.subscriptions.consume 권한 |
projects.subscriptions.modifyPushConfig |
요청한 구독에 대한 pubsub.subscriptions.update 권한 |
projects.subscriptions.patch |
요청한 구독에 대한 pubsub.subscriptions.update 권한 |
projects.subscriptions.pull |
요청한 구독에 대한 pubsub.subscriptions.consume 권한 |
projects.subscriptions.seek |
요청한 구독에 대한 pubsub.subscriptions.consume 권한 및 요청한 스냅샷(있는 경우)에 대한 pubsub.snapshots.seek 권한 |
projects.subscriptions.setIamPolicy |
요청한 구독에 대한 pubsub.subscriptions.setIamPolicy 권한 |
projects.subscriptions.testIamPermissions |
없음. |
projects.topics.create |
포함하는 Cloud 프로젝트에 대한 pubsub.topics.create 권한 |
projects.topics.delete |
요청한 주제에 대한 pubsub.topics.delete 권한 |
projects.topics.detachSubscription |
요청한 주제에 대한 pubsub.topics.detachSubscription 권한 |
projects.topics.get |
요청한 주제에 대한 pubsub.topics.get 권한 |
projects.topics.getIamPolicy |
요청한 주제에 대한 pubsub.topics.getIamPolicy 권한 |
projects.topics.list |
요청한 Cloud 프로젝트에 대한 pubsub.topics.list 권한 |
projects.topics.patch |
요청한 주제에 대한 pubsub.topics.update 권한 |
projects.topics.publish |
요청한 주제에 대한 pubsub.topics.publish 권한 |
projects.topics.setIamPolicy |
요청한 주제에 대한 pubsub.topics.setIamPolicy 권한 |
projects.topics.subscriptions.list |
요청한 주제에 대한 pubsub.topics.get 권한 |
projects.topics.testIamPermissions |
없음. |
역할
다음 표에는 모든 Pub/Sub 역할과 각 역할과 관련된 권한이 나와 있습니다.
Role | Permissions |
---|---|
Pub/Sub Admin( Provides full access to topics and subscriptions. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Editor( Provides access to modify topics and subscriptions, and access to publish and consume messages. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Publisher( Provides access to publish messages to a topic. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Subscriber( Provides access to consume messages from a subscription and to attach subscriptions to a topic. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Viewer( Provides access to view topics and subscriptions. Lowest-level resources where you can grant this role:
|
|
Google Cloud 콘솔을 통한 액세스 제어
Google Cloud 콘솔을 사용하여 주제 및 프로젝트에 대한 액세스 제어를 관리할 수 있습니다.
프로젝트 수준에서 액세스 제어를 설정하려면 다음 단계를 따르세요.
Google Cloud Console에서 IAM 페이지로 이동합니다.
프로젝트를 선택합니다.
추가를 클릭합니다.
하나 이상의 주 구성원 이름을 입력하세요.
역할 선택 목록에서 부여할 역할을 선택합니다.
저장을 클릭합니다.
부여한 역할과 함께 주 구성원이 나열되는지 확인합니다.
주제와 구독의 액세스 제어를 설정하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 Pub/Sub 주제 목록으로 이동합니다.
필요한 경우 Pub/Sub를 사용 설정한 프로젝트를 선택합니다.
다음 단계 중 하나를 수행합니다.
하나 이상의 주제에 역할을 설정하려면 주제를 선택합니다.
주제에 연결된 구독의 역할을 설정하려면 주제 ID를 클릭합니다. 주제 세부정보 페이지에서 구독 ID를 클릭합니다. 구독 세부정보 페이지가 표시됩니다.
정보 패널이 숨겨져 있는 경우 정보 패널 표시를 클릭합니다.
권한 탭에서
주 구성원 추가를 클릭합니다.하나 이상의 주 구성원 이름을 입력하세요.
역할 선택 목록에서 부여할 역할을 선택합니다.
저장을 클릭합니다.
IAM API를 통한 액세스 제어
Pub/Sub IAM API를 사용하면 프로젝트의 개별 주제와 구독에 대한 정책을 설정하고 가져올 수 있으며 지정된 리소스에 대한 사용자의 권한을 테스트할 수 있습니다. 일반 Pub/Sub 메서드와 마찬가지로 클라이언트 라이브러리나 API 탐색기를 통해 또는 HTTP를 통해 직접 IAM API 메서드를 호출할 수 있습니다.
Pub/Sub IAM API를 사용하여 Google Cloud 프로젝트 수준에서 정책을 관리할 수는 없습니다.
다음 섹션에서는 정책을 설정하고 가져오는 방법과 지정된 리소스에 대해 호출자가 보유한 권한을 테스트하는 방법을 예제를 통해 설명합니다.
정책 가져오기
getIamPolicy()
메서드를 사용하면 기존 정책을 가져올 수 있습니다.
이 메서드는 리소스와 연결된 정책을 포함하는 JSON 객체를 반환합니다.
다음은 구독의 정책을 가져오는 샘플 코드입니다.
C#
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 Pub/Sub C# API 참고 문서를 확인하세요.
gcloud
구독 정책 가져오기:
gcloud pubsub subscriptions get-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json
출력:
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.admin", "members": [ "user:user-1@gmail.com" ] }, { "role": "roles/pubsub.editor", "members": [ "serviceAccount:service-account-2@appspot.gserviceaccount.com", "user:user-3@gmail.com" } ] }
Go
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Go API 참고 문서를 참조하세요.
자바
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Java API 참고 문서를 참조하세요.
Node.js
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Node.js API 참고 문서를 참조하세요.
Node.js
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Node.js API 참고 문서를 참조하세요.
PHP
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 PHP 설정 안내를 따르세요. 자세한 내용은 Pub/Sub PHP API 참고 문서를 참조하세요.
Python
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Python API 참고 문서를 참조하세요.
Ruby
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Ruby 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Ruby API 참고 문서를 참조하세요.
다음은 주제의 정책을 가져오는 샘플 코드입니다.C#
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 Pub/Sub C# API 참고 문서를 확인하세요.
gcloud
주제 정책 가져오기
gcloud pubsub topics get-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ --format json
출력:
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role":" roles/pubsub.viewer", "members": [ "user:user-1@gmail.com" ] } ] }
Go
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Go API 참고 문서를 참조하세요.
자바
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Java API 참고 문서를 참조하세요.
Node.js
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Node.js API 참고 문서를 참조하세요.
PHP
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 PHP 설정 안내를 따르세요. 자세한 내용은 Pub/Sub PHP API 참고 문서를 참조하세요.
Python
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Python API 참고 문서를 참조하세요.
Ruby
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Ruby 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Ruby API 참고 문서를 참조하세요.
정책 설정
setIamPolicy()
메서드를 사용하면 리소스에 정책을 연결할 수 있습니다. setIamPolicy()
메서드는 설정할 정책과 이 정책이 연결되는 리소스를 포함하는 SetIamPolicyRequest
를 사용합니다.
이 메서드는 결과로 나오는 정책을 반환합니다.
다음은 구독의 정책을 설정하는 샘플 코드입니다.
C#
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 Pub/Sub C# API 참고 문서를 확인하세요.
gcloud
1. 구독의 정책을 저장합니다.
gcloud pubsub subscriptions get-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json > subscription_policy.json
2. subscription_policy.json
을 열고 적절한 주 구성원에게 적절한 역할을 부여하여 binding을 업데이트합니다.
subscription_policy.json
파일 작업에 대한 자세한 내용은 IAM 문서의 정책을 참조하세요.
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.admin", "members": [ "user:user-1@gmail.com" ] }, { "role": "roles/pubsub.editor", "members": [ "serviceAccount:service-account-2@appspot.gserviceaccount.com" } ] }
3. 새 구독 정책을 적용합니다.
gcloud pubsub subscriptions set-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ subscription_policy.json
Go
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Go API 참고 문서를 참조하세요.
자바
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Java API 참고 문서를 참조하세요.
Node.js
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Node.js API 참고 문서를 참조하세요.
PHP
Python
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Python API 참고 문서를 참조하세요.
Ruby
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Ruby 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Ruby API 참고 문서를 참조하세요.
다음은 주제의 정책을 설정하는 샘플 코드입니다.
C#
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 Pub/Sub C# API 참고 문서를 확인하세요.
gcloud
1. 주제의 정책을 저장합니다.
gcloud pubsub topics get-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ --format json > topic_policy.json
2. topic_policy.json
을 열고 적절한 주 구성원에게 적절한 역할을 부여하여 binding을 업데이트합니다.
subscription_policy.json
파일 작업에 대한 자세한 내용은 IAM 문서의 정책을 참조하세요.
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.editor", "members": [ "user:user-1@gmail.com", "user:user-2@gmail.com" ] } ] }
3. 새 주제 정책을 적용합니다.
gcloud pubsub topics set-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ topic_policy.json
Go
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Go API 참고 문서를 참조하세요.
자바
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Java API 참고 문서를 참조하세요.
Node.js
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Node.js API 참고 문서를 참조하세요.
PHP
Python
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Python API 참고 문서를 참조하세요.
Ruby
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Ruby 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Ruby API 참고 문서를 참조하세요.
권한 테스트
testIamPermissions()
메서드를 사용하여 지정된 리소스에 대해 추가하거나 삭제할 수 있는 권한을 확인할 수 있습니다. 이 메서드는 리소스 이름과 권한 집합을 매개변수로 사용하여 권한의 하위 집합을 반환합니다.
다음은 구독의 권한을 테스트하는 샘플 코드입니다.
C#
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 Pub/Sub C# API 참고 문서를 확인하세요.
gcloud
gcloud iam list-testable-permissions \ https://pubsub.googleapis.com/v1/projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json
출력:
[ { "name": "pubsub.subscriptions.consume", "stage": "GA" }, { "name": "pubsub.subscriptions.delete", "stage": "GA" }, { "name": "pubsub.subscriptions.get", "stage": "GA" }, { "name": "pubsub.subscriptions.getIamPolicy", "stage": "GA" }, { "name": "pubsub.subscriptions.setIamPolicy", "stage": "GA" }, { "name": "pubsub.subscriptions.update", "stage": "GA" } ]
Go
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Go API 참고 문서를 참조하세요.
자바
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Java API 참고 문서를 참조하세요.
Node.js
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Node.js API 참고 문서를 참조하세요.
PHP
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 PHP 설정 안내를 따르세요. 자세한 내용은 Pub/Sub PHP API 참고 문서를 참조하세요.
Python
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Python API 참고 문서를 참조하세요.
Ruby
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Ruby 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Ruby API 참고 문서를 참조하세요.
다음은 주제의 권한을 테스트하는 샘플 코드입니다.
C#
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 Pub/Sub C# API 참고 문서를 확인하세요.
gcloud
gcloud iam list-testable-permissions \ https://pubsub.googleapis.com/v1/projects/${PROJECT}/topics/${TOPIC} \ --format json
출력
[ { "name": "pubsub.topics.attachSubscription", "stage": "GA" }, { "name": "pubsub.topics.delete", "stage": "GA" }, { "name": "pubsub.topics.detachSubscription", "stage": "GA" }, { "name": "pubsub.topics.get", "stage": "GA" }, { "name": "pubsub.topics.getIamPolicy", "stage": "GA" }, { "name": "pubsub.topics.publish", "stage": "GA" }, { "name": "pubsub.topics.setIamPolicy", "stage": "GA" }, { "name": "pubsub.topics.update", "stage": "GA" } ]
Go
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Go API 참고 문서를 참조하세요.
자바
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Java API 참고 문서를 참조하세요.
Node.js
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Node.js API 참고 문서를 참조하세요.
PHP
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 PHP 설정 안내를 따르세요. 자세한 내용은 Pub/Sub PHP API 참고 문서를 참조하세요.
Python
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Python API 참고 문서를 참조하세요.
Ruby
이 샘플을 시도하기 전에 빠른 시작: 클라이언트 라이브러리 사용의 Ruby 설정 안내를 따르세요. 자세한 내용은 Pub/Sub Ruby API 참고 문서를 참조하세요.
샘플 사용 사례: 프로젝트 간 통신
Pub/Sub IAM을 이용하면 프로젝트 간 통신에서 액세스를 쉽게 세부 조정할 수 있습니다.
Cloud 프로젝트 A의 서비스 계정이 Cloud 프로젝트 B의 주제에 메시지를 게시하려고 한다고 가정합니다. 먼저 프로젝트 A에서 Pub/Sub API를 사용하도록 설정합니다.
두 번째로 Cloud 프로젝트 B에서 서비스 계정에 편집 권한을 부여합니다. 하지만 이 방법은 정밀성이 떨어지는 경우가 많습니다. IAM API를 이용하면 더욱 세밀한 액세스 수준을 확보할 수 있습니다.
예를 들어 이 스니펫은 project-b의 setIamPolicy()
메서드 및 준비된 topic_policy.json
파일을 사용하여 project-a의 foobar@
project-a.iam.gserviceaccount.com
서비스 계정에 projects/
project-b/topics/
topic-b 주제에 대한 게시자 역할을 부여합니다.
gcloud pubsub topics set-iam-policy \ projects/project-b/topics/topic-b \ topic_policy.json
Updated IAM policy for topic topic-b. bindings: - members: - serviceAccount:foobar@project-a.iam.gserviceaccount.com role: roles/pubsub.publisher etag: BwWGrQYX6R4=
부분 가용성 동작
승인 확인은 IAM 하위 시스템에 따라 다릅니다. 데이터 작업(게시 및 메시지 소비)에 낮은 반응 지연 시간을 지속적으로 제공하기 위해 시스템은 캐시된 IAM 정책을 사용하기도 합니다. 변경사항이 적용되는 시기에 대한 자세한 내용은 IAM 문서를 참조하세요.