プロジェクトへのジャストインタイム特権アクセスを管理する

Last reviewed 2024-07-22 UTC

このドキュメントでは、オープンソース ツールを使用して Google Cloud プロジェクトへのジャストインタイム特権アクセスを実装する方法について説明します。ジャストインタイム特権アクセスでは、アクセスを必要とする場合にのみ、一部のユーザーにプロジェクトへの一時的なアクセス権を付与できます。

このドキュメントは、Google Cloud リソースへのユーザー アクセスを管理する管理者を対象としています。また、Google Cloud、Identity and Access Management(IAM)、関連するコンセプトについて理解していることを前提としています。

ジャストインタイムの特権アクセス管理の概要

最小権限の原則に従うと、ユーザーには十分なアクセス権のみが付与され、日常的なアクティビティは実行できるようになりますが、それ以上の操作は実行できません。 この原則に従うことで、リスクを軽減できます。ただし、予期しないインシデントに対処する場合など、特権アクションの実施が必要になることがあるため、ユーザーに負担がかかる可能性があります。たとえば、本番環境システムの問題のトラブルシューティングや、機密データを含む問題のトラブルシューティングなどを行う場合です。

この問題に対処する方法の一つは、ジャストインタイムの特権アクセスを提供することです。つまり、必要なときにのみ特権アクセスを付与します。ジャストインタイム特権アクセス管理の主な考え方は、永続アクセスと有効なアクセスを区別することです。

  • 永続アクセス権は、取り消すまで適用されます。最小権限の原則に従い、永続アクセス権を制限し、それを必要とする少数のユーザーにのみアクセス権を付与することをおすすめします。
  • 適格アクセス権はすぐには適用されません。代わりに、プロジェクトへの適格アクセス権が付与されているユーザーは、プロジェクトにアクセスする前に、そのアクセス権を明示的に有効にする必要があります。また、その理由も説明する必要があります。ユーザーのアクセス権が有効になった後、しばらくするとそのアクセス権が自動的に期限切れになります。

ジャストインタイム特権アクセス管理を使用すると、次のことが可能になります。

  • 誤ってリソースを変更または削除してしまうリスクを軽減できます。たとえば、ユーザーが必要な場合にのみ特権アクセスを持っていれば、変更すべきでないリソースに意図せず影響を与えるようなスクリプトをユーザーが実行しないようにできます。
  • 権限が有効化された理由を示す監査証跡を作成します。
  • 監査とレビューを行って過去のアクティビティを分析できます。

ジャストインタイム アクセスを使用して特権アクセスを実装する

ジャストインタイム アクセスは、App Engine または Cloud Run で実行するように設計されたオープンソース アプリケーションであり、Google Cloud リソースへのジャストインタイム特権アクセスを実装できます。このアプリケーションにより、管理者、ユーザー、監査者は次のタスクを実行できます。

  • 管理者は、次の IAM 条件を追加することによって、ユーザーまたはグループにロールを付与し、そのロールを有効にできます。

    has({}.jitAccessConstraint)
    
  • ユーザーは、ジャストインタイム アクセス アプリケーションを使用して、アクセス可能なプロジェクトやロールを検索できます。

    次のジャストインタイム アクセス アプリケーションのスクリーンショットは、ユーザーがプロジェクトで使用できるロールの一覧を示しています。

    対象の 2 つのロールと有効になっている 1 つのロールを示すジャストインタイム アクセス アプリケーションのスクリーンショット。

    1 つ以上のロールを有効にし、アクセス権を取得する理由を示すことができます。

    理由の入力フォームが表示されているジャストインタイム アクセス アプリケーションのスクリーンショット。

    ユーザーがロールを有効にすると、ジャストインタイム アクセスにより、プロジェクトへの一時的なアクセス権がユーザーに付与されます

  • 監査者は、Cloud Logging を使用して、適格なロールがユーザーによっていつ有効にされたかを確認できます。

不正アクセスからアプリケーションを保護するため、ジャストインタイム アクセス アプリケーションにアクセスできるのは、Identity-Aware Proxy(IAP)だけです。管理者は IAP を使用して、どのユーザーがジャストインタイム アクセスを許可するか、またそれらのユーザーがアクセスするために満たす必要がある追加の条件を制御できます。

始める前に

ジャストインタイム アクセス アプリケーションをデプロイする前に、リソース階層のどの部分に対してジャストインタイム特権アクセスを管理するかを決定する必要があります。次のリソースへのアクセス権を管理できます。

  • 単一のプロジェクト
  • 複数のプロジェクトを含むフォルダ
  • 組織のすべてのプロジェクト

デプロイを完了するには、次のものが必要です。

  • Cloud Identity への特権管理者権限、または使用している Google Cloud 組織に対応する Google Workspace アカウント。
  • ジャストインタイム アクセスを使用して管理するプロジェクト、フォルダ、または組織の IAM ポリシーを変更する権限。
  • アクセスのテスト用に用意した 2 番目の Cloud Identity または Google Workspace ユーザー。

ジャストインタイム アクセス アプリケーションをデプロイする Google Cloud プロジェクトも必要です。

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

ジャストインタイム アクセスをデプロイする

このセクションでは、ジャストインタイム アクセス アプリケーションを App Engine または Cloud Run にデプロイする方法について説明します。

ジャストインタイム アクセス アプリケーションを Cloud Run にデプロイするには、アプリケーションを App Engine にデプロイするよりも複雑な構成が必要です。したがって、App Engine をサポートしていないリージョンにデプロイする場合、または他の理由で App Engine を使用できない場合を除き、App Engine を使用することをおすすめします。

ジャストインタイム アクセスのコードは GitHub リポジトリにあります。

このセクションは、読者が管理者であることを前提としています。

Google Cloud プロジェクトを構成する。

  1. Google Cloud コンソールでプロジェクトに切り替えて、必要な API を有効にします。

    App Engine

    Enable the Cloud Asset Inventory, Resource Manager, Identity-Aware Proxy, Container Registry, Cloud Build, Identity and Access Management, and Directory APIs.

    Enable the APIs

    Cloud Run

    Enable the Cloud Asset Inventory, Resource Manager, Identity-Aware Proxy, Container Registry, Cloud Run, Compute Engine, Identity and Access Management, and Directory APIs.

    Enable the APIs

  2. Cloud Shell を開きます。

    Cloud Shell を開く

  3. プロジェクト ID を格納する環境変数を設定します。

    gcloud config set project PROJECT_ID
    

    PROJECT_ID は、プロジェクトの ID に置き換えます。

  4. ジャストインタイム アクセス アプリケーションのサービス アカウントを作成します。

    SERVICE_ACCOUNT=$(gcloud iam service-accounts create jitaccess --display-name "Just-In-Time Access" --format "value(email)")
    
  5. サービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator)を付与して、アプリケーションがそのサービス アカウントを使用してトークンを作成できるようにします。

    gcloud iam service-accounts add-iam-policy-binding $SERVICE_ACCOUNT \
      --member "serviceAccount:$SERVICE_ACCOUNT" \
      --role "roles/iam.serviceAccountTokenCreator"
    

    アプリケーションは、トークンを作成する権限を使用して Directory API にアクセスし、必要に応じて複数の関係者による承認ワークフローを処理します。

ジャストインタイム アクセス アプリケーションに IAM バインディングの管理権限を付与する

ここで、アプリケーションのサービス アカウントにプロジェクト IAM 管理者のロールを付与します。このロールを使用すると、ジャストインタイム アクセスを許可する必要がある場合に、ジャストインタイム アクセス アプリケーションが一時的な IAM バインディングを作成できます。

プロジェクト IAM 管理者のロールは権限が高いため、アプリケーションのサービス アカウントとそれを含むプロジェクトへのアクセスを制限する必要があります。

次のガイドラインに従ってください。

  • プロジェクトにアクセスできるユーザーの数を制限し、ユーザーにオーナーまたは編集者のロールを付与しないでください。
  • サービス アカウントの権限を借用できるユーザーの数を制限します。この借用が可能なユーザーには、サービス アカウント ユーザーのロールまたはサービス アカウント トークン作成者のロールを持つユーザーが含まれます。

サービス アカウントにプロジェクト IAM 管理者のロールを付与するには、次の手順を行います。

  1. ジャストインタイムの特権アクセスを管理するリソース階層の一部に、プロジェクト IAM 管理者ロール(roles/resourcemanager.projectIamAdmin)と Cloud Asset 閲覧者ロール(roles/cloudasset.viewer)を付与します。

    プロジェクト

    SCOPE_ID=RESOURCE_PROJECT_ID
    SCOPE_TYPE=projects
    
    gcloud projects add-iam-policy-binding $SCOPE_ID \
        --member "serviceAccount:$SERVICE_ACCOUNT" \
        --role "roles/resourcemanager.projectIamAdmin" \
        --condition None
    
    gcloud projects add-iam-policy-binding $SCOPE_ID \
        --member "serviceAccount:$SERVICE_ACCOUNT" \
        --role "roles/cloudasset.viewer" \
        --condition None
    

    RESOURCE_PROJECT_ID は、アクセスを管理する Google Cloud プロジェクトの ID に置き換えます。このプロジェクトは、ジャストインタイム アクセスをデプロイするプロジェクトとは異なるものです。

    フォルダ

    SCOPE_ID=RESOURCE_FOLDER_ID
    SCOPE_TYPE=folders
    
    gcloud resource-manager folders add-iam-policy-binding $SCOPE_ID \
        --member "serviceAccount:$SERVICE_ACCOUNT" \
        --role "roles/resourcemanager.projectIamAdmin" \
        --condition None
    gcloud resource-manager folders add-iam-policy-binding $SCOPE_ID \
        --member "serviceAccount:$SERVICE_ACCOUNT" \
        --role "roles/cloudasset.viewer" \
        --condition None
    

    RESOURCE_FOLDER_ID は、アクセスを管理するプロジェクトを含むフォルダの ID に置き換えます。

    組織

    SCOPE_ID=ORGANIZATION_ID
    SCOPE_TYPE=organizations
    
    gcloud organizations add-iam-policy-binding $SCOPE_ID \
        --member "serviceAccount:$SERVICE_ACCOUNT" \
        --role "roles/resourcemanager.projectIamAdmin" \
        --condition None
    gcloud organizations add-iam-policy-binding $SCOPE_ID \
        --member "serviceAccount:$SERVICE_ACCOUNT" \
        --role "roles/cloudasset.viewer" \
        --condition None
    

    ORGANIZATION_ID組織の ID に置き換えます。

アプリケーションがグループ メンバーシップを解決するためのアクセス権を付与する

ジャストインタイム アクセス アプリケーションでは、特定のユーザーまたはグループ全体に、適格アクセス権を付与できます。グループ メンバーシップを評価するには、アプリケーションが Cloud Identity または Google Workspace アカウントからグループ メンバーシップ情報を読み取ることができる必要があります。

アプリケーションのサービス アカウントにグループ メンバーシップの読み取り権限を付与するには、次の操作を行います。

  1. Google 管理コンソールを開き、特権管理者ユーザーとしてログインします。

  2. [アカウント] > [管理者ロール] に移動します。

    管理者ロールにアクセスする

  3. [Groups Reader] > [Admins] をクリックします。

  4. [Assign service accounts] をクリックします。

  5. 次のメールアドレスを入力します。

    jitaccess@PROJECT_ID.iam.gserviceaccount.com
    

    PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。

  6. [Add] をクリックします。

  7. [ロールを割り当て] をクリックします。

Cloud Identity アカウントまたは Google Workspace アカウントのお客様 ID を検索する

Directory API を使用してグループ メンバーを評価するには、ジャストインタイム アクセス アプリケーションに Cloud Identity アカウントまたは Google Workspace アカウントのお客様 ID が必要です。この ID を検索する手順は次のとおりです。

  1. Google 管理コンソールで、[アカウント] > [アカウント設定] に移動します。

    アカウント設定に移動する

  2. アカウントのお客様 ID をコピーします。お客様 ID は C で始まります。

    お客様 ID は後の手順で必要になります。

  3. 管理コンソールを閉じます。

アプリケーションをデプロイする

これで、ジャストインタイム アクセス アプリケーションを App Engine または Cloud Run にデプロイする準備が整いました。

App Engine

ジャストインタイム アクセス アプリケーションを App Engine にデプロイするには、次の操作を行います。

  1. Cloud Shell で、Cloud Identity アカウントまたは Google Workspace アカウントのお客様 ID を格納する環境変数を設定します。

    ACCOUNT_CUSTOMER_ID=CUSTOMER_ID
    

    CUSTOMER_ID は、以前に検索したお客様 ID に置き換えます。

  2. App Engine アプリケーションを作成します。

    gcloud app create --region LOCATION
    

    LOCATION は、サポートされている App Engine のロケーションに置き換えます。

  3. App Engine のデフォルトのサービス アカウントに Artifact Registry の Create-on-Push ライターroles/artifactregistry.createOnPushWriter)ロールとストレージ管理者roles/storage.admin)ロールを付与して、App Engine が Artifact Registry を使用できるようにします。

    PROJECT_ID=$(gcloud config get-value core/project)
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$PROJECT_ID@appspot.gserviceaccount.com" \
        --role "roles/artifactregistry.createOnPushWriter" \
        --condition None
    gcloud projects add-iam-policy-binding $PROJECT_ID\
        --member "serviceAccount:$PROJECT_ID@appspot.gserviceaccount.com" \
        --role "roles/storage.admin" \
        --condition None
    
  4. GitHub リポジトリのクローンを作成し、latest ブランチに切り替えます。

    git clone https://github.com/GoogleCloudPlatform/jit-groups.git
    cd jit-access/sources
    git checkout latest
    
  5. ジャストインタイム アクセス アプリケーションの構成ファイルを作成します。

    cat << EOF > app.yaml
    
    runtime: java17
    instance_class: F2
    service_account: $SERVICE_ACCOUNT
    env_variables:
        RESOURCE_SCOPE: $SCOPE_TYPE/$SCOPE_ID
        RESOURCE_CATALOG: AssetInventory
        RESOURCE_CUSTOMER_ID: $ACCOUNT_CUSTOMER_ID
        ACTIVATION_TIMEOUT: 60
        JUSTIFICATION_HINT: "Bug or case number"
        JUSTIFICATION_PATTERN: ".*"
    EOF
    

    この構成ファイルで、変数の値をカスタマイズできます。設定のリストについては、関連する GitHub リポジトリの [構成オプション] ページをご覧ください。

  6. アプリケーションをデプロイします。

    gcloud app deploy --appyaml app.yaml
    

    出力の target url をメモしておきます。これは、ジャストインタイム アクセス アプリケーションの公開 URL です。

    エラー メッセージ NOT_FOUND: Unable to retrieve P4SA が表示された場合は、コマンドを再試行してください。

Cloud Run

ジャストインタイム アクセス アプリケーションを Cloud Run にデプロイするには、次の操作を行います。

  1. Cloud Shell で、Cloud Identity アカウントまたは Google Workspace アカウントのお客様 ID を格納する環境変数を設定します。

    ACCOUNT_CUSTOMER_ID=CUSTOMER_ID
    

    CUSTOMER_ID は、以前に検索したお客様 ID に置き換えます。

  2. デプロイ先のリージョンを選択します。

    gcloud config set run/region REGION
    

    REGION は、Cloud Run をサポートするリージョンに置き換えます。

  3. バックエンド サービスを作成します。

    gcloud compute backend-services create jitaccess-backend \
      --load-balancing-scheme=EXTERNAL \
      --global
    

    このバックエンド サービスは、後でロードバランサと IAP を構成するために使用します。

  4. GitHub リポジトリのクローンを作成し、latest ブランチに切り替えます。

    git clone https://github.com/GoogleCloudPlatform/jit-groups.git
    cd jit-access/sources
    git checkout latest
    
  5. アプリケーションをビルドし、コンテナ イメージを Container Registry に push します。

    PROJECT_ID=$(gcloud config get-value core/project)
    
    docker build -t gcr.io/$PROJECT_ID/jitaccess:latest .
    docker push gcr.io/$PROJECT_ID/jitaccess:latest
    
  6. ジャストインタイム アクセス アプリケーションの構成ファイルを作成します。

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format 'value(projectNumber)')
    REGION=$(gcloud config get-value run/region)
    IAP_BACKEND_SERVICE_ID=$(gcloud compute backend-services describe jitaccess-backend --global --format 'value(id)')
    
    cat << EOF > app.yaml
    
    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: jitaccess
      namespace: $PROJECT_NUMBER
      labels:
        cloud.googleapis.com/location: $REGION
      annotations:
        run.googleapis.com/ingress: internal-and-cloud-load-balancing
    spec:
      template:
        spec:
          serviceAccountName: $SERVICE_ACCOUNT
          containers:
          - image: gcr.io/$PROJECT_ID/jitaccess:latest
            env:
            - name: RESOURCE_SCOPE
              value: "$SCOPE_TYPE/$SCOPE_ID"
            - name: RESOURCE_CATALOG
              value: "AssetInventory"
            - name: RESOURCE_CUSTOMER_ID
              value: "$ACCOUNT_CUSTOMER_ID"
            - name: ACTIVATION_TIMEOUT
              value: "60"
            - name: JUSTIFICATION_HINT
              value: "Bug or case number"
            - name: JUSTIFICATION_PATTERN
              value: ".*"
            - name: IAP_BACKEND_SERVICE_ID
              value: "$IAP_BACKEND_SERVICE_ID"
    EOF
    
    

    この構成ファイルで、変数の値をカスタマイズできます。設定のリストについては、関連する GitHub リポジトリの [構成オプション] ページをご覧ください。

  7. アプリケーションをデプロイします。

    gcloud run services replace app.yaml
    

ロードバランサを構成する

ジャストインタイム アクセス アプリケーションのロードバランサを構成します。

App Engine

App Engine はロードバランサを自動的に構成します。

Cloud Run

Cloud Run サービスの HTTPS ロードバランサを構成します。

  1. ロードバランサ用の静的外部 IP アドレスを予約します。

    gcloud compute addresses create jitaccess-ip --global
    
  2. ロードバランサ用のマネージド SSL 証明書を作成します。

    gcloud compute ssl-certificates create jitaccess \
      --domains PUBLIC_FQDN \
      --global
    

    ここで、PUBLIC_FQDN は、使用するパブリック完全修飾ドメイン名(FQDN)です(例: jitaccess.example.com)。

  3. ロードバランサの IP アドレスを調べます。

    gcloud compute addresses describe jitaccess-ip \
      --global \
      --format=value\(address\)
    
  4. パブリック DNS ゾーンに、ロードバランサの IP アドレスを指す DNS A レコードを作成します。DNS レコードの完全修飾名は、SSL 証明書に使用した名前と一致する必要があります。

  5. Cloud Run サービスにサーバーレス ネットワーク エンドポイント グループを作成し、バックエンド サービスに接続します。

    gcloud compute network-endpoint-groups create jitaccess \
      --region $(gcloud config get-value run/region) \
      --network-endpoint-type=serverless  \
      --cloud-run-service jitaccess
    gcloud compute backend-services add-backend jitaccess-backend \
      --global \
      --network-endpoint-group jitaccess \
      --network-endpoint-group-region $(gcloud config get-value run/region)
    
  6. ロードバランサ フロントエンドを作成します。このフロントエンドは、外部 IP アドレスを使用し、バックエンド サービスにトラフィックを転送します。

    gcloud compute url-maps create jitaccess \
      --default-service jitaccess-backend
    gcloud compute target-https-proxies create jitaccess-proxy \
      --ssl-certificates jitaccess \
      --url-map jitaccess
    gcloud compute forwarding-rules create jitaccess-https \
      --load-balancing-scheme EXTERNAL \
      --address jitaccess-ip \
      --target-https-proxy jitaccess-proxy \
      --global \
      --ports=443
    

Identity-Aware Proxy の構成

ジャストインタイム アクセス アプリケーションの IAP を構成します。

  1. Cloud Shell で、OAuth 同意画面を構成します。

    gcloud iap oauth-brands create \
        --application_title "Just-In-Time Access" \
        --support_email=$(gcloud config get core/account)
    
  2. Google Cloud コンソールで、[セキュリティ] > [Identity-Aware Proxy] に移動します。

    IAP に移動

  3. [IAP] を [有効] に設定します。

ジャストインタイム アクセス アプリケーションへのアクセスを許可するユーザーを定義する必要があります。個々のユーザー、グループ、またはドメイン全体にアクセス権を付与できます。

  1. Google Cloud コンソールで、[IAM と管理] > [IAM] に移動します。

    IAM に移動

  2. [アクセス権を付与] をクリックして、次の値を設定します。

    1. [プリンシパル] リストで、ユーザー、グループ、またはドメインを選択します。
    2. ロールリストで、[IAP で保護されたウェブアプリ ユーザー] を選択します。

    IAP で保護されたウェブアプリ ユーザーのロールにより、ユーザーはジャストインタイム アクセス アプリケーションを開くことができますが、このロールではまだ追加のリソースへのアクセスは提供されません。

  3. [保存] をクリックします。

ロール バインディングが有効になるまで数分かかることがあります。

App Engine

これで IAP の構成が完了しました。

Cloud Run

IAP の構成を完了するには、IAP が使用するサービス エージェントに Cloud Run 起動元ロール(roles/run.invoker)を付与します。

PROJECT_NUMBER=$(gcloud projects list \
  --filter $(gcloud config get-value project) \
  --format "value(PROJECT_NUMBER)")

gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \
  --member "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-iap.iam.gserviceaccount.com" \
  --role "roles/run.invoker"

ジャストインタイム アクセスをテストする

これで、対象のアクセス権を付与するプロセスと、ジャストインタイム アクセス アプリケーションを使用して対象のアクセスを有効にするプロセスをテストできるようになりました。

適格アクセス権を付与する

まず、2 番目の Cloud Identity または Google Workspace ユーザーに適格アクセス権を付与します。

  1. Google Cloud コンソールで、プロジェクト リストを使用して、ジャストインタイム アクセス アプリケーションで管理されているリソース階層の一部であるプロジェクトを選択します。
  2. [IAM] ページで、[アクセスを許可] をクリックします。
  3. 2 番目の Cloud Identity または Google Workspace ユーザーのメールアドレスを入力し、[プロジェクト] > [参照者] などのロールを選択します。
  4. [条件を追加] をクリックします。
  5. Eligible for JIT access」などのタイトルを入力します。
  6. [条件エディタ] を選択して、次の CEL 式を入力します。

    has({}.jitAccessConstraint)
    
  7. 変更を保存します。

アクセス権を有効にする

これで、ユーザーを切り替えて、リソースに対する一時的なアクセス権をリクエストできます。

  1. ブラウザのシークレット ウィンドウを開き、先ほどメモしたジャストインタイム アクセス アプリケーションの URL に移動します。
  2. 適格アクセス権が付与されたユーザーとしてログインします。
  3. ジャストインタイム アクセス アプリケーションで、アクセス権を有効にするロールとリソースを選択します。
  4. 理由(例: testing)を入力し、[アクセス権をリクエスト] をクリックします。

    次のページで、アクセス権が一時的に有効になっていることを確認します。

ログを分析する

管理者権限を持つユーザーに戻ってログを確認できるようになりました。

  1. Google Cloud コンソールで、[ロギング] > [ログ エクスプローラ] に移動します。

    [ログ エクスプローラ] に移動

  2. [クエリを表示] を [有効] に設定します。

  3. 次のクエリを入力します。

    labels.event="api.activateRole"
    
  4. [クエリを実行] をクリックします。

    出力は次のようになります。

    {
    "textPayload": "User EMAIL activated role 'ROLE' on '//cloudresourcemanager.googleapis.com/projects/PROJECT_ID' for themselves",
    "severity": "INFO",
    "labels": {
        "resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
        "event": "api.activateRole",
        "role": "ROLE",
        "clone_id": "00c6...",
        "user": "EMAIL",
        "justification": "testing",
        ...
      },
    ...
    }
    

    有効にしたロールごとにログレコードが作成されていることに注目してください。 ログレコードには、カスタム フィルタの作成に使用できる一連のラベルが含まれています。

ジャストインタイム アクセスのアップグレード

このセクションでは、既存のジャストインタイム アクセスのデプロイをアップグレードして、アプリケーションの新しいバージョンまたは別の構成を使用する方法について説明します。

このセクションは、読者が管理者であることを前提としています。

  1. Google Cloud コンソールでプロジェクトに切り替え、Cloud Shell を開きます。

    Cloud Shell を開く

  2. プロジェクト ID を格納する環境変数を設定します。

    gcloud config set project PROJECT_ID
    

    PROJECT_ID は、プロジェクトの ID に置き換えます。

  3. GitHub リポジトリのクローンを作成し、latest ブランチに切り替えます。

    git clone https://github.com/GoogleCloudPlatform/jit-groups.git
    cd jit-access/sources
    git checkout latest
    
  4. 先ほどアプリケーションのデプロイに使用した構成ファイルをダウンロードし、ファイル app.yaml に保存します。

    App Engine

    APPENGINE_VERSION=$(gcloud app versions list --service default --hide-no-traffic --format "value(version.id)")
    APPENGINE_APPYAML_URL=$(gcloud app versions describe $APPENGINE_VERSION --service default --format "value(deployment.files.'app.yaml'.sourceUrl)")
    
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" $APPENGINE_APPYAML_URL -o app.yaml
    cat app.yaml
    

    ファイル app.yaml のダウンロードが失敗した場合は、Google Cloud コンソールで現在の構成をダウンロードできます。

    Cloud Run

    gcloud config set run/region REGION
    gcloud run services describe jitaccess --format yaml > app.yaml
    

    REGION は、既存の Cloud Run デプロイを含むリージョンに置き換えます。

  5. 構成を変更する場合は、app.yaml ファイルを編集します。設定のリストについては、関連する GitHub リポジトリの [構成オプション] ページをご覧ください。

  6. アプリケーションをデプロイします。

    App Engine

    sed -i 's/java11/java17/g' app.yaml
    gcloud app deploy --appyaml app.yaml
    

    Cloud Run

    PROJECT_ID=$(gcloud config get-value core/project)
    
    docker build -t gcr.io/$PROJECT_ID/jitaccess:latest .
    docker push gcr.io/$PROJECT_ID/jitaccess:latest
    
    IMAGE=$(docker inspect --format='{{index .RepoDigests 0}}'  gcr.io/$PROJECT_ID/jitaccess)
    sed -i "s|image:.*|image: $IMAGE|g" app.yaml
    
    gcloud run services replace app.yaml
    

次のステップ