권한 및 역할

Cloud KMS에서 리소스는 계층 구조로 구성됩니다. 이 계층 구조를 사용하면 다양한 세분성 수준으로 리소스에 대한 액세스 권한을 관리하고 부여할 수 있습니다. 키는 키링에 포함되며 키링은 프로젝트 내에 있습니다. EKM 연결은 프로젝트 내에도 있습니다. 프로젝트를 폴더나 조직으로 더 정리할 수 있습니다.

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

리소스 계층 구조

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

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

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

보안 원칙

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

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

  • 최소 권한의 원칙을 적용하면 구성원이 자신의 특정 비즈니스 기능을 완료하는 데 필요한 최소한의 액세스 권한만 보유하게 됩니다. 예를 들어 은행 창구 직원에게는 고객 대출 승인 권한이 자동으로 부여되지 않습니다.

사전 정의된 역할

IAM은 각 유형의 Google Cloud 리소스에 대한 액세스 권한을 부여하는 사전 정의된 역할을 제공합니다. 사전 정의된 역할이 요구사항에 맞지 않는다면 커스텀 역할을 만들면 됩니다.

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

Role Permissions

(roles/cloudkms.admin)

Provides access to Cloud KMS resources, except for access to restricted resource types and cryptographic operations.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.create

cloudkms.cryptoKeyVersions.destroy

cloudkms.cryptoKeyVersions.get

cloudkms.cryptoKeyVersions.list

cloudkms.cryptoKeyVersions.restore

cloudkms.cryptoKeyVersions.update

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

cloudkms.cryptoKeyVersions.useToEncryptViaDelegation

cloudkms.cryptoKeys.*

  • cloudkms.cryptoKeys.create
  • cloudkms.cryptoKeys.get
  • cloudkms.cryptoKeys.getIamPolicy
  • cloudkms.cryptoKeys.list
  • cloudkms.cryptoKeys.setIamPolicy
  • cloudkms.cryptoKeys.update

cloudkms.ekmConfigs.*

  • cloudkms.ekmConfigs.get
  • cloudkms.ekmConfigs.getIamPolicy
  • cloudkms.ekmConfigs.setIamPolicy
  • cloudkms.ekmConfigs.update

cloudkms.ekmConnections.*

  • cloudkms.ekmConnections.create
  • cloudkms.ekmConnections.get
  • cloudkms.ekmConnections.getIamPolicy
  • cloudkms.ekmConnections.list
  • cloudkms.ekmConnections.setIamPolicy
  • cloudkms.ekmConnections.update
  • cloudkms.ekmConnections.use
  • cloudkms.ekmConnections.verifyConnectivity

cloudkms.importJobs.*

  • cloudkms.importJobs.create
  • cloudkms.importJobs.get
  • cloudkms.importJobs.getIamPolicy
  • cloudkms.importJobs.list
  • cloudkms.importJobs.setIamPolicy
  • cloudkms.importJobs.useToImport

cloudkms.keyRings.*

  • cloudkms.keyRings.create
  • cloudkms.keyRings.createTagBinding
  • cloudkms.keyRings.deleteTagBinding
  • cloudkms.keyRings.get
  • cloudkms.keyRings.getIamPolicy
  • cloudkms.keyRings.list
  • cloudkms.keyRings.listEffectiveTags
  • cloudkms.keyRings.listTagBindings
  • cloudkms.keyRings.setIamPolicy

cloudkms.locations.get

cloudkms.locations.list

cloudkms.locations.optOutKeyDeletionMsa

resourcemanager.projects.get

(roles/cloudkms.cryptoKeyDecrypter)

Provides ability to use Cloud KMS resources for decrypt operations only.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToDecrypt

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.cryptoKeyDecrypterViaDelegation)

Enables Decrypt operations via other Google Cloud services

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.cryptoKeyEncrypter)

Provides ability to use Cloud KMS resources for encrypt operations only.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToEncrypt

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.cryptoKeyEncrypterDecrypter)

Provides ability to use Cloud KMS resources for encrypt and decrypt operations only.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToDecrypt

cloudkms.cryptoKeyVersions.useToEncrypt

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation)

Enables Encrypt and Decrypt operations via other Google Cloud services

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

cloudkms.cryptoKeyVersions.useToEncryptViaDelegation

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.cryptoKeyEncrypterViaDelegation)

Enables Encrypt operations via other Google Cloud services

cloudkms.cryptoKeyVersions.useToEncryptViaDelegation

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.cryptoOperator)

Enables all Crypto Operations.

cloudkms.cryptoKeyVersions.useToDecrypt

cloudkms.cryptoKeyVersions.useToEncrypt

cloudkms.cryptoKeyVersions.useToSign

cloudkms.cryptoKeyVersions.useToVerify

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.generateRandomBytes

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.ekmConnectionsAdmin)

Enables management of EkmConnections.

cloudkms.ekmConfigs.get

cloudkms.ekmConfigs.update

cloudkms.ekmConnections.create

cloudkms.ekmConnections.get

cloudkms.ekmConnections.list

cloudkms.ekmConnections.update

cloudkms.ekmConnections.verifyConnectivity

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.expertRawAesCbc)

Enables raw AES-CBC keys management.

cloudkms.cryptoKeyVersions.manageRawAesCbcKeys

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.expertRawAesCtr)

Enables raw AES-CTR keys management.

cloudkms.cryptoKeyVersions.manageRawAesCtrKeys

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.expertRawPKCS1)

Enables raw PKCS#1 keys management.

cloudkms.cryptoKeyVersions.manageRawPKCS1Keys

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.importer)

Enables ImportCryptoKeyVersion, CreateImportJob, ListImportJobs, and GetImportJob operations

cloudkms.importJobs.create

cloudkms.importJobs.get

cloudkms.importJobs.list

cloudkms.importJobs.useToImport

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.protectedResourcesViewer)

Enables viewing protected resources.

cloudkms.protectedResources.search

(roles/cloudkms.publicKeyViewer)

Enables GetPublicKey operations

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.signer)

Enables Sign operations

cloudkms.cryptoKeyVersions.useToSign

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.signerVerifier)

Enables Sign, Verify, and GetPublicKey operations

cloudkms.cryptoKeyVersions.useToSign

cloudkms.cryptoKeyVersions.useToVerify

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.verifier)

Enables Verify and GetPublicKey operations

cloudkms.cryptoKeyVersions.useToVerify

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.viewer)

Enables Get and List operations.

cloudkms.cryptoKeyVersions.get

cloudkms.cryptoKeyVersions.list

cloudkms.cryptoKeys.get

cloudkms.cryptoKeys.list

cloudkms.ekmConfigs.get

cloudkms.ekmConnections.get

cloudkms.ekmConnections.list

cloudkms.importJobs.get

cloudkms.importJobs.list

cloudkms.keyRings.get

cloudkms.keyRings.list

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 객체 이해하기