IAM 역할을 사용하여 MPC 서비스 보안

보안 모델: 심층 방어

다자간 계산 (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.get
mpc.googleapis.com/keyRings.list
mpc.googleapis.com/keys.get
mpc.googleapis.com/keys.list
mpc.googleapis.com/policies.get
mpc.googleapis.com/policies.list
mpc.googleapis.com/policyAuthorTrustBundles.get
mpc.googleapis.com/proposals.get
mpc.googleapis.com/proposals.list
mpc.googleapis.com/signers.get
mpc.googleapis.com/signers.list
다자간 계산 편집자
(roles/mpc.editor)

정책 작성자 및 참여자 (서명자)를 위해 설계되었습니다. 정책을 관리하고, 제안서를 만들고, 참여자 결정을 기록할 수 있는 권한을 부여합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:
  • 키링
모든 roles/mpc.viewer 권한 및 다음 권한 포함:

mpc.googleapis.com/keyRings.update
mpc.googleapis.com/keys.update
mpc.googleapis.com/policies.addQuorumSignature
mpc.googleapis.com/policies.create
mpc.googleapis.com/policies.revoke
mpc.googleapis.com/proposals.create
mpc.googleapis.com/proposals.fetchProposalSignature
mpc.googleapis.com/proposals.recordParticipantDecision
다자간 계산 관리자
(roles/mpc.admin)

관리자를 위해 설계되었습니다. 인프라를 프로비저닝하고, 키를 생성하고, 참여자 공개 키를 등록할 수 있는 전체 액세스 권한을 부여합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:
  • 인스턴스
모든 roles/mpc.editor 권한 및 다음 권한 포함:

mpc.googleapis.com/keyRings.create
mpc.googleapis.com/keyRings.delete
mpc.googleapis.com/keys.create
mpc.googleapis.com/policyAuthorTrustBundles.update
mpc.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.iam.gserviceaccount.com" \
  --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) 구성을 참조하세요.