カスタムロールの変更ログとアラートの確認

カスタム IAM ロールの作成、変更、削除、復元を追跡してください。

説明

カスタム IAM ロールは組織に合った細かな権限設計に使えますが、誤った変更により過剰な権限が生じる場合があります。作成、変更、削除、復元を追跡するログとアラートがないと、こうした変更を見落としやすくなります。

想定される影響

  • 過剰な権限の追加や必要なロールの削除の発見が遅れるおそれがあります。
  • アクセス制御の変更の調査や承認の確認に時間がかかる場合があります。

対処方法

  • 実際のログに合う iam_role リソースの種類と、CreateRole、DeleteRole、UpdateRole、UndeleteRole のイベントを含むメトリクスフィルターを設定してください。
  • そのメトリクスを参照するアラート条件と notification_channels を設定し、承認された試験変更で受信を確認してください。アラートだけでロールの変更を防げるわけではありません。

例

設定の一部を比較する例で、変更前のアラート構成は不完全です。変更後の var.audit_monitored_resource_type には対象メトリクスに実在する監視対象リソースの種類を指定し、通知チャネルとプロジェクトは別途設定してください。評価期間はログ取り込みの遅延と運用要件に合わせて調整してください。

変更前

hcl
resource "google_logging_metric" "custom_role_change" {
  name        = "custom_role_change"
  description = "Detects custom role changes"
  filter = <<-FILTER
    resource.type="Wrong_type"
    AND (protoPayload.methodName = "google.iam.admin.v1.CreateRole" OR
    protoPayload.methodName="google.iam.admin.v1.DeleteRole" OR
    protoPayload.methodName="google.iam.admin.v1.UpdateRole" OR
    protoPayload.methodName="google.iam.admin.v1.UndeleteRole")
  FILTER
}

resource "google_monitoring_alert_policy" "custom_role_alert" {
  display_name = "Custom Role Change Alert"
  combiner     = "OR"
}

変更後

hcl
resource "google_logging_metric" "custom_role_change" {
  name        = "custom_role_change"
  description = "Detects custom role changes"
  filter = <<-FILTER
    resource.type="iam_role"
    AND (protoPayload.methodName = "google.iam.admin.v1.CreateRole" OR
    protoPayload.methodName="google.iam.admin.v1.DeleteRole" OR
    protoPayload.methodName="google.iam.admin.v1.UpdateRole" OR
    protoPayload.methodName="google.iam.admin.v1.UndeleteRole")
  FILTER
}

resource "google_monitoring_alert_policy" "custom_role_alert" {
  display_name          = "Custom Role Change Alert"
  combiner              = "OR"
  notification_channels = [google_monitoring_notification_channel.security_ops.name]

  conditions {
    display_name = "Matching audit events"
    condition_threshold {
      filter = "metric.type=\"logging.googleapis.com/user/${google_logging_metric.custom_role_change.name}\" AND resource.type=\"${var.audit_monitored_resource_type}\""
      comparison      = "COMPARISON_GT"
      threshold_value = 0
      duration        = "0s"
      aggregations {
        alignment_period   = "600s"
        per_series_aligner = "ALIGN_SUM"
      }
    }
  }
}

補足:

  • 変更前: リソースの種類が誤っているため、ロール変更が含まれない場合があり、アラート条件もありません。
  • 変更後: ロール変更に対応するメトリクス条件と通知チャネルを設定します。必要なプロジェクトや組織のログが収集されていることも確認してください。

参考資料