Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
		
							parent
							
								
									1e526a1ad1
								
							
						
					
					
						commit
						6cd36703ff
					
				| 
						 | 
				
			
			@ -66,7 +66,9 @@
 | 
			
		|||
    - ${TMP_TEST_FOLDER}/gitaly/_build/bin/
 | 
			
		||||
    - ${TMP_TEST_FOLDER}/gitaly/_build/deps/git/install/
 | 
			
		||||
    - ${TMP_TEST_FOLDER}/gitaly/config.toml
 | 
			
		||||
    - ${TMP_TEST_FOLDER}/gitaly/config.toml.transactions
 | 
			
		||||
    - ${TMP_TEST_FOLDER}/gitaly/gitaly2.config.toml
 | 
			
		||||
    - ${TMP_TEST_FOLDER}/gitaly/gitaly2.config.toml.transactions
 | 
			
		||||
    - ${TMP_TEST_FOLDER}/gitaly/internal/
 | 
			
		||||
    - ${TMP_TEST_FOLDER}/gitaly/run/
 | 
			
		||||
    - ${TMP_TEST_FOLDER}/gitaly/run2/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,9 @@ setup-test-env:
 | 
			
		|||
    paths:
 | 
			
		||||
      - ${TMP_TEST_FOLDER}/gitaly/_build/bin/
 | 
			
		||||
      - ${TMP_TEST_FOLDER}/gitaly/config.toml
 | 
			
		||||
      - ${TMP_TEST_FOLDER}/gitaly/config.toml.transactions
 | 
			
		||||
      - ${TMP_TEST_FOLDER}/gitaly/gitaly2.config.toml
 | 
			
		||||
      - ${TMP_TEST_FOLDER}/gitaly/gitaly2.config.toml.transactions
 | 
			
		||||
      - ${TMP_TEST_FOLDER}/gitaly/internal/
 | 
			
		||||
      - ${TMP_TEST_FOLDER}/gitaly/Makefile
 | 
			
		||||
      - ${TMP_TEST_FOLDER}/gitaly/praefect.config.toml
 | 
			
		||||
| 
						 | 
				
			
			@ -45,6 +47,7 @@ setup-test-env:
 | 
			
		|||
      - ${TMP_TEST_FOLDER}/repositories/
 | 
			
		||||
      - ${TMP_TEST_FOLDER}/second_storage/
 | 
			
		||||
      - ${TMP_TEST_GITLAB_WORKHORSE_PATH}/
 | 
			
		||||
      - log/*.log
 | 
			
		||||
    when: always
 | 
			
		||||
 | 
			
		||||
setup-test-env-fips:
 | 
			
		||||
| 
						 | 
				
			
			@ -303,6 +306,33 @@ rspec system pg14 praefect:
 | 
			
		|||
    - .rspec-system-parallel
 | 
			
		||||
    - .rails:rules:praefect-with-db
 | 
			
		||||
 | 
			
		||||
# Test jobs that run with Gitaly's transactions enabled. These will be removed once
 | 
			
		||||
# transactions are always in use in Gitaly.
 | 
			
		||||
rspec migration gitaly_transactions:
 | 
			
		||||
  extends:
 | 
			
		||||
    - rspec migration pg14
 | 
			
		||||
    - .gitaly-with-transactions
 | 
			
		||||
 | 
			
		||||
rspec background_migration gitaly_transactions:
 | 
			
		||||
  extends:
 | 
			
		||||
    - rspec background_migration pg14
 | 
			
		||||
    - .gitaly-with-transactions
 | 
			
		||||
 | 
			
		||||
rspec unit gitaly_transactions:
 | 
			
		||||
  extends:
 | 
			
		||||
    - rspec unit pg14
 | 
			
		||||
    - .gitaly-with-transactions
 | 
			
		||||
 | 
			
		||||
rspec integration gitaly_transactions:
 | 
			
		||||
  extends:
 | 
			
		||||
    - rspec integration pg14
 | 
			
		||||
    - .gitaly-with-transactions
 | 
			
		||||
 | 
			
		||||
rspec system gitaly_transactions:
 | 
			
		||||
  extends:
 | 
			
		||||
    - rspec system pg14
 | 
			
		||||
    - .gitaly-with-transactions
 | 
			
		||||
 | 
			
		||||
# Dedicated job to test DB library code against PG13.
 | 
			
		||||
# Note that these are already tested against PG13 in the `rspec unit pg13` / `rspec-ee unit pg13` jobs.
 | 
			
		||||
rspec db-library-code pg13:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,6 +56,10 @@ include:
 | 
			
		|||
  variables:
 | 
			
		||||
    GITALY_PRAEFECT_WITH_DB: '1'
 | 
			
		||||
 | 
			
		||||
.gitaly-with-transactions:
 | 
			
		||||
  variables:
 | 
			
		||||
    GITALY_TRANSACTIONS_ENABLED: "true"
 | 
			
		||||
 | 
			
		||||
.rspec-base-needs:
 | 
			
		||||
  needs:
 | 
			
		||||
    - job: "clone-gitlab-repo"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,10 @@ classes:
 | 
			
		|||
- ForkNetwork
 | 
			
		||||
feature_categories:
 | 
			
		||||
- source_code_management
 | 
			
		||||
description: When a project is first forked, a row is created in this table. Also referenced by the fork_network_members table. This is used to know which projects can send merge reqeusts to each other.
 | 
			
		||||
description: When a project is first forked, a row is created in this table. Also
 | 
			
		||||
  referenced by the fork_network_members table. This is used to know which projects
 | 
			
		||||
  can send merge reqeusts to each other.
 | 
			
		||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/3098
 | 
			
		||||
milestone: '10.1'
 | 
			
		||||
gitlab_schema: gitlab_main_cell
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,3 +8,4 @@ description: Geo verification states for LFS objects
 | 
			
		|||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63981
 | 
			
		||||
milestone: '14.6'
 | 
			
		||||
gitlab_schema: gitlab_main
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,3 +8,4 @@ description: LFS files
 | 
			
		|||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/1727
 | 
			
		||||
milestone: '8.2'
 | 
			
		||||
gitlab_schema: gitlab_main
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,3 +8,4 @@ description: Stores merge access settings for protected branches
 | 
			
		|||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5081
 | 
			
		||||
milestone: '8.11'
 | 
			
		||||
gitlab_schema: gitlab_main_cell
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,3 +8,4 @@ description: Stores push access settings for protected branches
 | 
			
		|||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5081
 | 
			
		||||
milestone: '8.11'
 | 
			
		||||
gitlab_schema: gitlab_main_cell
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,3 +10,4 @@ milestone: '10.7'
 | 
			
		|||
gitlab_schema: gitlab_main_cell
 | 
			
		||||
allow_cross_foreign_keys:
 | 
			
		||||
- gitlab_main_clusterwide
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,3 +8,4 @@ description: TODO
 | 
			
		|||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/1b98b5ab97ce3e9997df542059cbf3c6ce0bf0e1
 | 
			
		||||
milestone: '8.10'
 | 
			
		||||
gitlab_schema: gitlab_main_cell
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,3 +8,4 @@ description: Keeps required code owners sections
 | 
			
		|||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/43573
 | 
			
		||||
milestone: '13.5'
 | 
			
		||||
gitlab_schema: gitlab_main_cell
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,3 +8,4 @@ description: Stores repository information used to version control snippets.
 | 
			
		|||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23796
 | 
			
		||||
milestone: '12.8'
 | 
			
		||||
gitlab_schema: gitlab_main
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,9 @@ classes:
 | 
			
		|||
- SnippetStatistics
 | 
			
		||||
feature_categories:
 | 
			
		||||
- source_code_management
 | 
			
		||||
description: Stores the repository size, commit count, and file count regarding the snippet repository.
 | 
			
		||||
description: Stores the repository size, commit count, and file count regarding the
 | 
			
		||||
  snippet repository.
 | 
			
		||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/35026
 | 
			
		||||
milestone: '13.2'
 | 
			
		||||
gitlab_schema: gitlab_main
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,9 @@ classes:
 | 
			
		|||
- SnippetUserMention
 | 
			
		||||
feature_categories:
 | 
			
		||||
- source_code_management
 | 
			
		||||
description: For storing mentioned users, groups, projects referenced in a snippet description.
 | 
			
		||||
description: For storing mentioned users, groups, projects referenced in a snippet
 | 
			
		||||
  description.
 | 
			
		||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/19009
 | 
			
		||||
milestone: '12.6'
 | 
			
		||||
gitlab_schema: gitlab_main
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,9 @@ classes:
 | 
			
		|||
- Snippet
 | 
			
		||||
feature_categories:
 | 
			
		||||
- source_code_management
 | 
			
		||||
description: GitLab snippets allow you to store and share bits of code and text with other users. 
 | 
			
		||||
description: GitLab snippets allow you to store and share bits of code and text with
 | 
			
		||||
  other users.
 | 
			
		||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/9265de3d25715aeafd38a4ef41596dca058dc18c
 | 
			
		||||
milestone: "1.0.1"
 | 
			
		||||
milestone: 1.0.1
 | 
			
		||||
gitlab_schema: gitlab_main
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/460829
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,3 +8,4 @@ description: Stores data about X.509 certificate
 | 
			
		|||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/17773
 | 
			
		||||
milestone: '12.8'
 | 
			
		||||
gitlab_schema: gitlab_main
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,3 +8,4 @@ description: Stores data about issuer of X.509 certificate
 | 
			
		|||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/17773
 | 
			
		||||
milestone: '12.8'
 | 
			
		||||
gitlab_schema: gitlab_main
 | 
			
		||||
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/462136
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,24 +4,26 @@ group: Compliance
 | 
			
		|||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
# Audit event streaming
 | 
			
		||||
# Audit event streaming for instances
 | 
			
		||||
 | 
			
		||||
DETAILS:
 | 
			
		||||
**Tier:** Ultimate
 | 
			
		||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
 | 
			
		||||
**Offering:** Self-managed, GitLab Dedicated
 | 
			
		||||
 | 
			
		||||
> - [Subgroup events recording](https://gitlab.com/gitlab-org/gitlab/-/issues/366878) fixed in GitLab 15.2.
 | 
			
		||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/398107) in GitLab 16.1 [with a flag](../feature_flags.md) named `ff_external_audit_events`. Disabled by default.
 | 
			
		||||
> - [Feature flag `ff_external_audit_events`](https://gitlab.com/gitlab-org/gitlab/-/issues/393772) enabled by default in GitLab 16.2.
 | 
			
		||||
> - Instance streaming destinations [made generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/393772) in GitLab 16.4. [Feature flag `ff_external_audit_events`](https://gitlab.com/gitlab-org/gitlab/-/issues/417708) removed.
 | 
			
		||||
> - Custom HTTP headers UI [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/361630) in GitLab 15.2 [with a flag](../feature_flags.md) named `custom_headers_streaming_audit_events_ui`. Disabled by default.
 | 
			
		||||
> - Custom HTTP headers UI [made generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/365259) in GitLab 15.3. [Feature flag `custom_headers_streaming_audit_events_ui`](https://gitlab.com/gitlab-org/gitlab/-/issues/365259) removed.
 | 
			
		||||
> - [Improved user experience](https://gitlab.com/gitlab-org/gitlab/-/issues/367963) in GitLab 15.3.
 | 
			
		||||
> - HTTP destination **Name*** field [added](https://gitlab.com/gitlab-org/gitlab/-/issues/411357) in GitLab 16.3.
 | 
			
		||||
> - HTTP destination **Name** field [added](https://gitlab.com/gitlab-org/gitlab/-/issues/411357) in GitLab 16.3.
 | 
			
		||||
> - Functionality for the **Active** checkbox [added](https://gitlab.com/gitlab-org/gitlab/-/issues/415268) in GitLab 16.5.
 | 
			
		||||
 | 
			
		||||
Users can set a streaming destination for a top-level group or instance to receive all audit events about the group,
 | 
			
		||||
subgroups, and projects, as structured JSON.
 | 
			
		||||
Audit event streaming for instances, administrators can:
 | 
			
		||||
 | 
			
		||||
Top-level group owners and instance administrators can manage their audit logs in third-party systems. Any service that
 | 
			
		||||
can receive structured JSON data can be used as the streaming destination.
 | 
			
		||||
- Set a streaming destination for an entire instance to receive all audit events about that instance as structured JSON.
 | 
			
		||||
- Manage their audit logs in third-party systems. Any service that can receive structured JSON data can be used as the
 | 
			
		||||
  streaming destination.
 | 
			
		||||
 | 
			
		||||
Each streaming destination can have up to 20 custom HTTP headers included with each streamed event.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -34,349 +36,9 @@ WARNING:
 | 
			
		|||
Streaming destinations receive **all** audit event data, which could include sensitive information. Make sure you trust
 | 
			
		||||
the streaming destination.
 | 
			
		||||
 | 
			
		||||
## Top-level group streaming destinations
 | 
			
		||||
 | 
			
		||||
Manage streaming destinations for top-level groups.
 | 
			
		||||
 | 
			
		||||
### HTTP destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- For better security, you should use an SSL certificate on the destination URL.
 | 
			
		||||
 | 
			
		||||
Manage HTTP streaming destinations for top-level groups.
 | 
			
		||||
 | 
			
		||||
#### Add a new HTTP destination
 | 
			
		||||
 | 
			
		||||
Add a new HTTP streaming destination to a top-level group.
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To add streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select **Add streaming destination** and select **HTTP endpoint** to show the section for adding destinations.
 | 
			
		||||
1. In the **Name** and **Destination URL** fields, add a destination name and URL.
 | 
			
		||||
1. Optional. Locate the **Custom HTTP headers** table.
 | 
			
		||||
1. To make the header active, select the **Active** checkbox. The header will be sent with the audit event.
 | 
			
		||||
1. Select **Add header** to create a new name and value pair. Enter as many name and value pairs as required. You can add up to
 | 
			
		||||
   20 headers per streaming destination.
 | 
			
		||||
1. After all headers have been filled out, select **Add** to add the new streaming destination.
 | 
			
		||||
 | 
			
		||||
#### List HTTP destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a group.
 | 
			
		||||
 | 
			
		||||
To list the streaming destinations for a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand it and see all the custom HTTP headers.
 | 
			
		||||
 | 
			
		||||
#### Update an HTTP destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a group.
 | 
			
		||||
 | 
			
		||||
To update a streaming destination's name:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. In the **Name** fields, add a destination name to update.
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
To update a streaming destination's custom HTTP headers:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Locate the **Custom HTTP headers** table.
 | 
			
		||||
1. Locate the header that you wish to update.
 | 
			
		||||
1. To make the header active, select the **Active** checkbox. The header will be sent with the audit event.
 | 
			
		||||
1. Select **Add header** to create a new name and value pair. Enter as many name and value pairs as required. You can add up to
 | 
			
		||||
   20 headers per streaming destination.
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
#### Delete an HTTP destination
 | 
			
		||||
 | 
			
		||||
Delete streaming destinations for a top-level group. When the last destination is successfully deleted, streaming is
 | 
			
		||||
disabled for the top-level group.
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a group.
 | 
			
		||||
 | 
			
		||||
To delete a streaming destination:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Select **Delete destination**.
 | 
			
		||||
1. Confirm by selecting **Delete destination** in the dialog.
 | 
			
		||||
 | 
			
		||||
To delete only the custom HTTP headers for a streaming destination:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Locate the **Custom HTTP headers** table.
 | 
			
		||||
1. Locate the header that you wish to remove.
 | 
			
		||||
1. To the right of the header, select **Delete** (**{remove}**).
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
#### Verify event authenticity
 | 
			
		||||
 | 
			
		||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/360814) in GitLab 15.2.
 | 
			
		||||
 | 
			
		||||
Each streaming destination has a unique verification token (`verificationToken`) that can be used to verify the authenticity of the event. This
 | 
			
		||||
token is either specified by the Owner or generated automatically when the event destination is created and cannot be changed.
 | 
			
		||||
 | 
			
		||||
Each streamed event contains the verification token in the `X-Gitlab-Event-Streaming-Token` HTTP header that can be verified against
 | 
			
		||||
the destination's value when listing streaming destinations.
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a group.
 | 
			
		||||
 | 
			
		||||
To list streaming destinations and see the verification tokens:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Locate the **Verification token** input.
 | 
			
		||||
 | 
			
		||||
#### Update event filters
 | 
			
		||||
 | 
			
		||||
> - Event type filtering in the UI with a defined list of audit event types [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/413581) in GitLab 16.1.
 | 
			
		||||
 | 
			
		||||
When this feature is enabled for a group, you can permit users to filter streamed audit events per destination.
 | 
			
		||||
If the feature is enabled with no filters, the destination receives all audit events.
 | 
			
		||||
 | 
			
		||||
A streaming destination that has an event type filter set has a **filtered** (**{filter}**) label.
 | 
			
		||||
 | 
			
		||||
To update a streaming destination's event filters:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Locate the **Filter by audit event type** dropdown list.
 | 
			
		||||
1. Select the dropdown list and select or clear the required event types.
 | 
			
		||||
1. Select **Save** to update the event filters.
 | 
			
		||||
 | 
			
		||||
#### Update namespace filters
 | 
			
		||||
 | 
			
		||||
> - Namespace filtering in the UI [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390133) in GitLab 16.7.
 | 
			
		||||
 | 
			
		||||
When this feature is enabled for a group, you can permit users to filter streamed audit events per destination.
 | 
			
		||||
If the feature is enabled with no filters, the destination receives all audit events.
 | 
			
		||||
 | 
			
		||||
A streaming destination that has a namespace filter set has a **filtered** (**{filter}**) label.
 | 
			
		||||
 | 
			
		||||
To update a streaming destination's namespace filters:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Locate the **Filter by groups or projects** dropdown list.
 | 
			
		||||
1. Select the dropdown list and select or clear the required namespaces.
 | 
			
		||||
1. Select **Save** to update the namespace filter.
 | 
			
		||||
 | 
			
		||||
#### Override default content type header
 | 
			
		||||
 | 
			
		||||
By default, streaming destinations use a `content-type` header of `application/x-www-form-urlencoded`. However, you
 | 
			
		||||
might want to set the `content-type` header to something else. For example ,`application/json`.
 | 
			
		||||
 | 
			
		||||
To override the `content-type` header default value for a top-level group streaming destination, use either:
 | 
			
		||||
 | 
			
		||||
- The [GitLab UI](#update-an-http-destination).
 | 
			
		||||
- The [GraphQL API](graphql_api.md#update-streaming-destinations).
 | 
			
		||||
 | 
			
		||||
### Google Cloud Logging destinations
 | 
			
		||||
 | 
			
		||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124384) in GitLab 16.2.
 | 
			
		||||
 | 
			
		||||
Manage Google Cloud Logging destinations for top-level groups.
 | 
			
		||||
 | 
			
		||||
#### Prerequisites
 | 
			
		||||
 | 
			
		||||
Before setting up Google Cloud Logging streaming audit events, you must:
 | 
			
		||||
 | 
			
		||||
1. Enable [Cloud Logging API](https://console.cloud.google.com/marketplace/product/google/logging.googleapis.com) on your Google Cloud project.
 | 
			
		||||
1. Create a service account for Google Cloud with the appropriate credentials and permissions. This account is used to configure audit log streaming authentication.
 | 
			
		||||
   For more information, see [Creating and managing service accounts in the Google Cloud documentation](https://cloud.google.com/iam/docs/service-accounts-create#creating).
 | 
			
		||||
1. Enable the **Logs Writer** role for the service account to enable logging on Google Cloud. For more information, see [Access control with IAM](https://cloud.google.com/logging/docs/access-control#logging.logWriter).
 | 
			
		||||
1. Create a JSON key for the service account. For more information, see [Creating a service account key](https://cloud.google.com/iam/docs/keys-create-delete#creating).
 | 
			
		||||
 | 
			
		||||
#### Add a new Google Cloud Logging destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To add Google Cloud Logging streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select **Add streaming destination** and select **Google Cloud Logging** to show the section for adding destinations.
 | 
			
		||||
1. Enter a random string to use as a name for the new destination.
 | 
			
		||||
1. Enter the Google project ID, Google client email, and Google private key from previously-created Google Cloud service account key to add to the new destination.
 | 
			
		||||
1. Enter a random string to use as a log ID for the new destination. You can use this later to filter log results in Google Cloud.
 | 
			
		||||
1. Select **Add** to add the new streaming destination.
 | 
			
		||||
 | 
			
		||||
#### List Google Cloud Logging destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To list Google Cloud Logging streaming destinations for a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the Google Cloud Logging stream to expand and see all the fields.
 | 
			
		||||
 | 
			
		||||
#### Update a Google Cloud Logging destination
 | 
			
		||||
 | 
			
		||||
> - Button to add private key [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/419675) in GitLab 16.3.
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To update Google Cloud Logging streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the Google Cloud Logging stream to expand.
 | 
			
		||||
1. Enter a random string to use as a name for the destination.
 | 
			
		||||
1. Enter the Google project ID and Google client email from previously-created Google Cloud service account key to update the destination.
 | 
			
		||||
1. Enter a random string to update the log ID for the destination. You can use this later to filter log results in Google Cloud.
 | 
			
		||||
1. Select **Add a new private key** and enter a Google private key to update the private key.
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
#### Delete a Google Cloud Logging streaming destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To delete Google Cloud Logging streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the Google Cloud Logging stream to expand.
 | 
			
		||||
1. Select **Delete destination**.
 | 
			
		||||
1. Confirm by selecting **Delete destination** in the dialog.
 | 
			
		||||
 | 
			
		||||
### AWS S3 destinations
 | 
			
		||||
 | 
			
		||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/132603) in GitLab 16.6 [with a flag](../feature_flags.md) named `allow_streaming_audit_events_to_amazon_s3`. Enabled by default.
 | 
			
		||||
> - [Feature flag `allow_streaming_audit_events_to_amazon_s3`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137391) removed in GitLab 16.7.
 | 
			
		||||
 | 
			
		||||
Manage AWS S3 destinations for top-level groups.
 | 
			
		||||
 | 
			
		||||
#### Prerequisites
 | 
			
		||||
 | 
			
		||||
Before setting up AWS S3 streaming audit events, you must:
 | 
			
		||||
 | 
			
		||||
1. Create a access key for AWS with the appropriate credentials and permissions. This account is used to configure audit log streaming authentication.
 | 
			
		||||
   For more information, see [Managing access keys](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html?icmpid=docs_iam_console#Using_CreateAccessKey).
 | 
			
		||||
1. Create a AWS S3 bucket. This bucket is used to store audit log streaming data. For more information, see [Creating a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)
 | 
			
		||||
 | 
			
		||||
#### Add a new AWS S3 destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To add AWS S3 streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select **Add streaming destination** and select **AWS S3** to show the section for adding destinations.
 | 
			
		||||
1. Enter a random string to use as a name for the new destination.
 | 
			
		||||
1. Enter the Access Key ID, Secret Access Key, Bucket Name, and AWS Region from previously-created AWS access key and bucket to add to the new destination.
 | 
			
		||||
1. Select **Add** to add the new streaming destination.
 | 
			
		||||
 | 
			
		||||
#### List AWS S3 destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To list AWS S3 streaming destinations for a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the AWS S3 stream to expand and see all the fields.
 | 
			
		||||
 | 
			
		||||
#### Update a AWS S3 destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To update AWS S3 streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the AWS S3 stream to expand.
 | 
			
		||||
1. Enter a random string to use as a name for the destination.
 | 
			
		||||
1. Enter the Access Key ID, Secret Access Key, Bucket Name, and AWS Region from previously-created AWS access key and bucket to update the destination.
 | 
			
		||||
1. Select **Add a new Secret Access Key** and enter a AWS Secret Access Key to update the Secret Access Key.
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
#### Delete a AWS S3 streaming destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To delete AWS S3 streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the AWS S3 stream to expand.
 | 
			
		||||
1. Select **Delete destination**.
 | 
			
		||||
1. Confirm by selecting **Delete destination** in the dialog.
 | 
			
		||||
 | 
			
		||||
## Instance streaming destinations
 | 
			
		||||
 | 
			
		||||
DETAILS:
 | 
			
		||||
**Tier:** Ultimate
 | 
			
		||||
**Offering:** Self-managed
 | 
			
		||||
 | 
			
		||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/398107) in GitLab 16.1 [with a flag](../feature_flags.md) named `ff_external_audit_events`. Disabled by default.
 | 
			
		||||
> - [Feature flag `ff_external_audit_events`](https://gitlab.com/gitlab-org/gitlab/-/issues/393772) enabled by default in GitLab 16.2.
 | 
			
		||||
> - Instance streaming destinations [made generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/393772) in GitLab 16.4. [Feature flag `ff_external_audit_events`](https://gitlab.com/gitlab-org/gitlab/-/issues/417708) removed.
 | 
			
		||||
 | 
			
		||||
Manage streaming destinations for an entire instance.
 | 
			
		||||
 | 
			
		||||
### HTTP destinations
 | 
			
		||||
## HTTP destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -384,7 +46,7 @@ Prerequisites:
 | 
			
		|||
 | 
			
		||||
Manage HTTP streaming destinations for an entire instance.
 | 
			
		||||
 | 
			
		||||
#### Add a new HTTP destination
 | 
			
		||||
### Add a new HTTP destination
 | 
			
		||||
 | 
			
		||||
Add a new HTTP streaming destination to an instance.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -405,7 +67,7 @@ To add a streaming destination for an instance:
 | 
			
		|||
   20 headers per streaming destination.
 | 
			
		||||
1. After all headers have been filled out, select **Add** to add the new streaming destination.
 | 
			
		||||
 | 
			
		||||
#### List HTTP destinations
 | 
			
		||||
### List HTTP destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -418,7 +80,7 @@ To list the streaming destinations for an instance:
 | 
			
		|||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand it and see all the custom HTTP headers.
 | 
			
		||||
 | 
			
		||||
#### Update an HTTP destination
 | 
			
		||||
### Update an HTTP destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -446,7 +108,7 @@ To update a instance streaming destination's custom HTTP headers:
 | 
			
		|||
   20 headers per streaming destination.
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
#### Delete an HTTP destination
 | 
			
		||||
### Delete an HTTP destination
 | 
			
		||||
 | 
			
		||||
Delete streaming destinations for an entire instance. When the last destination is successfully deleted, streaming is
 | 
			
		||||
disabled for the instance.
 | 
			
		||||
| 
						 | 
				
			
			@ -475,7 +137,7 @@ To delete only the custom HTTP headers for a streaming destination:
 | 
			
		|||
1. To the right of the header, select **Delete** (**{remove}**).
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
#### Verify event authenticity
 | 
			
		||||
### Verify event authenticity
 | 
			
		||||
 | 
			
		||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/398107) in GitLab 16.1 [with a flag](../feature_flags.md) named `ff_external_audit_events`. Disabled by default.
 | 
			
		||||
> - [Feature flag `ff_external_audit_events`](https://gitlab.com/gitlab-org/gitlab/-/issues/393772) enabled by default in GitLab 16.2.
 | 
			
		||||
| 
						 | 
				
			
			@ -498,7 +160,7 @@ To list streaming destinations for an instance and see the verification tokens:
 | 
			
		|||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. View the verification token on the right side of each item.
 | 
			
		||||
 | 
			
		||||
#### Update event filters
 | 
			
		||||
### Update event filters
 | 
			
		||||
 | 
			
		||||
> - Event type filtering in the UI with a defined list of audit event types [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/415013) in GitLab 16.3.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -517,23 +179,23 @@ To update a streaming destination's event filters:
 | 
			
		|||
1. Select the dropdown list and select or clear the required event types.
 | 
			
		||||
1. Select **Save** to update the event filters.
 | 
			
		||||
 | 
			
		||||
#### Override default content type header
 | 
			
		||||
### Override default content type header
 | 
			
		||||
 | 
			
		||||
By default, streaming destinations use a `content-type` header of `application/x-www-form-urlencoded`. However, you
 | 
			
		||||
might want to set the `content-type` header to something else. For example ,`application/json`.
 | 
			
		||||
 | 
			
		||||
To override the `content-type` header default value for an instance streaming destination, use either:
 | 
			
		||||
 | 
			
		||||
- The [GitLab UI](#update-an-http-destination-1).
 | 
			
		||||
- The [GitLab UI](#update-an-http-destination).
 | 
			
		||||
- The [GraphQL API](graphql_api.md#update-streaming-destinations).
 | 
			
		||||
 | 
			
		||||
### Google Cloud Logging destinations
 | 
			
		||||
## Google Cloud Logging destinations
 | 
			
		||||
 | 
			
		||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/131851) in GitLab 16.5.
 | 
			
		||||
 | 
			
		||||
Manage Google Cloud Logging destinations for an entire instance.
 | 
			
		||||
 | 
			
		||||
#### Prerequisites
 | 
			
		||||
### Prerequisites
 | 
			
		||||
 | 
			
		||||
Before setting up Google Cloud Logging streaming audit events, you must:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -543,7 +205,7 @@ Before setting up Google Cloud Logging streaming audit events, you must:
 | 
			
		|||
1. Enable the **Logs Writer** role for the service account to enable logging on Google Cloud. For more information, see [Access control with IAM](https://cloud.google.com/logging/docs/access-control#logging.logWriter).
 | 
			
		||||
1. Create a JSON key for the service account. For more information, see [Creating a service account key](https://cloud.google.com/iam/docs/keys-create-delete#creating).
 | 
			
		||||
 | 
			
		||||
#### Add a new Google Cloud Logging destination
 | 
			
		||||
### Add a new Google Cloud Logging destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -560,7 +222,7 @@ To add Google Cloud Logging streaming destinations to an instance:
 | 
			
		|||
1. Enter a random string to use as a log ID for the new destination. You can use this later to filter log results in Google Cloud.
 | 
			
		||||
1. Select **Add** to add the new streaming destination.
 | 
			
		||||
 | 
			
		||||
#### List Google Cloud Logging destinations
 | 
			
		||||
### List Google Cloud Logging destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -573,7 +235,7 @@ To list Google Cloud Logging streaming destinations for an instance:
 | 
			
		|||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the Google Cloud Logging stream to expand and see all the fields.
 | 
			
		||||
 | 
			
		||||
#### Update a Google Cloud Logging destination
 | 
			
		||||
### Update a Google Cloud Logging destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -591,7 +253,7 @@ To update Google Cloud Logging streaming destinations to an instance:
 | 
			
		|||
1. Select **Add a new private key** and enter a Google private key to update the private key.
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
#### Delete a Google Cloud Logging streaming destination
 | 
			
		||||
### Delete a Google Cloud Logging streaming destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -606,14 +268,14 @@ To delete Google Cloud Logging streaming destinations to an instance:
 | 
			
		|||
1. Select **Delete destination**.
 | 
			
		||||
1. Confirm by selecting **Delete destination** in the dialog.
 | 
			
		||||
 | 
			
		||||
### AWS S3 destinations
 | 
			
		||||
## AWS S3 destinations
 | 
			
		||||
 | 
			
		||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/138245) in GitLab 16.7 [with a flag](../feature_flags.md) named `allow_streaming_instance_audit_events_to_amazon_s3`. Disabled by default.
 | 
			
		||||
> - [Feature flag `allow_streaming_instance_audit_events_to_amazon_s3`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137391) removed in GitLab 16.8.
 | 
			
		||||
 | 
			
		||||
Manage AWS S3 destinations for entire instance.
 | 
			
		||||
 | 
			
		||||
#### Prerequisites
 | 
			
		||||
### Prerequisites
 | 
			
		||||
 | 
			
		||||
Before setting up AWS S3 streaming audit events, you must:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -621,7 +283,7 @@ Before setting up AWS S3 streaming audit events, you must:
 | 
			
		|||
   For more information, see [Managing access keys](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html?icmpid=docs_iam_console#Using_CreateAccessKey).
 | 
			
		||||
1. Create a AWS S3 bucket. This bucket is used to store audit log streaming data. For more information, see [Creating a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)
 | 
			
		||||
 | 
			
		||||
#### Add a new AWS S3 destination
 | 
			
		||||
### Add a new AWS S3 destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -637,7 +299,7 @@ To add AWS S3 streaming destinations to an instance:
 | 
			
		|||
1. Enter the Access Key ID, Secret Access Key, Bucket Name, and AWS Region from previously-created AWS access key and bucket to add to the new destination.
 | 
			
		||||
1. Select **Add** to add the new streaming destination.
 | 
			
		||||
 | 
			
		||||
#### List AWS S3 destinations
 | 
			
		||||
### List AWS S3 destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -650,7 +312,7 @@ To list AWS S3 streaming destinations for an instance.
 | 
			
		|||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the AWS S3 stream to expand and see all the fields.
 | 
			
		||||
 | 
			
		||||
#### Update an AWS S3 destination
 | 
			
		||||
### Update an AWS S3 destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -667,7 +329,7 @@ To update AWS S3 streaming destinations to an instance:
 | 
			
		|||
1. Select **Add a new Secret Access Key** and enter a AWS Secret Access Key to update the Secret Access Key.
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
#### Delete an AWS S3 streaming destination
 | 
			
		||||
### Delete an AWS S3 streaming destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -681,3 +343,7 @@ To delete AWS S3 streaming destinations on an instance:
 | 
			
		|||
1. Select the AWS S3 stream to expand.
 | 
			
		||||
1. Select **Delete destination**.
 | 
			
		||||
1. Confirm by selecting **Delete destination** in the dialog.
 | 
			
		||||
 | 
			
		||||
## Related topics
 | 
			
		||||
 | 
			
		||||
- [Audit event streaming for top-level groups](../../user/compliance/audit_event_streaming.md)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,10 +19,10 @@ Must-reads:
 | 
			
		|||
  database-related changes and complex SQL queries, and having them reviewed
 | 
			
		||||
- [Secure coding guidelines](secure_coding_guidelines.md)
 | 
			
		||||
- [Pipelines for the GitLab project](pipelines/index.md)
 | 
			
		||||
- [Avoiding required stops](avoiding_required_stops.md)
 | 
			
		||||
 | 
			
		||||
Complementary reads:
 | 
			
		||||
 | 
			
		||||
- [Avoiding required stops](avoiding_required_stops.md)
 | 
			
		||||
- [Contribute to GitLab](contributing/index.md)
 | 
			
		||||
- [Security process for developers](https://gitlab.com/gitlab-org/release/docs/blob/master/general/security/engineer.md#security-releases-critical-non-critical-as-a-developer)
 | 
			
		||||
- [Patch release process for developers](https://gitlab.com/gitlab-org/release/docs/blob/master/general/patch/process.md#process-for-developers)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,366 @@
 | 
			
		|||
---
 | 
			
		||||
stage: Govern
 | 
			
		||||
group: Compliance
 | 
			
		||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
# Audit event streaming for top-level groups
 | 
			
		||||
 | 
			
		||||
DETAILS:
 | 
			
		||||
**Tier:** Ultimate
 | 
			
		||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
 | 
			
		||||
 | 
			
		||||
> - [Subgroup events recording](https://gitlab.com/gitlab-org/gitlab/-/issues/366878) fixed in GitLab 15.2.
 | 
			
		||||
> - Custom HTTP headers UI [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/361630) in GitLab 15.2 [with a flag](../feature_flags.md) named `custom_headers_streaming_audit_events_ui`. Disabled by default.
 | 
			
		||||
> - Custom HTTP headers UI [made generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/365259) in GitLab 15.3. [Feature flag `custom_headers_streaming_audit_events_ui`](https://gitlab.com/gitlab-org/gitlab/-/issues/365259) removed.
 | 
			
		||||
> - [Improved user experience](https://gitlab.com/gitlab-org/gitlab/-/issues/367963) in GitLab 15.3.
 | 
			
		||||
> - HTTP destination **Name** field [added](https://gitlab.com/gitlab-org/gitlab/-/issues/411357) in GitLab 16.3.
 | 
			
		||||
> - Functionality for the **Active** checkbox [added](https://gitlab.com/gitlab-org/gitlab/-/issues/415268) in GitLab 16.5.
 | 
			
		||||
 | 
			
		||||
With audit event streaming for top-level groups, group owners can:
 | 
			
		||||
 | 
			
		||||
- Set a streaming destination for a top-level group to receive all audit events about the group, subgroups, and projects
 | 
			
		||||
  as structured JSON.
 | 
			
		||||
- Manage their audit logs in third-party systems. Any service that can receive structured JSON data can be used as the
 | 
			
		||||
  streaming destination.
 | 
			
		||||
 | 
			
		||||
Each streaming destination can have up to 20 custom HTTP headers included with each streamed event.
 | 
			
		||||
 | 
			
		||||
GitLab can stream a single event more than once to the same destination. Use the `id` key in the payload to deduplicate
 | 
			
		||||
incoming data.
 | 
			
		||||
 | 
			
		||||
Audit events are sent using the POST request method protocol supported by HTTP.
 | 
			
		||||
 | 
			
		||||
WARNING:
 | 
			
		||||
Streaming destinations receive **all** audit event data, which could include sensitive information. Make sure you trust
 | 
			
		||||
the streaming destination.
 | 
			
		||||
 | 
			
		||||
## HTTP destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- For better security, you should use an SSL certificate on the destination URL.
 | 
			
		||||
 | 
			
		||||
Manage HTTP streaming destinations for top-level groups.
 | 
			
		||||
 | 
			
		||||
### Add a new HTTP destination
 | 
			
		||||
 | 
			
		||||
Add a new HTTP streaming destination to a top-level group.
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To add streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select **Add streaming destination** and select **HTTP endpoint** to show the section for adding destinations.
 | 
			
		||||
1. In the **Name** and **Destination URL** fields, add a destination name and URL.
 | 
			
		||||
1. Optional. Locate the **Custom HTTP headers** table.
 | 
			
		||||
1. To make the header active, select the **Active** checkbox. The header will be sent with the audit event.
 | 
			
		||||
1. Select **Add header** to create a new name and value pair. Enter as many name and value pairs as required. You can add up to
 | 
			
		||||
   20 headers per streaming destination.
 | 
			
		||||
1. After all headers have been filled out, select **Add** to add the new streaming destination.
 | 
			
		||||
 | 
			
		||||
### List HTTP destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a group.
 | 
			
		||||
 | 
			
		||||
To list the streaming destinations for a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand it and see all the custom HTTP headers.
 | 
			
		||||
 | 
			
		||||
### Update an HTTP destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a group.
 | 
			
		||||
 | 
			
		||||
To update a streaming destination's name:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. In the **Name** fields, add a destination name to update.
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
To update a streaming destination's custom HTTP headers:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Locate the **Custom HTTP headers** table.
 | 
			
		||||
1. Locate the header that you wish to update.
 | 
			
		||||
1. To make the header active, select the **Active** checkbox. The header will be sent with the audit event.
 | 
			
		||||
1. Select **Add header** to create a new name and value pair. Enter as many name and value pairs as required. You can add up to
 | 
			
		||||
   20 headers per streaming destination.
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
### Delete an HTTP destination
 | 
			
		||||
 | 
			
		||||
Delete streaming destinations for a top-level group. When the last destination is successfully deleted, streaming is
 | 
			
		||||
disabled for the top-level group.
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a group.
 | 
			
		||||
 | 
			
		||||
To delete a streaming destination:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Select **Delete destination**.
 | 
			
		||||
1. Confirm by selecting **Delete destination** in the dialog.
 | 
			
		||||
 | 
			
		||||
To delete only the custom HTTP headers for a streaming destination:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Locate the **Custom HTTP headers** table.
 | 
			
		||||
1. Locate the header that you wish to remove.
 | 
			
		||||
1. To the right of the header, select **Delete** (**{remove}**).
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
### Verify event authenticity
 | 
			
		||||
 | 
			
		||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/360814) in GitLab 15.2.
 | 
			
		||||
 | 
			
		||||
Each streaming destination has a unique verification token (`verificationToken`) that can be used to verify the authenticity of the event. This
 | 
			
		||||
token is either specified by the Owner or generated automatically when the event destination is created and cannot be changed.
 | 
			
		||||
 | 
			
		||||
Each streamed event contains the verification token in the `X-Gitlab-Event-Streaming-Token` HTTP header that can be verified against
 | 
			
		||||
the destination's value when listing streaming destinations.
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a group.
 | 
			
		||||
 | 
			
		||||
To list streaming destinations and see the verification tokens:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Locate the **Verification token** input.
 | 
			
		||||
 | 
			
		||||
### Update event filters
 | 
			
		||||
 | 
			
		||||
> - Event type filtering in the UI with a defined list of audit event types [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/413581) in GitLab 16.1.
 | 
			
		||||
 | 
			
		||||
When this feature is enabled for a group, you can permit users to filter streamed audit events per destination.
 | 
			
		||||
If the feature is enabled with no filters, the destination receives all audit events.
 | 
			
		||||
 | 
			
		||||
A streaming destination that has an event type filter set has a **filtered** (**{filter}**) label.
 | 
			
		||||
 | 
			
		||||
To update a streaming destination's event filters:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Locate the **Filter by audit event type** dropdown list.
 | 
			
		||||
1. Select the dropdown list and select or clear the required event types.
 | 
			
		||||
1. Select **Save** to update the event filters.
 | 
			
		||||
 | 
			
		||||
### Update namespace filters
 | 
			
		||||
 | 
			
		||||
> - Namespace filtering in the UI [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390133) in GitLab 16.7.
 | 
			
		||||
 | 
			
		||||
When this feature is enabled for a group, you can permit users to filter streamed audit events per destination.
 | 
			
		||||
If the feature is enabled with no filters, the destination receives all audit events.
 | 
			
		||||
 | 
			
		||||
A streaming destination that has a namespace filter set has a **filtered** (**{filter}**) label.
 | 
			
		||||
 | 
			
		||||
To update a streaming destination's namespace filters:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the stream to expand.
 | 
			
		||||
1. Locate the **Filter by groups or projects** dropdown list.
 | 
			
		||||
1. Select the dropdown list and select or clear the required namespaces.
 | 
			
		||||
1. Select **Save** to update the namespace filter.
 | 
			
		||||
 | 
			
		||||
### Override default content type header
 | 
			
		||||
 | 
			
		||||
By default, streaming destinations use a `content-type` header of `application/x-www-form-urlencoded`. However, you
 | 
			
		||||
might want to set the `content-type` header to something else. For example ,`application/json`.
 | 
			
		||||
 | 
			
		||||
To override the `content-type` header default value for a top-level group streaming destination, use either:
 | 
			
		||||
 | 
			
		||||
- The [GitLab UI](#update-an-http-destination).
 | 
			
		||||
- The [GraphQL API](../../administration/audit_event_streaming/graphql_api.md#update-streaming-destinations).
 | 
			
		||||
 | 
			
		||||
## Google Cloud Logging destinations
 | 
			
		||||
 | 
			
		||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124384) in GitLab 16.2.
 | 
			
		||||
 | 
			
		||||
Manage Google Cloud Logging destinations for top-level groups.
 | 
			
		||||
 | 
			
		||||
### Prerequisites
 | 
			
		||||
 | 
			
		||||
Before setting up Google Cloud Logging streaming audit events, you must:
 | 
			
		||||
 | 
			
		||||
1. Enable [Cloud Logging API](https://console.cloud.google.com/marketplace/product/google/logging.googleapis.com) on your Google Cloud project.
 | 
			
		||||
1. Create a service account for Google Cloud with the appropriate credentials and permissions. This account is used to configure audit log streaming authentication.
 | 
			
		||||
   For more information, see [Creating and managing service accounts in the Google Cloud documentation](https://cloud.google.com/iam/docs/service-accounts-create#creating).
 | 
			
		||||
1. Enable the **Logs Writer** role for the service account to enable logging on Google Cloud. For more information, see [Access control with IAM](https://cloud.google.com/logging/docs/access-control#logging.logWriter).
 | 
			
		||||
1. Create a JSON key for the service account. For more information, see [Creating a service account key](https://cloud.google.com/iam/docs/keys-create-delete#creating).
 | 
			
		||||
 | 
			
		||||
### Add a new Google Cloud Logging destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To add Google Cloud Logging streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select **Add streaming destination** and select **Google Cloud Logging** to show the section for adding destinations.
 | 
			
		||||
1. Enter a random string to use as a name for the new destination.
 | 
			
		||||
1. Enter the Google project ID, Google client email, and Google private key from previously-created Google Cloud service account key to add to the new destination.
 | 
			
		||||
1. Enter a random string to use as a log ID for the new destination. You can use this later to filter log results in Google Cloud.
 | 
			
		||||
1. Select **Add** to add the new streaming destination.
 | 
			
		||||
 | 
			
		||||
### List Google Cloud Logging destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To list Google Cloud Logging streaming destinations for a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the Google Cloud Logging stream to expand and see all the fields.
 | 
			
		||||
 | 
			
		||||
### Update a Google Cloud Logging destination
 | 
			
		||||
 | 
			
		||||
> - Button to add private key [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/419675) in GitLab 16.3.
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To update Google Cloud Logging streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the Google Cloud Logging stream to expand.
 | 
			
		||||
1. Enter a random string to use as a name for the destination.
 | 
			
		||||
1. Enter the Google project ID and Google client email from previously-created Google Cloud service account key to update the destination.
 | 
			
		||||
1. Enter a random string to update the log ID for the destination. You can use this later to filter log results in Google Cloud.
 | 
			
		||||
1. Select **Add a new private key** and enter a Google private key to update the private key.
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
### Delete a Google Cloud Logging streaming destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To delete Google Cloud Logging streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the Google Cloud Logging stream to expand.
 | 
			
		||||
1. Select **Delete destination**.
 | 
			
		||||
1. Confirm by selecting **Delete destination** in the dialog.
 | 
			
		||||
 | 
			
		||||
## AWS S3 destinations
 | 
			
		||||
 | 
			
		||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/132603) in GitLab 16.6 [with a flag](../feature_flags.md) named `allow_streaming_audit_events_to_amazon_s3`. Enabled by default.
 | 
			
		||||
> - [Feature flag `allow_streaming_audit_events_to_amazon_s3`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137391) removed in GitLab 16.7.
 | 
			
		||||
 | 
			
		||||
Manage AWS S3 destinations for top-level groups.
 | 
			
		||||
 | 
			
		||||
### Prerequisites
 | 
			
		||||
 | 
			
		||||
Before setting up AWS S3 streaming audit events, you must:
 | 
			
		||||
 | 
			
		||||
1. Create a access key for AWS with the appropriate credentials and permissions. This account is used to configure audit log streaming authentication.
 | 
			
		||||
   For more information, see [Managing access keys](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html?icmpid=docs_iam_console#Using_CreateAccessKey).
 | 
			
		||||
1. Create a AWS S3 bucket. This bucket is used to store audit log streaming data. For more information, see [Creating a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)
 | 
			
		||||
 | 
			
		||||
### Add a new AWS S3 destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To add AWS S3 streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select **Add streaming destination** and select **AWS S3** to show the section for adding destinations.
 | 
			
		||||
1. Enter a random string to use as a name for the new destination.
 | 
			
		||||
1. Enter the Access Key ID, Secret Access Key, Bucket Name, and AWS Region from previously-created AWS access key and bucket to add to the new destination.
 | 
			
		||||
1. Select **Add** to add the new streaming destination.
 | 
			
		||||
 | 
			
		||||
### List AWS S3 destinations
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To list AWS S3 streaming destinations for a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the AWS S3 stream to expand and see all the fields.
 | 
			
		||||
 | 
			
		||||
### Update a AWS S3 destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To update AWS S3 streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the AWS S3 stream to expand.
 | 
			
		||||
1. Enter a random string to use as a name for the destination.
 | 
			
		||||
1. Enter the Access Key ID, Secret Access Key, Bucket Name, and AWS Region from previously-created AWS access key and bucket to update the destination.
 | 
			
		||||
1. Select **Add a new Secret Access Key** and enter a AWS Secret Access Key to update the Secret Access Key.
 | 
			
		||||
1. Select **Save** to update the streaming destination.
 | 
			
		||||
 | 
			
		||||
### Delete a AWS S3 streaming destination
 | 
			
		||||
 | 
			
		||||
Prerequisites:
 | 
			
		||||
 | 
			
		||||
- Owner role for a top-level group.
 | 
			
		||||
 | 
			
		||||
To delete AWS S3 streaming destinations to a top-level group:
 | 
			
		||||
 | 
			
		||||
1. On the left sidebar, select **Search or go to** and find your group.
 | 
			
		||||
1. Select **Secure > Audit events**.
 | 
			
		||||
1. On the main area, select the **Streams** tab.
 | 
			
		||||
1. Select the AWS S3 stream to expand.
 | 
			
		||||
1. Select **Delete destination**.
 | 
			
		||||
1. Confirm by selecting **Delete destination** in the dialog.
 | 
			
		||||
 | 
			
		||||
## Related topics
 | 
			
		||||
 | 
			
		||||
- [Audit event streaming for instances](../../administration/audit_event_streaming/index.md)
 | 
			
		||||
| 
						 | 
				
			
			@ -113,6 +113,7 @@ module Gitlab
 | 
			
		|||
          config[:bin_dir] = File.expand_path(File.join(gitaly_dir, '_build', 'bin')) # binaries by default are in `_build/bin`
 | 
			
		||||
          config[:gitlab] = { url: Gitlab.config.gitlab.url }
 | 
			
		||||
          config[:logging] = { dir: Rails.root.join('log').to_s }
 | 
			
		||||
          config[:transactions] = { enabled: true } if options[:transactions_enabled]
 | 
			
		||||
 | 
			
		||||
          TomlRB.dump(config)
 | 
			
		||||
        end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,8 +24,8 @@ class GitalyTestBuild
 | 
			
		|||
    ensure_gitlab_shell_secret!
 | 
			
		||||
 | 
			
		||||
    # Starting gitaly further validates its configuration
 | 
			
		||||
    gitaly_pid = start_gitaly
 | 
			
		||||
    gitaly2_pid = start_gitaly2
 | 
			
		||||
    gitaly_pid = start_gitaly(:gitaly)
 | 
			
		||||
    gitaly2_pid = start_gitaly(:gitaly2)
 | 
			
		||||
    praefect_pid = start_praefect
 | 
			
		||||
    Process.kill('TERM', gitaly_pid)
 | 
			
		||||
    Process.kill('TERM', gitaly2_pid)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -311,7 +311,7 @@ RSpec.describe Gitlab::GitAccessSnippet do
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'repository size restrictions' do
 | 
			
		||||
    let_it_be(:snippet) { create(:personal_snippet, :public, :repository) }
 | 
			
		||||
    let_it_be_with_refind(:snippet) { create(:personal_snippet, :public, :repository) }
 | 
			
		||||
 | 
			
		||||
    let(:actor) { snippet.author }
 | 
			
		||||
    let(:oldrev) { TestEnv::BRANCH_SHA["snippet/single-file"] }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -435,11 +435,11 @@ RSpec.describe API::Ci::Jobs, feature_category: :continuous_integration do
 | 
			
		|||
        control = ActiveRecord::QueryRecorder.new(skip_cached: false) { go }
 | 
			
		||||
 | 
			
		||||
        5.times do
 | 
			
		||||
          second_pipeline = create(:ci_pipeline, project: project, sha: project.commit.id, ref: project.default_branch)
 | 
			
		||||
          second_build = create(:ci_build, :trace_artifact, :artifacts, :test_reports, pipeline: second_pipeline)
 | 
			
		||||
          second_build.runner = create(:ci_runner)
 | 
			
		||||
          second_build.user = create(:user)
 | 
			
		||||
          second_build.save!
 | 
			
		||||
          another_pipeline = create(:ci_pipeline, project: project, sha: project.commit.id, ref: project.default_branch)
 | 
			
		||||
          another_build = create(:ci_build, :trace_artifact, :artifacts, :test_reports, pipeline: another_pipeline)
 | 
			
		||||
          another_build.runner = create(:ci_runner)
 | 
			
		||||
          another_build.user = create(:user)
 | 
			
		||||
          another_build.save!
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        expect { go }.not_to exceed_query_limit(control)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -70,17 +70,21 @@ module GitalySetup
 | 
			
		|||
    }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def config_path(service)
 | 
			
		||||
  def config_name(service)
 | 
			
		||||
    case service
 | 
			
		||||
    when :gitaly
 | 
			
		||||
      File.join(tmp_tests_gitaly_dir, 'config.toml')
 | 
			
		||||
      'config.toml'
 | 
			
		||||
    when :gitaly2
 | 
			
		||||
      File.join(tmp_tests_gitaly_dir, 'gitaly2.config.toml')
 | 
			
		||||
      'gitaly2.config.toml'
 | 
			
		||||
    when :praefect
 | 
			
		||||
      File.join(tmp_tests_gitaly_dir, 'praefect.config.toml')
 | 
			
		||||
      'praefect.config.toml'
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def config_path(service)
 | 
			
		||||
    File.join(tmp_tests_gitaly_dir, config_name(service))
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def service_cmd(service, toml = nil)
 | 
			
		||||
    toml ||= config_path(service)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -100,12 +104,22 @@ module GitalySetup
 | 
			
		|||
    run_command(%w[make all WITH_BUNDLED_GIT=YesPlease], env: env.merge('GIT_VERSION' => nil))
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def start_gitaly(toml = nil)
 | 
			
		||||
    start(:gitaly, toml)
 | 
			
		||||
  end
 | 
			
		||||
  def start_gitaly(service, toml = nil)
 | 
			
		||||
    case service
 | 
			
		||||
    when :gitaly
 | 
			
		||||
      FileUtils.mkdir_p(GitalySetup.storage_path)
 | 
			
		||||
    when :gitaly2
 | 
			
		||||
      FileUtils.mkdir_p(GitalySetup.second_storage_path)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  def start_gitaly2
 | 
			
		||||
    start(:gitaly2)
 | 
			
		||||
    if ENV['CI'] && gitaly_with_transactions?
 | 
			
		||||
      # The configuration file with transactions is pre-generated in the CI. Here we check
 | 
			
		||||
      # whether this job should actually run with transactions and choose the pre-generated
 | 
			
		||||
      # configuration with transactions enabled if so.
 | 
			
		||||
      toml = "#{config_path(service)}.transactions"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    start(service, toml)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def start_praefect
 | 
			
		||||
| 
						 | 
				
			
			@ -226,25 +240,54 @@ module GitalySetup
 | 
			
		|||
      build_gitaly
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    Gitlab::SetupHelper::Gitaly.create_configuration(
 | 
			
		||||
      gitaly_dir,
 | 
			
		||||
      { 'default' => storage_path },
 | 
			
		||||
      force: true,
 | 
			
		||||
      options: {
 | 
			
		||||
        runtime_dir: runtime_dir,
 | 
			
		||||
        prometheus_listen_addr: 'localhost:9236'
 | 
			
		||||
    [
 | 
			
		||||
      {
 | 
			
		||||
        storages: { 'default' => storage_path },
 | 
			
		||||
        options: {
 | 
			
		||||
          runtime_dir: runtime_dir,
 | 
			
		||||
          prometheus_listen_addr: 'localhost:9236',
 | 
			
		||||
          config_filename: config_name(:gitaly),
 | 
			
		||||
          transactions_enabled: gitaly_with_transactions?
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        storages: { 'test_second_storage' => second_storage_path },
 | 
			
		||||
        options: {
 | 
			
		||||
          runtime_dir: runtime_dir,
 | 
			
		||||
          gitaly_socket: "gitaly2.socket",
 | 
			
		||||
          config_filename: config_name(:gitaly2),
 | 
			
		||||
          transactions_enabled: gitaly_with_transactions?
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    )
 | 
			
		||||
    Gitlab::SetupHelper::Gitaly.create_configuration(
 | 
			
		||||
      gitaly_dir,
 | 
			
		||||
      { 'test_second_storage' => second_storage_path },
 | 
			
		||||
      force: true,
 | 
			
		||||
      options: {
 | 
			
		||||
        runtime_dir: runtime_dir,
 | 
			
		||||
        gitaly_socket: "gitaly2.socket",
 | 
			
		||||
        config_filename: "gitaly2.config.toml"
 | 
			
		||||
      }
 | 
			
		||||
    )
 | 
			
		||||
    ].each do |params|
 | 
			
		||||
      Gitlab::SetupHelper::Gitaly.create_configuration(
 | 
			
		||||
        gitaly_dir,
 | 
			
		||||
        params[:storages],
 | 
			
		||||
        force: true,
 | 
			
		||||
        options: params[:options]
 | 
			
		||||
      )
 | 
			
		||||
 | 
			
		||||
      # CI generates all of the configuration files in the setup-test-env job. When we eventually get
 | 
			
		||||
      # to run the rspec jobs with transactions enabled, the configuration has already been created
 | 
			
		||||
      # without transactions enabled.
 | 
			
		||||
      #
 | 
			
		||||
      # Similarly to the Praefect configuration, generate variant of the configuration file with
 | 
			
		||||
      # transactions enabled in CI. Later when the rspec job runs, we decide whether to run Gitaly
 | 
			
		||||
      # using the configuration with transactions enabled or not.
 | 
			
		||||
      #
 | 
			
		||||
      # These configuration files are only used in the CI.
 | 
			
		||||
      next unless ENV['CI']
 | 
			
		||||
 | 
			
		||||
      params[:options][:config_filename] = "#{params[:options][:config_filename]}.transactions"
 | 
			
		||||
      params[:options][:transactions_enabled] = true
 | 
			
		||||
 | 
			
		||||
      Gitlab::SetupHelper::Gitaly.create_configuration(
 | 
			
		||||
        gitaly_dir,
 | 
			
		||||
        params[:storages],
 | 
			
		||||
        force: true,
 | 
			
		||||
        options: params[:options]
 | 
			
		||||
      )
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # In CI we need to pre-generate both config files.
 | 
			
		||||
    # For local testing we'll create the correct file on-demand.
 | 
			
		||||
| 
						 | 
				
			
			@ -301,10 +344,10 @@ module GitalySetup
 | 
			
		|||
    pids = []
 | 
			
		||||
 | 
			
		||||
    if toml
 | 
			
		||||
      pids << start_gitaly(toml)
 | 
			
		||||
      pids << start_gitaly(:gitaly, toml)
 | 
			
		||||
    else
 | 
			
		||||
      pids << start_gitaly
 | 
			
		||||
      pids << start_gitaly2
 | 
			
		||||
      pids << start_gitaly(:gitaly)
 | 
			
		||||
      pids << start_gitaly(:gitaly2)
 | 
			
		||||
      pids << start_praefect
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -319,6 +362,8 @@ module GitalySetup
 | 
			
		|||
      next if ENV['GITALY_PID_FILE']
 | 
			
		||||
 | 
			
		||||
      pids.each { |pid| stop(pid) }
 | 
			
		||||
 | 
			
		||||
      [storage_path, second_storage_path].each { |storage_dir| FileUtils.rm_rf(storage_dir) }
 | 
			
		||||
    end
 | 
			
		||||
  rescue StandardError
 | 
			
		||||
    raise gitaly_failure_message
 | 
			
		||||
| 
						 | 
				
			
			@ -356,4 +401,8 @@ module GitalySetup
 | 
			
		|||
  def praefect_with_db?
 | 
			
		||||
    Gitlab::Utils.to_boolean(ENV['GITALY_PRAEFECT_WITH_DB'], default: false)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def gitaly_with_transactions?
 | 
			
		||||
    Gitlab::Utils.to_boolean(ENV['GITALY_TRANSACTIONS_ENABLED'], default: false)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -173,8 +173,6 @@ module TestEnv
 | 
			
		|||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    FileUtils.mkdir_p(GitalySetup.storage_path)
 | 
			
		||||
    FileUtils.mkdir_p(GitalySetup.second_storage_path)
 | 
			
		||||
    FileUtils.mkdir_p(backup_path)
 | 
			
		||||
    FileUtils.mkdir_p(pages_path)
 | 
			
		||||
    FileUtils.mkdir_p(artifacts_path)
 | 
			
		||||
| 
						 | 
				
			
			@ -399,16 +397,18 @@ module TestEnv
 | 
			
		|||
 | 
			
		||||
  # These are directories that should be preserved at cleanup time
 | 
			
		||||
  def test_dirs
 | 
			
		||||
    @test_dirs ||= %w[
 | 
			
		||||
      frontend
 | 
			
		||||
      gitaly
 | 
			
		||||
      gitlab-shell
 | 
			
		||||
      gitlab-test
 | 
			
		||||
      gitlab-test.bundle
 | 
			
		||||
      gitlab-test-fork
 | 
			
		||||
      gitlab-test-fork.bundle
 | 
			
		||||
      gitlab-workhorse
 | 
			
		||||
      gitlab_workhorse_secret
 | 
			
		||||
    @test_dirs ||= [
 | 
			
		||||
      'frontend',
 | 
			
		||||
      'gitaly',
 | 
			
		||||
      'gitlab-shell',
 | 
			
		||||
      'gitlab-test',
 | 
			
		||||
      'gitlab-test.bundle',
 | 
			
		||||
      'gitlab-test-fork',
 | 
			
		||||
      'gitlab-test-fork.bundle',
 | 
			
		||||
      'gitlab-workhorse',
 | 
			
		||||
      'gitlab_workhorse_secret',
 | 
			
		||||
      File.basename(GitalySetup.storage_path),
 | 
			
		||||
      File.basename(GitalySetup.second_storage_path)
 | 
			
		||||
    ]
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,4 +24,10 @@ RSpec.shared_context 'with GLFM example snapshot fixtures' do
 | 
			
		|||
    stub_licensed_features(group_wikis: true)
 | 
			
		||||
    sign_in(user)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  after(:all) do
 | 
			
		||||
    # We need to clean up the repository explicitly as we're using a static project ID. If two tests
 | 
			
		||||
    # use this fixture, they'd attempt to create repositories with the same disk path and conflict.
 | 
			
		||||
    ::Gitlab::GitalyClient::RepositoryService.new(project.repository).remove
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ func ensureGitalyRepository(_ *testing.T, apiResponse *api.Response) error {
 | 
			
		|||
		},
 | 
			
		||||
	}); removeRepoErr != nil {
 | 
			
		||||
		status, ok := status.FromError(removeRepoErr)
 | 
			
		||||
		if !ok || !(status.Code() == codes.NotFound && status.Message() == "repository does not exist") {
 | 
			
		||||
		if !ok || !(status.Code() == codes.NotFound && (status.Message() == "repository does not exist" || status.Message() == "repository not found")) {
 | 
			
		||||
			return fmt.Errorf("remove repository: %w", removeRepoErr)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue