データアクセス ログの構成

このガイドでは、プロジェクトまたは組織でデータアクセス監査ログを設定する方法について説明します。監査ログの概要については、Cloud Audit Logging をご覧ください。

管理アクティビティ監査ログはすべてのサービスに対して有効になり、ユーザーが設定することはできません。このページでは、「監査ログ」はデータアクセス監査ログを指します。

説明をスキップする場合はに進んでください。

設定オプション

データアクセス監査ログは、BigQuery を除き、デフォルトで無効になっています。監査ログの次の 3 つの側面をプロジェクトまたは組織で有効にし、設定できます。

  • サービス。監査ログを収集する対象のサービスを指定できます。たとえば、Compute Engine からは監査ログを収集し、Cloud SQL からは収集しないことが可能です。監査ログを生成できるサービスの一覧については、監査ログを生成するサービスをご覧ください。

  • 情報の種類。監査ログに含める情報の種類を指定できます。データアクセス監査ログ情報には次の 3 つの種類があります。

    • 管理読み取り: メタデータまたは設定情報を読み取るオペレーションを記録します。

      管理アクティビティ監査ログには、メタデータまたは設定情報の書き込みが記録されます。これを無効にすることはできません。

    • データ読み取り: ユーザー提供データを読み取るオペレーションを記録します。

    • データ書き込み: ユーザー提供データを書き込むオペレーションを記録します。

    たとえば、デフォルトでは「データ書き込み」オペレーションのみをログに記録し、Cloud DNS からは 3 種類の情報すべてを記録できます。

  • 除外ユーザー。特定のユーザーまたはグループを、データアクセスを記録する対象から除外できます。たとえば、内部テスト アカウントを除外し、このアカウントが行った Stackdriver Debugger に対するオペレーションをログに記録しないようにすることができます。

IAM ポリシー オブジェクト

監査ログを設定するには、プロジェクトまたは組織に関連付けられた IAM ポリシーを編集する必要があります。監査ログの設定はポリシーの auditConfigs セクションにあります。

"auditConfigs": [
  {
    object(AuditConfig)
  }
]

詳細については、IAM ポリシータイプをご覧ください。

以降のセクションで、AuditConfig オブジェクトについて詳しく説明します。設定の変更に使用する API コマンドと Cloud SDK コマンドについては、getIamPolicy と setIamPolicy をご覧ください。

AuditConfig オブジェクト

監査ログの設定は AuditConfig オブジェクトのリストで構成されています。各オブジェクトは 1 つのサービスに関するログを設定するか、またはすべてのサービスのデフォルト設定を定義します。各オブジェクトは次のように記述します。

{
  "service": [SERVICE],
  "auditLogConfigs": [
    {
      "logType": "ADMIN_READ"
      "exemptedMembers": [ [MEMBER],]
    },
    {
      "logType": "DATA_READ"
      "exemptedMembers": [ [MEMBER],]
    },
    {
      "logType": "DATA_WRITE"
      "exemptedMembers": [ [MEMBER],]
    },
  ]
},

[SERVICE] は、"appengine.googleapis.com" のようなサービス名か、特殊値の "allServices" です。特定のサービスについての記述が設定に含まれない場合、そのサービスにはデフォルト設定が使用されます。デフォルト設定が存在しない場合、そのサービスでデータアクセス ログは有効になりません。サービス名の一覧については、ログサービスをご覧ください。

AuditConfig オブジェクトの auditLogConfigs セクションは 0~3 個のオブジェクトのリストで、各オブジェクトが 1 種類の監査ログ情報を設定します。いずれかの種類をリストから省略した場合、その情報の種類は該当するサービスで有効になりません。

[MEMBER] は、データアクセス監査ログを収集しないユーザーです。単一のユーザー、グループ、またはサービス アカウントを指定できます。バインディング タイプではさまざまな種類のメンバーを記述できますが、それらすべてのメンバーが監査ログの設定に使用できるとは限りません。

次に、監査設定を JSON 形式と YAML 形式で記述した例を示します。Cloud SDK コマンドを使用するときは YAML 形式がデフォルトです。

JSON

"auditConfigs": [
  {
    "auditLogConfigs": [
      {
        "logType": "ADMIN_READ"
      },
      {
        "logType": "DATA_WRITE"
      },
      {
        "logType": "DATA_READ"
      }
    ],
    "service": "allServices"
  },
  {
    "auditLogConfigs": [
      {
        "exemptedMembers": [
          "499862534253-compute@developer.gserviceaccount.com"
        ],
        "logType": "ADMIN_READ"
      }
    ],
    "service": "cloudsql.googleapis.com"
  }
],

YAML

auditConfigs:
- auditLogConfigs:
  - logType: ADMIN_READ
  - logType: DATA_WRITE
  - logType: DATA_READ
  service: allServices
- auditLogConfigs:
  - exemptedMembers:
    - 499862534253-compute@developer.gserviceaccount.com
    logType: ADMIN_READ
  service: cloudsql.googleapis.com

デフォルト設定と個別設定

デフォルト(allServices)設定と特定のサービス用の設定が両方とも存在する場合、結果的にそのサービスに適用される設定は、デフォルト設定と個別設定を結合したものになります。つまり、

  • 特定のサービスに対して監査ログを有効にできますが、デフォルト設定で有効にされたサービスを無効にすることはできません。

  • あるサービスの監査ログに情報の種類を追加できます。デフォルト設定で指定された情報の種類を削除することはできません。

  • 除外リストにメンバーを追加できますが、デフォルト設定の除外リストからメンバーを削除することはできません。

組織の設定とプロジェクトの設定

データアクセス監査ログは組織とプロジェクトに対して設定できます。あるサービスの設定がプロジェクトとプロジェクトの組織の両方に存在する場合、結果的に適用される設定は、プロジェクトの設定と組織の設定を結合したものになります。つまり、プロジェクト レベルでは、

  • あるサービスに対してログを有効にできますが、組織で有効にされたサービスのログを無効にすることはできません。

  • 情報の種類を有効にできますが、組織で有効にされた情報の種類を無効にすることはできません。

  • 除外リストにメンバーを追加できますが、組織の除外リストからメンバーを削除することはできません。

一般的な設定

以下に、プロジェクト用の一般的な監査ログ設定を示します。

これらの設定では、プロジェクトの組織で定義された監査ログ設定は考慮されていません。プロジェクト レベルで設定がない場合でも、組織レベルでプロジェクトのデータアクセス ログを有効にできます。詳細については、組織の設定とプロジェクトの設定をご覧ください。

すべてのアクセスログを有効にする

次の auditConfigs セクションは、すべてのサービスとユーザーに対してデータアクセス ログを有効にします。

JSON

"auditConfigs": [
      {
        "service": "allServices",
        "auditLogConfigs": [
          { "logType": "ADMIN_READ" },
          { "logType": "DATA_READ"  },
          { "logType": "DATA_WRITE" },
        ]
      },
    ]

YAML

auditConfigs:
- auditLogConfigs:
  - logType: ADMIN_READ
  - logType: DATA_WRITE
  - logType: DATA_READ
  service: allServices

1 つのサービスと情報の種類を有効にする

次の例は、Cloud SQL に対してデータアクセス監査ログを有効にします。 ユーザー定義データの書き込みのみをログに記録します。

JSON

"auditConfigs": [
  {
    "service": "cloudsql.googleapis.com",
    "auditLogConfigs": [
      { "logType": "DATA_WRITE" },
    ]
  },
]

YAML

auditConfigs:
- auditLogConfigs:
  - logType: DATA_WRITE
  service: cloudsql.googleapis.com

すべてのログを無効にする

プロジェクトですべてのデータアクセス監査ログ(BigQuery を除く)を無効にするには、新しい IAM ポリシーに空の auditConfigs: セクションを含めます。

JSON

"auditConfigs": [],

YAML

auditConfigs:

auditConfigs セクション全体を新しいポリシーから削除した場合、setIamPolicy を実行したときに既存の監査ログ設定は変更されません。詳細については、setIamPolicy の更新マスクをご覧ください。

BigQuery の監査ログを無効にすることはできません。

BigQuery のログを無効にする

現時点では、BigQuery のデータアクセス監査ログを無効にすることはできません。

getIamPolicy と setIamPolicy

IAM ポリシーの取得と設定には Cloud Resource Manager の getIamPolicy メソッドと setIamPolicy メソッドを使用します。これらのメソッドには複数のタイプがあり、その中から使用するメソッドを選択します。

  • Cloud Resource Manager API には次のメソッドが用意されています。

    projects.getIamPolicy
    projects.setIamPolicy
    organizations.getIamPolicy
    organizations.setIamPolicy
    
  • Cloud SDK には次の Cloud Resource Manager コマンドが用意されています。

    gcloud projects get-iam-policy
    gcloud projects set-iam-policy
    gcloud organizations get-iam-policy
    gcloud organizations set-iam-policy
    

どれを選択するかにかかわらず、次の 3 つのステップに従います。

  1. いずれかの getIamPolicy メソッドを使用して現在のポリシーを読み取ります。取得したポリシーを一時ファイルに保存します。
  2. 一時ファイルでポリシーを編集します。 auditConfigs セクションのみを変更(または追加)します。
  3. いずれかの setIamPolicy メソッドを使用して、編集したポリシーを一時ファイルに書き込みます。

最初のステップでポリシーを取得した後に他の誰かによってポリシーが変更された場合、setIamPolicy は失敗します。これが起こった場合は、3 つのステップをもう一度やり直します。

アクセス制御

組織を構成するには roles/resourcemanager.organizationAdmin が必要であり、プロジェクトを構成するには roles/editor が必要です。

詳細については、プロジェクトのアクセス制御組織のアクセス制御をご覧ください。

次の例は、gcloud コマンドまたは Cloud Resource Manager API を使用してプロジェクトのデータアクセス監査ログを設定する方法を示します。

組織の監査ログを設定するには、コマンドまたは API メソッドの「projects」版を「organizations」版に置き換えてください。

Cloud SDK

gcloud projects コマンドを使用して監査ログを構成する手順は次のとおりです。

  1. プロジェクトの IAM ポリシーを取得し、ファイルに保存します。

    gcloud projects get-iam-policy [PROJECT_ID] > /tmp/policy.yaml
    

    返されたポリシーを次に示します。このポリシーにはまだ auditConfigs セクションはありません。

    bindings:
    - members:
      - user:colleague@example.com
      role: roles/editor
    - members:
      - user:myself@example.com
      role: roles/owner
    etag: BwVM-FDzeYM=
    version: 1
    
  2. /tmp/policy.yaml 内のポリシーを編集し、監査ログの構成のみを追加または変更します。

    編集したポリシーの例(この例では Cloud SQL のデータ書き込み監査ログを有効にしています)を次に示します。

    auditConfigs:
    - auditLogConfigs:
      - logType: DATA_WRITE
      service: cloudsql.googleapis.com
    bindings:
    - members:
      - user:colleague@example.com
      role: roles/editor
    - members:
      - user:myself@example.com
      role: roles/owner
    etag: BwVM-FDzeYM=
    version: 1
    

  3. 新しい IAM ポリシーを設定します。

    gcloud projects set-iam-policy [PROJECT_ID] /tmp/policy.yaml
    

    上記のコマンドで別の変更との競合が報告された場合は、最初のステップからやり直してください。

JSON

YAML ではなく JSON 形式の IAM ポリシーを使用する場合は、上記の例のコマンドを次の gcloud コマンドに置き換えます。

gcloud projects get-iam-policy [PROJECT_ID] --format=json >/tmp/policy.json
gcloud projects set-iam-policy [PROJECT_ID] /tmp/policy.json

API

Cloud Resource Manager API を使用して監査ログを設定する手順は次のとおりです。

  1. getIamPolicy API メソッドに以下のパラメータを指定して、プロジェクトの IAM ポリシーを読み取ります。

    • resource: projects/[PROJECT_ID]
    • リクエスト本文: 空

    これにより、次のような現在のポリシー オブジェクトが返されます。このプロジェクトのポリシーにはまだ auditConfigs セクションはありません。

    {
      "bindings": [
      {
        "members": [
          "user:colleague@example.com"
        ],
        "role": "roles/editor"
      },
      {
        "members": [
          "user:myself@example.com"
        ],
        "role": "roles/owner"
      }
    ],
    "etag": "BwUsv2gimRs=",
    "version": 1
    

    }

  2. 現在のポリシーを編集します。

    • auditConfigs セクションを追加または編集します。

      監査ログを無効にする場合は、このセクションの値を空にします(すなわち、auditConfigs:[] とします)。

    • etag の値はそのままにします。

    必要であれば、その他すべての情報を新しいポリシー オブジェクトから削除してもかまいません。ただしその場合は、次のステップで updateMask を注意深く設定してください。編集したポリシー(ここでは Cloud SQL のデータ書き込み監査ログを有効にしています)を次に示します。

    {
      "auditConfigs": [
        {
          "auditLogConfigs": [
            {
              "logType": "DATA_WRITE"
            }
          ],
          "service": "cloudsql.googleapis.com"
        }
      ],
      "etag": "BwVM-FDzeYM="
    }
    
  3. setIamPolicy API メソッドに以下のパラメータを指定して、新しいポリシーを作成します。

    • resource: projects/[PROJECT_ID]
    • リクエスト本文:
      • updateMask: "auditConfigs,etag"
      • policy: 編集済みのポリシー オブジェクト

setIamPolicy の更新マスク

このセクションでは、setIamPolicy メソッドにおける updateMask パラメータの重要性について説明し、SDK の set-iam-policy コマンドを実行する際にプロジェクトまたは組織に予期しない害が及ばないようにするため細心の注意を払わなければならない理由を示します。

setIamPolicy API メソッドには、更新するポリシー フィールドを制御するため、updateMask パラメータが用意されています。たとえば、マスクに bindings が含まれない場合、このポリシー セクションが誤って変更されるおそれはありません。その一方で、マスクに bindings が含まれる場合、このセクションは常に更新されます。bindings の更新値を含めなければ、このセクション全体がポリシーから削除されます。

gcloud projects set-iam-policy コマンド(このコマンドは内部で setIamPolicy を呼び出します)では、updateMask パラメータは指定できません。その代わりに、このコマンドは updateMask の値を次のように計算します。

  • updateMask には常にフィールド bindingsetag が含まれます。
  • set-iam-policy に渡されたポリシー オブジェクトにその他のトップレベル フィールド(auditConfigs など)が存在する場合、それらのフィールドが updateMask に追加されます。

これらのルールの結果として、set-iam-policy コマンドは次のように動作します。

  • 新しいポリシーで auditConfigs セクションを省略した場合、このセクションは更新マスクに含まれないため、auditConfigs セクションの以前の値(存在する場合)は変更されません。これは無害ですが、わかりにくい可能性があります。

  • 新しいポリシー オブジェクトで bindings を省略した場合、bindings セクションは更新マスクに存在するため、このセクションはポリシーから削除されます。これは非常に有害であり、すべてのユーザーがプロジェクトにアクセスできなくなります。

  • 新しいポリシー オブジェクトで etag を省略した場合、ポリシーに対する同時変更をチェックできなくなり、自分が行った変更によって他の誰かの変更が誤って上書きされてしまう可能性があります。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...