本番環境へのアクセス管理と、GCPの特権アクセス マネージャー(Privileged Access Manager)
はじめに
私ごとですが先日GCPのProfessional Cloud Security Engineerの資格を取得しました。
(他にもProfessional Cloud ArchitectとProfessional Cloud Developerを持っています)
そして、記事執筆時点で私が所属している株式会社スリーシェイクはSREの文化が根付いており、セキュリティの向上やtoil削減への情熱を持っています。
そのような環境で、幸運にもセキュリティの向上とtoil削減の両方に関わる「本番環境のアクセス管理」というテーマで検証や導入支援等を行う機会があったため、知見をシェアしたく記事を執筆しました。
概要
- Google Cloud Next '24で紹介されていた本番環境のアクセス管理のお話です。
- 先月プレビュー公開された特権アクセスマネージャー(Privileged Access Manager: PAM)の利点を説明しています(記事執筆時点ではZennで初めて/日本全体でもかなり珍しい記事かも?)
- 今まではGCP公式ドキュメントに記載されている方法としてはJITアクセスアプリが存在しましたが、マネージドのサービスではなくGAEやCloudRunで動かす必要がありました
- GCPマネージドのPAMは、セルフホストのJITアクセスアプリに比べ大幅に運用負荷を減らせそうです。
- 制限事項として、JITアクセスアプリと同じくIAM Conditionsの影響を受けるようです。
既存のJITアクセスアプリについて
今までは本番環境へのアクセス管理方法として、GCP公式ドキュメントではJITアクセスアプリを利用する方法が記載されていました。
このJITアクセスアプリのコードはgithub.com/GoogleCloudPlatform配下の
でホストされた上でGCPの方により開発されているものの、
Just-In-Time Access is an open-source project and not an officially supported Google product.
と記載されている上に、マネージドサービスではなく自分でGAEやCloudRunにデプロイして運用する必要がありました。
それでもMercariさんのように自前で本番環境アクセスシステムを構築するのに比べると大幅に手間が省けるため、例えばUzabaseさんも利用されているようです。
実際に私が検証・導入を支援したプロジェクトでも、このJITアクセスアプリの導入によりtoilを削減出来ただけでなくセキュリティも向上出来たという嬉しいフィードバックを頂いていました。
(私も便利なアプリだなと感じており、公式リポジトリに時々フィードバックを送ったりしていました)
既存のJITアクセスアプリの課題
実際にJITアクセスアプリを検証・運用する中で感じた一番の課題は、エラー対応だったりシステム更新だったりといった様々な理由でアクセスされる本番環境について、もしもJITアクセスアプリで障害やエラーが発生してしまった場合は関連業務がストップしてしまうということでした。
その対策として私が導入支援したプロジェクトでは、もしJITアクセスアプリで障害が発生しても別の経路で業務を継続できるような仕組み/マニュアルを用意していましたが、そうはいってもこのシステムが止まると困るため心理的な運用コストみたいなものが少なからずありました。
そういった理由から、例えばJITアクセスアプリのバージョン更新等は結構気を使う作業でした。
新しい特権アクセスマネージャーの利点
既存のJITアクセスアプリはGAEやCloudRunに自前でデプロイ/運用/エラー監視等を行う必要がありましたが、新しい特権アクセスマネージャー(Privileged Access Manager: PAM)はマネージドのサービスなので大幅に運用負荷を軽減できそうです。
また監査ログについても、以下のような専用のUIが用意されており非常に使い勝手が良いです。
(JITアクセスアプリにはこういった監査ログを見るための専用UIは存在しません)
特権アクセスマネージャーのアクセス申請UI
上記では監査ログについて触れましたが、アクセス申請時のUIも以下のようなものになっており、初見の方でも問題なく使えるように思います。
特権アクセスマネージャー導入用のterraform
特権アクセスマネージャー導入用のterraformについても、記事執筆時点ではbeta扱いながらも既に対応されているようです。
resource "google_privileged_access_manager_entitlement" "tfentitlement" {
provider = google-beta
entitlement_id = "example-entitlement"
location = "global"
max_request_duration = "43200s"
parent = "projects/my-project-name"
requester_justification_config {
unstructured{}
}
eligible_users {
principals = ["group:test@google.com"]
}
privileged_access{
gcp_iam_access{
role_bindings{
role = "roles/storage.admin"
condition_expression = "request.time < timestamp(\"2024-04-23T18:30:00.000Z\")"
}
resource = "//cloudresourcemanager.googleapis.com/projects/my-project-name"
resource_type = "cloudresourcemanager.googleapis.com/Project"
}
}
additional_notification_targets {
admin_email_recipients = ["user@example.com"]
requester_email_recipients = ["user@example.com"]
}
approval_workflow {
manual_approvals {
require_approver_justification = true
steps {
approvals_needed = 1
approver_email_recipients = ["user@example.com"]
approvers {
principals = ["group:test@google.com"]
}
}
}
}
}
制限事項
制限事項として、JITアクセスアプリと同じくIAM Conditionsの影響を受けるため、編集者等の基本ロールは利用できないようです。
(もし広範な権限を与えたい場合は、自前で編集者相当のカスタムロールを作るといった対応が必要です)
Discussion