監査イベントストリーミングGraphQL API
- API GitLab 14.5 で
ff_external_audit_events_namespace
というフラグで 導入されました。デフォルトでは無効です。- APIGitLab.comで有効、GitLab 14.7ではセルフマネージドでデフォルト。
- API機能フラグ
ff_external_audit_events_namespace
は GitLab 14.8 で削除されました。- カスタムHTTPヘッダーAPIはGitLab 15.1で
streaming_audit_event_headers
というフラグで 導入されました。デフォルトでは無効です。- GitLab 15.2でGitLab.comで有効化され、自己管理されるカスタムHTTPヘッダーAPI。
- GitLab 15.3でカスタムHTTPヘッダーAPIが一般的に利用可能に。機能フラグ
streaming_audit_event_headers
を削除。- GitLab 15.4で導入されたユーザー指定検証トークンAPIサポート。
- インスタンスレベルストリーミング先のカスタムHTTPヘッダのためのAPIが、GitLab 16.1から
ff_external_audit_events
というフラグで 導入されました。デフォルトでは無効。- 機能フラグ
ff_external_audit_events
GitLab 16.2ではデフォルトで有効。- GitLab 16.2で導入されたユーザー指定の宛先名APIサポート。
監査イベントストリーミングの送信先は、GraphQL APIを使ってメンテナーすることができます。
トップレベルのグループストリーミングデスティネーション
トップレベルグループのストリーミング配信先を管理します。
HTTP配信先
トップレベルグループのHTTPストリーミング先を管理します。
新しいストリーミング先を追加
新しいストリーミング配信先をトップレベルグループに追加します。
前提条件:
- トップレベルグループのオーナーロール。
ストリーミングを有効にして、宛先をトップレベルグループに追加するには、externalAuditEventDestinationCreate
変異を使用します。
mutation {
externalAuditEventDestinationCreate(input: { destinationUrl: "https://mydomain.io/endpoint/ingest", groupPath: "my-group" } ) {
errors
externalAuditEventDestination {
id
name
destinationUrl
verificationToken
group {
name
}
}
}
}
オプションで、GraphQLexternalAuditEventDestinationCreate
変異を使って(GitLab が生成したデフォルトのものではなく)独自の検証トークンを指定することができます。検証トークンの長さは16文字から24文字以内で、末尾の空白はトリミングされません。暗号的にランダムでユニークな値を設定する必要があります。例えば
mutation {
externalAuditEventDestinationCreate(input: { destinationUrl: "https://mydomain.io/endpoint/ingest", groupPath: "my-group", verificationToken: "unique-random-verification-token-here" } ) {
errors
externalAuditEventDestination {
id
name
destinationUrl
verificationToken
group {
name
}
}
}
}
オプションで、(GitLabが生成したデフォルトの名前ではなく)独自の宛先名をGraphQLexternalAuditEventDestinationCreate
mutationを使って指定することができます。名前の長さは72文字以内で、末尾の空白はトリミングされません。この値はグループに対して一意でなければなりません。例えば
mutation {
externalAuditEventDestinationCreate(input: { destinationUrl: "https://mydomain.io/endpoint/ingest", name: "destination-name-here", groupPath: "my-group" }) {
errors
externalAuditEventDestination {
id
name
destinationUrl
verificationToken
group {
name
}
}
}
}
イベントストリーミングが有効な場合:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
GraphQLauditEventsStreamingHeadersCreate
変異を使用して HTTP ヘッダーを追加できます。グループのすべてのストリーミング配信先をリストするか、上記の変異から配信先 ID を取得できます。
mutation {
auditEventsStreamingHeadersCreate(input: { destinationId: "gid://gitlab/AuditEvents::ExternalAuditEventDestination/24601", key: "foo", value: "bar" }) {
errors
}
}
ヘッダーは、返されたerrors
オブジェクトが空の場合に作成されます。
ストリーミング先のリスト
トップレベルグループの配信先を一覧表示します。
前提条件:
- トップレベルグループのオーナーロール。
externalAuditEventDestinations
クエリタイプを使用して、トップレベルグループのストリーミング先のリストを表示できます。
query {
group(fullPath: "my-group") {
id
externalAuditEventDestinations {
nodes {
destinationUrl
verificationToken
id
name
headers {
nodes {
key
value
id
}
}
eventTypeFilters
}
}
}
}
結果のリストが空の場合、そのグループの監査ストリーミングは有効になっていません。
ストリーミング先の更新
トップレベルグループのストリーミング配信先を更新します。
前提条件:
- トップレベルグループのオーナーロール。
グループのオーナーロールを持つユーザーは、auditEventsStreamingHeadersUpdate
変異タイプを使用して、ストリーミング先のカスタムHTTPヘッダーを更新できます。グループのすべてのカスタムHTTPヘッダーを一覧表示すると、カスタムHTTPヘッダーIDを取得できます。
mutation {
externalAuditEventDestinationUpdate(input: {
id:"gid://gitlab/AuditEvents::ExternalAuditEventDestination/1",
destinationUrl: "https://www.new-domain.com/webhook",
name: "destination-name"} ) {
errors
externalAuditEventDestination {
id
name
destinationUrl
verificationToken
group {
name
}
}
}
}
以下の場合、ストリーミング配信先が更新されます:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
グループのオーナーは、GraphQLauditEventsStreamingHeadersDestroy
mutation を使用して HTTP ヘッダーを削除できます。グループのすべてのカスタム HTTP ヘッダーをリストすることで、ヘッダー ID を取得できます。
mutation {
auditEventsStreamingHeadersDestroy(input: { headerId: "gid://gitlab/AuditEvents::Streaming::Header/1" }) {
errors
}
}
返されたerrors
オブジェクトが空の場合、ヘッダーは削除されます。
ストリーミング先の削除
最上位グループの配信先を削除します。
最後の宛先が正常に削除されると、そのグループのストリーミングは無効になります。
前提条件:
- トップレベルグループのオーナーロール。
グループのオーナーロールを持つユーザーは、externalAuditEventDestinationDestroy
変異タイプを使用して、ストリーミング配信先を削除できます。グループの全ストリーミング配信先を一覧表示することで、配信先IDを取得できます。
mutation {
externalAuditEventDestinationDestroy(input: { id: destination }) {
errors
}
}
ストリーミング配信先は、以下の場合に削除されます:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
グループのオーナーは、GraphQLauditEventsStreamingHeadersDestroy
mutation を使用して HTTP ヘッダーを削除できます。グループのすべてのカスタム HTTP ヘッダーをリストすることで、ヘッダー ID を取得できます。
mutation {
auditEventsStreamingHeadersDestroy(input: { headerId: "gid://gitlab/AuditEvents::Streaming::Header/1" }) {
errors
}
}
返されたerrors
オブジェクトが空の場合、ヘッダーは削除されます。
イベントタイプフィルター
GitLab 15.7で導入されたイベントタイプフィルタAPIです。
この機能がグループで有効になっている場合、APIを使用してユーザーがストリームされた監査イベントを宛先ごとにフィルタリングすることを許可することができます。この機能がフィルタなしで有効になっている場合、宛先はすべての監査イベントを受信します。
イベントタイプのフィルタが設定されているストリーミング宛先には、フィルタ済み({filter})ラベルがあります。
APIを使用してイベントタイプフィルタを追加します。
前提条件:
- グループのオーナーロールを持っている必要があります。
auditEventsStreamingDestinationEventsAdd
クエリ タイプを使用して、イベント タイプ フィルタのリストを追加できます:
mutation {
auditEventsStreamingDestinationEventsAdd(input: {
destinationId: "gid://gitlab/AuditEvents::ExternalAuditEventDestination/1",
eventTypeFilters: ["list of event type filters"]}){
errors
eventTypeFilters
}
}
イベント・タイプ・フィルターは以下の場合に追加されます:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
APIを使用してイベントタイプのフィルタを削除します。
前提条件:
- グループのオーナーロールを持っている必要があります。
auditEventsStreamingDestinationEventsRemove
変異タイプを使用して、イベント タイプ フィルタのリストを削除できます:
mutation {
auditEventsStreamingDestinationEventsRemove(input: {
destinationId: "gid://gitlab/AuditEvents::ExternalAuditEventDestination/1",
eventTypeFilters: ["list of event type filters"]
}){
errors
}
}
イベントタイプフィルターは以下の場合に削除されます:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
Google Cloud ログ取得先
GitLab 16.1 で導入されました。
トップレベルグループのGoogle Cloud Logging送信先を管理します。
Google Cloud Logging ストリーミング監査イベントを設定する前に、前提条件を満たす必要があります。
新しい Google Cloud Logging の宛先を追加します。
新しい Google Cloud Logging 設定先をトップレベルグループに追加します。
前提条件:
- トップレベルグループのオーナーロール。
- サービスアカウントを作成し、Google Cloud Loggingを有効にするために必要な権限を持つGoogle Cloudプロジェクト。
ストリーミングを有効にして設定を追加するには、GraphQL API のgoogleCloudLoggingConfigurationCreate
変異を使用します。
mutation {
googleCloudLoggingConfigurationCreate(input: { groupPath: "my-group", googleProjectIdName: "my-google-project", clientEmail: "my-email@my-google-project.iam.gservice.account.com", privateKey: "YOUR_PRIVATE_KEY", logIdName: "audit-events" } ) {
errors
googleCloudLoggingConfiguration {
id
googleProjectIdName
logIdName
privateKey
clientEmail
}
errors
}
}
イベントストリーミングが有効な場合:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
Google Cloud Logging の設定一覧
トップレベルグループのすべての Google Cloud Logging 設定先を一覧表示します。
前提条件
- トップレベルグループのオーナーロール。
googleCloudLoggingConfigurations
クエリタイプを使用すると、トップレベルグループのストリーミング設定のリストを表示できます。
query {
group(fullPath: "my-group") {
id
googleCloudLoggingConfigurations {
nodes {
id
logIdName
googleProjectIdName
privateKey
clientEmail
}
}
}
}
結果のリストが空の場合、監査ストリーミングはグループで有効になっていません。
このクエリによって返される ID 値は、更新および削除の変異に必要です。
Google Cloud Logging 設定の更新
トップレベルグループのGoogle Cloud Logging設定先を更新します。
前提条件
- トップレベルグループのオーナーロール。
トップレベルグループのストリーミング設定を更新するには、googleCloudLoggingConfigurationUpdate
変異タイプを使用します。すべての外部送信先をリストすることで、設定IDを取得できます。
mutation {
googleCloudLoggingConfigurationUpdate(
input: {id: "gid://gitlab/AuditEvents::GoogleCloudLoggingConfiguration/1", googleProjectIdName: "my-google-project", clientEmail: "my-email@my-google-project.iam.gservice.account.com", privateKey: "YOUR_PRIVATE_KEY", logIdName: "audit-events"}
) {
errors
googleCloudLoggingConfiguration {
id
logIdName
privateKey
googleProjectIdName
clientEmail
}
}
}
ストリーミング設定は以下の場合に更新されます:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
Google Cloud Logging 設定の削除
最上位グループの配信先を削除します。
最後の宛先が正常に削除されると、そのグループのストリーミングは無効になります。
前提条件
- トップレベルグループのオーナーロール。
グループのオーナーロールを持つユーザーは、googleCloudLoggingConfigurationDestroy
変異タイプを使用して、ストリーミング設定を削除できます。設定IDは、グループのすべてのストリーミング配信先を一覧表示することで取得できます。
mutation {
googleCloudLoggingConfigurationDestroy(input: { id: "gid://gitlab/AuditEvents::GoogleCloudLoggingConfiguration/1" }) {
errors
}
}
以下の場合、ストリーミング設定は削除されます:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
インスタンスのストリーミング先
- GitLab 16.0 で
ff_external_audit_events
というフラグで導入。デフォルトでは無効です。- 機能フラグ
ff_external_audit_events
GitLab 16.2ではデフォルトで有効。
フラグ: セルフマネジメントのGitLabでは、デフォルトでこの機能が有効になっています。無効にするには、管理者がff_external_audit_events
という機能フラグを無効にします。GitLab.comでは、この機能は利用可能ですが、GitLab.com管理者のみが設定できます。この機能は本番環境でも使用可能です。
インスタンス全体のHTTPストリーミング先を管理。
新しいHTTPデスティネーションの追加
インスタンスに新しいHTTPストリーミング・デスティネーションを追加します。
前提条件:
- インスタンスの管理者アクセス。
ストリーミングを有効にして宛先を追加するには、GraphQL API のinstanceExternalAuditEventDestinationCreate
変異を使用します。
mutation {
instanceExternalAuditEventDestinationCreate(input: { destinationUrl: "https://mydomain.io/endpoint/ingest"}) {
errors
instanceExternalAuditEventDestination {
destinationUrl
id
name
verificationToken
}
}
}
イベントストリーミングが有効な場合:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
オプションで、(GitLabが生成したデフォルトの名前ではなく)独自の宛先名をGraphQLinstanceExternalAuditEventDestinationCreate
mutationを使って指定することができます。名前の長さは72文字以内で、末尾の空白はトリミングされません。この値は一意でなければなりません。例えば
mutation {
instanceExternalAuditEventDestinationCreate(input: { destinationUrl: "https://mydomain.io/endpoint/ingest", name: "destination-name-here"}) {
errors
instanceExternalAuditEventDestination {
destinationUrl
id
name
verificationToken
}
}
}
インスタンス管理者は GraphQLauditEventsStreamingInstanceHeadersCreate
変異を使用して HTTP ヘッダーを追加できます。インスタンスのすべてのストリーミング送信先をリストするか、上記の変異から送信先 ID を取得できます。
mutation {
auditEventsStreamingInstanceHeadersCreate(input:
{
destinationId: "gid://gitlab/AuditEvents::InstanceExternalAuditEventDestination/42",
key: "foo",
value: "bar"
}) {
errors
header {
id
key
value
}
}
}
ヘッダーは、返されたerrors
オブジェクトが空の場合に作成されます。
ストリーミング先のリスト
インスタンスのすべての HTTP ストリーミング・デスティネーションを一覧表示します。
前提条件:
- インスタンスの管理者アクセス。
インスタンスのストリーミング先のリストを表示するには、instanceExternalAuditEventDestinations
クエリ・タイプを使用します。
query {
instanceExternalAuditEventDestinations {
nodes {
id
name
destinationUrl
verificationToken
headers {
nodes {
id
key
value
}
}
eventTypeFilters
}
}
}
結果のリストが空の場合は、インスタンスで監査ストリーミングが有効になっていません。
このクエリによって返される ID 値は、更新および削除の変異に必要です。
ストリーミング先の更新
インスタンスの HTTP ストリーミング・デスティネーションを更新します。
前提条件:
- インスタンスの管理者アクセス。
インスタンスのストリーミング・デスティネーションを更新するには、instanceExternalAuditEventDestinationUpdate
変異タイプを使用します。インスタンスのすべての外部デスティネーションをリストすることで、デスティネーションIDを取得できます。
mutation {
instanceExternalAuditEventDestinationUpdate(input: {
id: "gid://gitlab/AuditEvents::InstanceExternalAuditEventDestination/1",
destinationUrl: "https://www.new-domain.com/webhook",
name: "destination-name"}) {
errors
instanceExternalAuditEventDestination {
destinationUrl
id
name
verificationToken
}
}
}
以下の場合、ストリーミング配信先が更新されます:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
インスタンス管理者は、auditEventsStreamingInstanceHeadersUpdate
変異タイプを使用して、ストリーミング先のカスタム HTTP ヘッダーを更新できます。インスタンスのすべてのカスタム HTTP ヘッダーをリストすることで、カスタム HTTP ヘッダー ID を取得できます。
mutation {
auditEventsStreamingInstanceHeadersUpdate(input: { headerId: "gid://gitlab/AuditEvents::Streaming::InstanceHeader/2", key: "new-key", value: "new-value" }) {
errors
header {
id
key
value
}
}
}
返されたerrors
オブジェクトが空の場合、ヘッダーは更新されます。
ストリーミング先の削除
インスタンス全体のストリーミング・デスティネーションを削除します。
最後の宛先が正常に削除されると、インスタンスのストリーミングが無効になります。
前提条件:
- インスタンスの管理者アクセス。
ストリーミング・デスティネーションを削除するには、instanceExternalAuditEventDestinationDestroy
変異タイプを使用します。インスタンスのすべてのストリーミング・デスティネーションをリストすることで、デスティネーションIDを取得できます。
mutation {
instanceExternalAuditEventDestinationDestroy(input: { id: "gid://gitlab/AuditEvents::InstanceExternalAuditEventDestination/1" }) {
errors
}
}
ストリーミング配信先は、以下の場合に削除されます:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
HTTP ヘッダーを削除するには、GraphQLauditEventsStreamingInstanceHeadersDestroy
変異を使用します。ヘッダー ID を取得するには、インスタンスのすべてのカスタム HTTP ヘッダーをリストします。
mutation {
auditEventsStreamingInstanceHeadersDestroy(input: { headerId: "gid://gitlab/AuditEvents::Streaming::InstanceHeader/<id>" }) {
errors
}
}
返されたerrors
オブジェクトが空の場合、ヘッダーは削除されます。
イベントタイプフィルター
GitLab 16.2で導入されたイベントタイプフィルタAPIです。
この機能がインスタンスで有効になっている場合、APIを使用してユーザーがストリームされた監査イベントをデスティネーションごとにフィルタすることを許可することができます。この機能がフィルタなしで有効になっている場合、デスティネーションはすべての監査イベントを受信します。
イベントタイプのフィルタが設定されているストリーミング宛先には、フィルタ済み({filter})ラベルがあります。
APIを使用してイベントタイプフィルタを追加します。
前提条件:
- インスタンスの管理者アクセス権が必要です。
auditEventsStreamingDestinationInstanceEventsAdd
変異を使用して、イベント タイプ フィルタのリストを追加できます:
mutation {
auditEventsStreamingDestinationInstanceEventsAdd(input: {
destinationId: "gid://gitlab/AuditEvents::InstanceExternalAuditEventDestination/1",
eventTypeFilters: ["list of event type filters"]}){
errors
eventTypeFilters
}
}
イベント・タイプ・フィルターは以下の場合に追加されます:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。
APIを使用してイベントタイプのフィルタを削除します。
前提条件:
- インスタンスの管理者アクセス権が必要です。
auditEventsStreamingDestinationInstanceEventsRemove
変異を使用して、イベント タイプ フィルタのリストを削除できます:
mutation {
auditEventsStreamingDestinationInstanceEventsRemove(input: {
destinationId: "gid://gitlab/AuditEvents::InstanceExternalAuditEventDestination/1",
eventTypeFilters: ["list of event type filters"]
}){
errors
}
}
イベントタイプフィルターは以下の場合に削除されます:
- 返された
errors
オブジェクトが空の場合。 - API は
200 OK
で応答します。