IAM を使用したアクセス制御

このページでは、Certificate Authority Service の IAM ロールについて説明します。

CA Service は、Identity and Access Management(IAM)ロールを使用してアクセス制御を行います。IAM では、誰(ID)がどのリソースに対してどのようなアクセス権(ロール)を持つかを定義することによって、アクセスを制御します。IAM ロールには、ユーザーが Google Cloud リソースで特定の操作を実行できるようにする一連の権限が含まれています。IAM ロールを付与するときに最小権限の原則に従うことで、Certificate Authority Service リソースの完全性を保護し、CA プールと全体の公開鍵基盤(PKI)自体のセキュリティを管理できます。

ユーザーまたはサービス アカウントに IAM ロールを割り当てる方法については、IAM ドキュメントのリソースへのアクセス権の付与、変更、取り消しをご覧ください。

事前定義ロール

次の表に、事前定義された IAM ロールと、各ロールに関連付けられた権限を示します。

ロール 権限 説明
CA Service 監査者
roles/privateca.auditor
privateca.caPools.get
privateca.caPools.getIamPolicy
privateca.caPools.list
privateca.certificateAuthorities.list
privateca.certificateAuthorities.get
privateca.certificateTemplates.get
privateca.certificateTemplates.getIamPolicy
privateca.certificateTemplates.list
privateca.certificates.list
privateca.certificates.get
privateca.locations.get
privateca.locations.list
privateca.operations.get
privateca.operations.list
privateca.certificateRevocationLists.list
privateca.certificateRevocationLists.get
privateca.certificateRevocationLists.getIamPolicy
resourcemanager.projects.get
resourcemanager.projects.list
CA Service 監査者ロールには、すべての CA Service リソースに対する読み取り専用アクセス権があり、CA プール、CA、証明書、失効リスト、IAM ポリシー、プロジェクトのプロパティを取得して一覧表示できます。CA プールのセキュリティとオペレーションの検証を担当し、サービスを管理する日常業務を割り当てられていない個人にこのロールを割り当てることをおすすめします。
CA Service 証明書リクエスト元
roles/privateca.certificateRequester
privateca.certificates.create CA Service 証明書リクエスト元のロールでは、証明書リクエストを CA プールに送信できます。証明書のリクエストが許可されている信頼できる個人に、このロールを付与することをおすすめします。

このロールを持つユーザーは、発行ポリシーに従って任意の証明書をリクエストできます。

CA Service 証明書マネージャーのロールとは異なり、このロールでは、ユーザーが新しく発行された証明書を取得または一覧表示することや、CA プールに関する情報を取得することはできません。
CA Service ワークロード証明書リクエスト元
roles/privateca.workloadCertificateRequester
privateca.certificates.createForSelf CA Service ワークロード証明書リクエスト元は、呼び出し元の ID を使用して CA サービスから証明書をリクエストできます。
CA Service 証明書マネージャー
roles/privateca.certificateManager
roles/privateca.auditor からのすべての権限と以下の権限:
privateca.certificates.create
CA Service 証明書マネージャーは、CA Service 証明書リクエスト元などの CA プールに証明書発行リクエストを送信できます。また、このロールは CA Service 監査者ロールの権限も継承します。マネージャーやリード エンジニアなど、CA プールでの証明書リクエストの作成、追跡、確認を担当する個人に、このロールを割り当てることをおすすめします。
CA Service 証明書テンプレート ユーザー
roles/privateca.templateUser
privateca.certificateTemplates.get
privateca.certificateTemplates.list
privateca.certificateTemplates.use
CA Service 証明書テンプレート ユーザーは、証明書テンプレートの読み取り、一覧表示、使用を行うことができます。
CA Service オペレーション マネージャー
roles/privateca.caManager
roles/privateca.auditor からのすべての権限と以下の権限:
privateca.certificates.update
privateca.caPools.create
privateca.caPools.delete
privateca.caPools.update
privateca.certificateAuthorities.create
privateca.certificateAuthorities.delete
privateca.certificateAuthorities.update
privateca.certificateRevocationLists.update
privateca.certificateTemplates.create
privateca.certificateTemplates.delete
privateca.certificateTemplates.update
privateca.certificates.update
privateca.operations.cancel
privateca.operations.delete
resourcemanager.projects.get
resourcemanager.projects.list
storage.buckets.create
CA Service オペレーション マネージャーは、CA プールと CA を作成、更新、削除できます。このロールでは、証明書の取り消しと Cloud Storage バケットの作成を行うこともできます。また、CA Service 監査者と同じ機能も含まれます。このロールでは、個人が CA プールの発行ポリシーの構成に加え、組織内で CA プールの構成とデプロイを行う責任があります。

このロールでは、証明書の作成は許可されません。これを行うには、CA Service 証明書リクエスト元、CA Service 証明書マネージャー、または CA Service 管理者のロールを使用します。
CA サービス管理者
roles/privateca.admin
roles/privateca.certificateManager および roles/privateca.caManager からのすべての権限と以下の権限:
privateca.*.setIamPolicy
privateca.caPools.use
privateca.operations.cancel
privateca.operations.delete
privateca.resourcemanager.projects.get
privateca.resourcemanager.projects.list
storage.buckets.create
CA Service 管理者のロールは、CA Service オペレーション マネージャーと CA Service 証明書マネージャーのロールの権限を継承します。このロールでは、CA Service 内のすべてのアクションを実行できます。CA Service 管理者は、CA プールの IAM ポリシーを設定し、Cloud Storage バケットを作成できます。サービスの確立後は、このロールをできるだけ割り当てないことをおすすめします。このロールでは、個人が他のユーザーへの権限の割り当てや、CA Service 内の証明書リクエストの管理など、あらゆる管理作業を行うことができます。このロール アカウントに対する特別な制御とアクセスを実装し、不正なアクセスや使用を防止することをおすすめします。

CA Service サービス エージェントのロール

CA の作成時に既存の Cloud KMS 署名鍵または Cloud Storage バケットを指定する場合は、CA Service サービス エージェントのサービス アカウント(service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com)に、それぞれのリソースへのアクセス権を付与する必要があります。

Cloud KMS の場合、roles/cloudkms.signerVerifier は、署名鍵を使用して公開鍵を読み取るために必要です。roles/viewer は、Cloud Monitoring 統合のキーをモニタリングするために必要です。

Cloud Storage の場合、roles/storage.objectAdmin は、CA 証明書と CRL をバケットに書き込むために必要です。roles/storage.legacyBucketReader は、Cloud Monitoring 統合のバケットをモニタリングするために必要です。詳細については、Cloud Storage に対する IAM ロールをご覧ください。

API を使用してサービスにアクセスする際には、次のコマンドを実行します。

  1. サービス エージェントのロールを持つサービス アカウントを作成します。

    gcloud

    gcloud beta services identity create --service=privateca.googleapis.com --project=PROJECT_ID
    

    ここで

    • PROJECT_ID は、CA プールが作成されるプロジェクトの固有識別子です。
  2. 次の gcloud コマンドを使用して、サービス アカウントに roles/cloudkms.signerVerifier ロールと roles/viewer ロールを付与します。

    既存の Cloud KMS 署名鍵が指定されている場合:

    gcloud

    gcloud kms keys add-iam-policy-binding 'CRYPTOKEY_NAME' \
      --keyring='KEYRING_NAME' \
      --location='LOCATION' \
      --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com' \
      --role='roles/cloudkms.signerVerifier'
    

    ここで

    • CRYPTOKEY_NAME は、鍵の名前です。
    • KEYRING_NAME は、キーリングの名前です。
    • LOCATION」は、キーリングを作成した Cloud KMS のロケーションです。
    • PROJECT_NUMBER」は、サービス アカウントの名前です。
    gcloud kms keys add-iam-policy-binding 'CRYPTOKEY_NAME' \
      --keyring='KEYRING_NAME' \
      --location='LOCATION' \
      --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com' \
      --role='roles/viewer'
    
  3. 次の gcloud コマンドを使用して、サービス アカウントに roles/storage.objectAdmin ロールと roles/storage.legacyBucketReader ロールを付与します。

    既存の Cloud Storage バケットがある場合:

    gcloud

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com \
      --role=roles/storage.objectAdmin
    

    ここで

    • BUCKET_NAME は、Cloud Storage バケットの名前です。
    • PROJECT_NUMBER はサービス アカウントの固有識別子です。
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com \
      --role=roles/storage.legacyBucketReader
    

API 権限

次の表に、CA Service API の各メソッドを呼び出すために必要な権限を示します。

権限 説明
privateca.caPools.create 認証局(CA)プールを作成します。
privateca.caPools.update CA プールを更新します。
privateca.caPools.list プロジェクト内の CA プールを一覧表示します。
privateca.caPools.get CA プールを取得します。
privateca.caPools.delete CA プールを削除します。
privateca.caPools.use CA プールを使用します。
privateca.caPools.getIamPolicy CA プールの IAM ポリシーを取得します。
privateca.caPools.setIamPolicy CA プールの IAM ポリシーを設定します。
privateca.certificateAuthorities.create CA を作成します。
privateca.certificateAuthorities.delete CA の削除のスケジュールを設定します。
privateca.certificateAuthorities.get CA または CA 証明書の署名リクエストを取得します。
privateca.certificateAuthorities.list プロジェクト内の CA を一覧表示します。
privateca.certificateAuthorities.update CA の有効化、アクティブ化、無効化、復元を含めて、CA を更新します。
privateca.certificates.create CA サービスに証明書をリクエストします。
privateca.certificates.createForSelf 呼び出し元の ID を使用して CA サービスに証明書をリクエストします。
privateca.certificates.get 証明書とそのメタデータを取得します。
privateca.certificates.list CA 内のすべての証明書を一覧表示します。
privateca.certificates.update 取り消しを含めて、証明書のメタデータを更新します。
privateca.certificateRevocationLists.get CA 内の証明書失効リスト(CRL)を取得します。
privateca.certificateRevocationLists.getIamPolicy CRL の IAM ポリシーを取得します。
privateca.certificateRevocationLists.list CA 内のすべての CRL を一覧表示します。
privateca.certificateRevocationLists.setIamPolicy CRL の IAM ポリシーを設定します。
privateca.certificateRevocationLists.update CRL を更新します。
privateca.certificateTemplates.create 証明書テンプレートを作成します。
privateca.certificateTemplates.get 証明書テンプレートを取得します。
privateca.certificateTemplates.list すべての証明書テンプレートを一覧表示します。
privateca.certificateTemplates.update 証明書テンプレートを更新します。
privateca.certificateTemplates.delete 証明書テンプレートを削除します。
privateca.certificateTemplates.getIamPolicy 証明書テンプレートの IAM ポリシーを取得します。
privateca.certificateTemplates.setIamPolicy 証明書テンプレートの IAM ポリシーを設定します。
privateca.certificateTemplates.use 証明書テンプレートを使用します。
privateca.operations.cancel 長時間実行オペレーションをキャンセルします。
privateca.operations.delete 長時間実行オペレーションを削除します。
privateca.operations.get 長時間実行オペレーションを取得します。
privateca.operations.list プロジェクト内の長時間実行オペレーションを一覧表示します。

次のステップ

  • IAM を使用して、Google Cloud リソースの権限とアクセス スコープを一元管理する方法を確認します。
  • IAM ポリシーの構成方法を学習する。