보안 모델: 심층 방어
다자간 계산 (MPC) API는 엄격한 Identity and Access Management (IAM) 제어를 사용하는 심층 방어 보안 아키텍처를 구현합니다. 이 모델은 단일 ID 또는 도용된 Google 계정이 일방적으로 플랫폼을 손상시키거나 애셋을 추출할 수 없도록 합니다.
- 레이어 1: Identity & Access Management (IAM): 모든 요청은 에지에서 확인되어 호출자에게 특정 Google Cloud API 메서드를 호출하는 데 필요한 명시적 권한이 있는지 확인합니다 (IAM 개요 참조). 권한이 부족한 계정은
403 Forbidden오류와 함께 즉시 거부되어 승인되지 않은 트래픽이 애플리케이션 계층에 도달하지 못하도록 합니다. - 계층 2: 직무 분리 (SoD): MPC 플랫폼은 엄격한 역할 분리를 적용하여 동일한 개인이 별도의 거버넌스 및 실행 작업을 수행할 수 없도록 합니다. 정책 작성자는 정책 수정만 가능하고 서명자는 트랜잭션 페이로드 서명만 가능하도록 하는 등 명확한 역할을 정의함으로써, 시스템은 단일 악성 에이전트나 도용된 계정이 민감한 트랜잭션을 독립적으로 실행할 수 없도록 보장합니다.
- 계층 3: 최소 권한의 원칙: 액세스 권한은 직무에 따라 엄격하게 부여되므로 사용자는 업무를 수행하는 데 필요한 최소한의 권한만 갖게 됩니다. 예를 들어 규정 준수 또는 감사팀은 최소 권한으로 운영되며 활동을 모니터링하기 위해 엄격한 읽기 전용 액세스 권한을 유지합니다. 정책을 확인하고 거래 로그를 검사하여 감독할 수 있지만 정책을 수정하거나 거래를 시작하거나 자산과 상호작용할 수는 없습니다.
역할 및 직무 분리
관리 (보드 설정)를 거버넌스 (규칙 정의) 및 실행 (애셋 이동)에서 분리하여 보안을 강화합니다.
| 페르소나 | 도메인 | IAM 역할 할당됨 | 핵심 책임 |
|---|---|---|---|
| 관리자 | 관리 | mpc.admin | 리소스를 프로비저닝합니다. 트랜잭션에 서명하거나 정책을 작성할 수 없습니다. |
| 정책 작성자 | 거버넌스 | mpc.editor | 운영 정책 (예: 지출 한도)을 정의하고 수정합니다. |
| 서명자 | 실행 | mpc.editor | 트랜잭션 페이로드에 서명합니다. 정책을 작성할 수 없습니다. |
| 규정 준수 | 감독 | mpc.viewer | 활동을 모니터링하고 정책을 검사할 수 있는 읽기 전용 액세스 권한입니다. 정책을 수정하거나 거래를 시작할 수 없습니다. |
사전 정의된 IAM 역할
다음 표에는 다자간 계산 (MPC) API의 특정 IAM 권한과 이를 부여하는 역할이 자세히 나와 있습니다. API 작업에 대한 자세한 내용은 MPC API 참조를 확인하세요.
| 역할 | 권한 |
|---|---|
다자간 계산 뷰어(roles/mpc.viewer)API 전반에 대한 읽기 전용 액세스 권한을 제공합니다 (모든 리소스에 대한 가져오기/나열 작업). 감사자 또는 모니터링 도구에 가장 적합합니다. 이 역할을 부여할 수 있는 최하위 수준 리소스:
|
mpc.googleapis.com/keyRings.getmpc.googleapis.com/keyRings.listmpc.googleapis.com/keys.getmpc.googleapis.com/keys.listmpc.googleapis.com/policies.getmpc.googleapis.com/policies.listmpc.googleapis.com/policyAuthorTrustBundles.getmpc.googleapis.com/proposals.getmpc.googleapis.com/proposals.listmpc.googleapis.com/signers.getmpc.googleapis.com/signers.list |
다자간 계산 편집자(roles/mpc.editor)정책 작성자 및 참여자 (서명자)를 위해 설계되었습니다. 정책을 관리하고, 제안서를 만들고, 참여자 결정을 기록할 수 있는 권한을 부여합니다. 이 역할을 부여할 수 있는 최하위 수준 리소스:
|
모든 roles/mpc.viewer 권한 및 다음 권한 포함:mpc.googleapis.com/keyRings.updatempc.googleapis.com/keys.updatempc.googleapis.com/policies.addQuorumSignaturempc.googleapis.com/policies.creatempc.googleapis.com/policies.revokempc.googleapis.com/proposals.creatempc.googleapis.com/proposals.fetchProposalSignaturempc.googleapis.com/proposals.recordParticipantDecision |
다자간 계산 관리자(roles/mpc.admin)관리자를 위해 설계되었습니다. 인프라를 프로비저닝하고, 키를 생성하고, 참여자 공개 키를 등록할 수 있는 전체 액세스 권한을 부여합니다. 이 역할을 부여할 수 있는 최하위 수준 리소스:
|
모든 roles/mpc.editor 권한 및 다음 권한 포함:mpc.googleapis.com/keyRings.creatempc.googleapis.com/keyRings.deletempc.googleapis.com/keys.creatempc.googleapis.com/policyAuthorTrustBundles.updatempc.googleapis.com/signers.create |
커스텀 역할
roles/mpc.editor와 같이 더 광범위한 사전 정의된 역할을 사용하는 대신 참여자에게 엄격한 최소 권한 액세스 권한을 부여하려면 작업에 참여하는 데 필요한 정확한 권한만 포함하는 커스텀 IAM 역할을 만들면 됩니다.
커스텀 역할 명령어 예시
gcloud iam roles create customMpcSigner \
--project="PROJECT_ID" \
--title="Custom MPC Signer" \
--description="Restricted role for transaction participants" \
--permissions="mpc.googleapis.com/proposals.get,mpc.googleapis.com/proposals.list,mpc.googleapis.com/proposals.recordParticipantDecision"
리소스 수준 및 조건부 IAM
최소 권한의 원칙을 준수하면 IAM 조건을 사용하여 IAM 역할을 제한된 범위로 지정할 수 있습니다.
여러 비즈니스 단위가 공유 인스턴스를 사용하여 동일한 Google Cloud 프로젝트에서 운영되는 경우 리소스를 별도의 키링 (예: KeyRing A 및 KeyRing B)에 배치하여 분리를 적용할 수 있습니다. 지정된 키링 (KeyRing A) 내에서 발생하는 작업으로만 제한하는 IAM 조건을 사용하여 서비스 계정에 roles/mpc.editor를 부여하는 동시에 동일한 인스턴스의 다른 키링에 대한 액세스를 제한할 수 있습니다.
명령어 예시
KeyRing 범위 역할 바인딩을 만드는 예시:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:sa-name@PROJECT_ID." \
--role="roles/mpc.editor" \
--condition="expression=resource.name.startsWith('projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mpc/keyRings/KEYRING_ID'),title=KeyRing_Scoped_Editor"
제휴 ID (Bring Your Own Identity)
Google 계정을 만들거나 서비스 계정 키를 관리하지 않고도 외부 기업 ID 공급업체 (예: Okta, Microsoft Entra ID, Ping Identity) 또는 외부 워크로드 런타임을 사용하여 다자간 계산 요청을 인증하고 승인할 수 있습니다.
- 직원 ID 제휴: IAM 역할을 외부 IdP 그룹에 바인딩하여 조직 수준 직원 풀 (
locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>)을 관리자, 정책 작성자, 서명자, 규정 준수와 같은 사용자 페르소나에 매핑합니다. - 워크로드 아이덴티티 제휴: 프로젝트 수준 워크로드 아이덴티티 풀 (
projects/<var>PROJECT_NUMBER</var>/locations/global/workloadIdentityPools/<var>WORKLOAD_POOL_ID</var>)을 AWS, Azure 또는 Kubernetes에서 실행되는 자동화된 공동 서명자 노드에 매핑합니다.
API 요청이 프로젝트에 할당량 및 결제를 할당할 수 있도록 제휴 주 구성원에게 소비자 프로젝트에 대한 서비스 사용량 소비자 역할 (roles/serviceusage.serviceUsageConsumer)도 부여해야 합니다.
제휴 역할 바인딩 예시
# Allow members of the workforce pool to consume APIs through the consumer project
gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>/*" \
--role="roles/serviceusage.serviceUsageConsumer"
# Grant MPC Admin to an external IdP administrators group
gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>/group/mpc-admins" \
--role="roles/mpc.admin"
# Grant MPC Editor to an external IdP signers group
gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>/group/mpc-signers" \
--role="roles/mpc.editor"
다음을 바꿉니다.
<var>PROJECT_ID</var>: 다자간 컴퓨팅 인스턴스의 소비자 프로젝트 ID입니다.<var>WORKFORCE_POOL_ID</var>: 조직 수준 직원 ID 풀 ID입니다.
전체 엔드 투 엔드 둘러보기는 직원 ID 제휴 (BYOID) 구성을 참조하세요.