권한 및 역할

Cloud KMS에서 리소스는 계층 구조로 이루어집니다. 이러한 계층 구조를 통해 다양한 수준의 세부사항으로 리소스를 관리하고 액세스 권한을 부여할 수 있습니다. 키는 키링 안에 있으며 키링은 프로젝트 내에 위치합니다. 프로젝트는 폴더나 조직으로 더 조직화할 수 있습니다.

이 주제에서는 Cloud KMS 내의 리소스 계층 구조에 대해 자세히 설명합니다. 일반적인 Google Cloud 리소스에 대한 상세 설명은 리소스 계층 구조를 참조하세요.

리소스 계층 구조

IAM 역할의 범위는 역할이 부여되는 리소스 계층 구조의 수준에 따라 달라집니다. 아래 테이블에는 계층 구조의 여러 수준에서 Cloud KMS CryptoKey 암호화 역할(roles/cloudkms.cryptoKeyEncrypter)이 부여하는 유효 기능이 정리되어 있습니다.

사용자는 키 또는 키링에 대한 액세스 권한을 관리할 수 있지만 개별 키 버전에 대한 액세스는 관리할 수 없습니다.

리소스 계층 구조 기능
조직 조직 내 모든 프로젝트의 모든 키를 사용하여 암호화
폴더 폴더에 있는 모든 프로젝트의 모든 키를 사용하여 암호화
프로젝트 프로젝트의 모든 키를 사용하여 암호화
키링 키링의 모든 키를 사용하여 암호화
해당 키만 사용하여 암호화

보안 원칙

IAM은 업무 분리 원칙 및 최소 권한 원칙 등 상호 관련된 보안 원칙을 시행하는 데 도움이 됩니다.

  • 업무 분리 원칙을 적용하면 단일 구성원이 중요한 비즈니스 기능을 완료하는 데 필요한 모든 액세스 권한을 가질 수 없습니다. 예를 들어 은행 담당자는 계정 소유자가 물리적으로 존재하여 거래를 시작할 때만 계좌에서 금액을 인출할 수 있습니다.

  • 최소 권한 원칙을 시행하는 경우 구성원은 해당 구성원의 특정 비즈니스 기능을 완료하는 데 필요한 최소한의 액세스 수준만 갖습니다. 예를 들어 은행 직원에게 고객 대출 승인 권한이 자동으로 부여되지는 않습니다.

사전 정의된 역할

IAM은 각 유형의 Google Cloud 리소스에 대한 액세스 권한을 부여하는 사전 정의된 역할을 제공합니다. 사전 정의된 역할이 필요에 맞지 않는 경우 맞춤 역할을 만들 수 있습니다.

IAM은 Cloud KMS에 다음과 같은 사전 정의된 역할을 제공합니다.

역할 권한

Cloud KMS 관리자
(roles/cloudkms.admin)

Cloud KMS 리소스에 대한 전체 액세스 권한을 제공합니다(암호화/복호화 작업 제외).

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • CryptoKey
  • cloudkms.cryptoKeyVersions.create
  • cloudkms.cryptoKeyVersions.destroy
  • cloudkms.cryptoKeyVersions.get
  • cloudkms.cryptoKeyVersions.list
  • cloudkms.cryptoKeyVersions.restore
  • cloudkms.cryptoKeyVersions.update
  • cloudkms.cryptoKeys.*
  • cloudkms.importJobs.*
  • cloudkms.keyRings.*
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS CryptoKey 복호화
(roles/cloudkms.cryptoKeyDecrypter)

복호화 작업 전용 Cloud KMS 리소스를 사용할 수 있는 권한을 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • CryptoKey
  • cloudkms.cryptoKeyVersions.useToDecrypt
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS CryptoKey 암호화
(roles/cloudkms.cryptoKeyEncrypter)

암호화 작업 전용 Cloud KMS 리소스를 사용할 수 있는 권한을 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • CryptoKey
  • cloudkms.cryptoKeyVersions.useToEncrypt
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS CryptoKey 암호화/복호화
(roles/cloudkms.cryptoKeyEncrypterDecrypter)

암호화/복호화 작업 전용 Cloud KMS 리소스를 사용할 수 있는 권한을 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • CryptoKey
  • cloudkms.cryptoKeyVersions.useToDecrypt
  • cloudkms.cryptoKeyVersions.useToEncrypt
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS 암호화 작업자
(roles/cloudkms.cryptoOperator)

모든 암호화 작업을 사용 설정합니다.

  • cloudkms.cryptoKeyVersions.useToDecrypt
  • cloudkms.cryptoKeyVersions.useToEncrypt
  • cloudkms.cryptoKeyVersions.useToSign
  • cloudkms.cryptoKeyVersions.useToVerify
  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.*
  • resourcemanager.projects.get

Cloud KMS 가져오기 작업자
(roles/cloudkms.importer)

ImportCryptoKeyVersion, CreateImportJob, ListImportJobs, GetImportJob 작업을 사용 설정합니다.

  • cloudkms.importJobs.create
  • cloudkms.importJobs.get
  • cloudkms.importJobs.list
  • cloudkms.importJobs.useToImport
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS CryptoKey 공개 키 뷰어
(roles/cloudkms.publicKeyViewer)

GetPublicKey 작업을 사용 설정합니다.

  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS CryptoKey 서명자
(roles/cloudkms.signer)

Sign 작업을 사용 설정합니다.

  • cloudkms.cryptoKeyVersions.useToSign
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS CryptoKey 서명자/확인자
(roles/cloudkms.signerVerifier)

Sign, Verify, GetPublicKey 작업을 사용 설정합니다.

  • cloudkms.cryptoKeyVersions.useToSign
  • cloudkms.cryptoKeyVersions.useToVerify
  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Cloud KMS CryptoKey 확인자
(roles/cloudkms.verifier)

Verify 및 GetPublicKey 작업을 사용 설정합니다.

  • cloudkms.cryptoKeyVersions.useToVerify
  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

맞춤 역할

사전 정의된 역할 외에도 맞춤 역할을 만들 수 있습니다. 맞춤 역할을 만들면 특정 작업을 수행하는 데 필요한 최소 권한을 역할에 부여하여 최소 권한 원칙을 적용할 수 있습니다.

맞춤 역할에는 IAM 참조에 나열된 하나 이상의 권한이 포함됩니다. Cloud Key Management Service API와 관련된 권한은 cloudkms 문자열로 시작합니다. 자세한 내용은 맞춤 역할의 권한 지원 수준을 참조하세요.

특정 Cloud Key Management Service API 메서드를 호출하는 데 필요한 권한에 대한 상세 설명은 해당 메서드의 API 참조를 참조하세요.

Cloud KMS의 액세스 관리 일반 가이드라인

owner, editor, viewer 등 기본적인 프로젝트 전체 역할은 사용하지 않는 것이 좋습니다. 이러한 역할은 암호화 작업에 키를 사용하는 기능과 키를 관리하는 기능을 분리하지 않으며 프로덕션 환경에는 권장되지 않습니다. 대신 사전 정의된 역할을 사용하거나 비즈니스 요구사항을 반영하는 맞춤 역할을 만드세요.

다음은 좋은 보안 가이드라인을 보여주는 예시입니다.

  • 대규모 또는 복잡한 조직의 경우 다음과 같은 접근 방식을 고려하는 것이 좋습니다.

    • IT 보안팀 구성원에게 모든 프로젝트에서 Cloud KMS 관리자 역할(roles/cloudkms.admin)을 부여합니다. 서로 다른 팀 구성원이 키 수명 주기의 여러 측면을 처리하는 경우, 해당 팀 구성원에게 Cloud KMS 가져오기 역할(roles/cloudkms.importer) 등 보다 세분화된 역할을 부여할 수 있습니다.
    • 암호화된 데이터를 읽거나 쓰는 사용자 또는 애플리케이션에 Cloud KMS 암호화 / 복호화 역할(roles/cloudkms.cryptoKeyEncrypterDecrypter)을 부여합니다.
    • 비대칭 암호화에 사용되는 키의 공개 부분을 확인해야 하는 사용자 또는 애플리케이션에 Cloud KMS 공개 키 뷰어 역할(roles/cloudkms.publicKeyViewer)을 부여합니다.
    • 비즈니스 요구사항에 맞는 사전 정의된 역할을 만듭니다. 예를 들어 동일한 사용자가 프로젝트 할당량을 모니터링하고 로그 데이터를 봐야 할 수 있습니다.
  • 간단한 보안 요구사항이 있는 소규모 조직의 경우 조직 관리자(roles/resourcemanager.organizationAdmin)와 같은 광범위한 역할을 부여함으로써 더 간단한 방법을 취하는 것도 가능합니다. 그러나 이 접근 방식은 지속적인 요구사항에 따라 조정되지 않을 수 있습니다.

  • 해당 키로 보호되는 데이터와 다른 Google Cloud 프로젝트에 키를 호스팅하는 것이 좋습니다. editor처럼 한 프로젝트에서 기본 권한 또는 높은 권한이 있는 사용자는 이 역할을 사용하여 다른 프로젝트의 키에 액세스할 수 없습니다.

  • 구성원에게 owner 역할을 부여하지 않도록 하세요. owner 역할이 없으면 프로젝트의 각 구성원은 해당 구성원에게 각각의 권한이 부여되지 않는 한 키를 만들고 이를 사용하여 데이터를 복호화하거나 서명할 수 없습니다. 암호화 또는 복호화 기능을 부여하지 않고 광범위한 관리 액세스 권한을 부여하려면 대신 Cloud KMS 관리자 역할(roles/cloudkms.admin) 역할을 부여하세요.

  • 고객 데이터와 같은 암호화된 데이터에 대한 액세스를 제한하려면 키에 액세스할 수 있는 사용자와 복호화에 사용할 수 있는 사용자를 제한할 수 있습니다. 필요한 경우 비즈니스 요구사항에 맞게 세분화된 맞춤 역할을 만들 수 있습니다.

권한 확인

세분화된 IAM 권한을 설정할 수 있는 각 Cloud KMS 객체 유형에는 해당 객체에 testIamPermissions 메서드가 있습니다. testIamPermissions 메서드는 호출자에게 해당 객체에 부여된 권한 집합을 반환합니다.

키 버전에는 IAM 권한을 설정할 수 없으므로 CryptoKeyVersion 객체 유형에 이 메서드가 없습니다.

객체의 testIamPermissions 메서드는 TestIamPermissionsResponse를 반환합니다.

testIamPermissions 메서드 호출의 예시는 IAM 문서의 권한 테스트 문서를 참조하세요.

다음 단계

  • IAM이 Google Cloud 리소스의 권한 및 액세스 범위를 중앙에서 관리하는 방법 알아보기
  • 다양한 유형의 Cloud KMS 객체 이해하기