Migrate all `attr_encrypted` attributes to `ActiveRecord::Encryption`
## Generic process ### Preliminary notes - A `migrate_to_encrypts` helper method is introduced to simplify the model code changes. - You will need to create a [Batched Background Migration](https://docs.gitlab.com/ee/development/database/batched_background_migrations.html) to migrate encrypted data. ### Process - In release M: - Create a migration to add a `tmp_<field>` column - In the model, replace `attr_encrypted` with `migrate_to_encrypts` - Create a [Batched Background Migration](https://docs.gitlab.com/ee/development/database/batched_background_migrations.html) to populate the new `tmp_<field>` column from the `attr_encrypted` column. The background migration should define the model inline, and set each encrypted attribute to migrate with the value of the legacy encrypted attribute, e.g. ```ruby # frozen_string_literal: true module Gitlab module BackgroundMigration class MigrateAssetProxySecretKeyToNewEncryptionFramework < BatchedMigrationJob operation_name :migrate_asset_proxy_secret_key_to_new_encryption_framework feature_category :cell # Class that is imitating ApplicationSetting class ApplicationSetting < ::ApplicationRecord include Gitlab::EncryptedAttribute migrate_to_encrypts :asset_proxy_secret_key, mode: :per_attribute_iv, key: :db_key_base_truncated, algorithm: 'aes-256-cbc', insecure_mode: true end def perform each_sub_batch do |sub_batch| sub_batch.each do |application_setting| application_setting = Gitlab::BackgroundMigration::MigrateAssetProxySecretKeyToNewEncryptionFramework::ApplicationSetting .find(application_setting.id) next if application_setting.asset_proxy_secret_key.empty? application_setting.asset_proxy_secret_key = application_setting.attr_encrypted_asset_proxy_secret_key application_setting.save! end end end end end end ``` - Handle `<field>` queries to first try `tmp_<field>` and fallback to `<field>` - In release M+1: - Check if the BBM has finished on GitLab.com. If it has finished, it's time to [finalize the migration with the `skip_early_finalization_validation: true` argument](https://docs.gitlab.com/development/database/batched_background_migrations/#finalize-a-batched-background-migration) (e.g. https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117483). - Rename the `tmp_<field>` column to `<field>` (with [a normal](https://docs.gitlab.com/ee/development/database/avoiding_downtime_in_migrations.html#add-the-regular-migration-release-m) and [a post-deploy migration](https://docs.gitlab.com/ee/development/database/avoiding_downtime_in_migrations.html#add-a-post-deployment-migration-release-m)) - Change `migrate_to_encrypts :<field>, [extra_args]` to just `encrypts :<field>`, the application will just use the behavior from AR::Encryption from now on - [Ignore the `tmp_<field>` column with `ignore_column :tmp_<field> ...`](https://docs.gitlab.com/ee/development/database/avoiding_downtime_in_migrations.html#ignore-the-column-release-m) (`remove_with:` should be set to M+2) - [Ignore the `encrypted_<field>`, `encrypted_<field>_iv`, and `encrypted_<field>_salt` columns with `ignore_columns %i[encrypted_<field> encrypted_<field>_iv encrypted_<field>_salt] ...`](https://docs.gitlab.com/ee/development/database/avoiding_downtime_in_migrations.html#ignoring-the-column-release-m) (`remove_with:` should be set to M+3) - In release M+2: - [Drop the `encrypted_<field>`, `encrypted_<field>_iv`, and `encrypted_<field>_salt` columns](https://docs.gitlab.com/ee/development/database/avoiding_downtime_in_migrations.html#dropping-the-column-release-m1) - [Remove `ignore_column :tmp_<field> ...`](https://docs.gitlab.com/ee/development/database/avoiding_downtime_in_migrations.html#remove-the-ignore-rule-release-m1) - In release M+3: - [Remove `ignore_columns %i[encrypted_<field> encrypted_<field>_iv encrypted_<field>_salt] ...`](https://docs.gitlab.com/ee/development/database/avoiding_downtime_in_migrations.html#removing-the-ignore-rule-release-m2) ## Resource - https://pagertree.com/blog/migrate-attr_encrypted-to-rails-7-active-record-encrypts ## Estimate Given we have 104 attributes to migrate, each attributes requires 3 days of work, it's 312 days of work. This is a long project that isn't a blocker for Cells 1.0, but would be better to be done for Cells 1.5. ## Attributes to migrate ### Per-group summary | Group | Count | Example Models | | --- | --- | --- | | Cells Infrastructure | 32 | ApplicationSetting | | Import and Integrate | 16 | Integration, WebHooks::Hook, Atlassian::Identity | | Package Registry | 8 | DependencyProxy::Packages::Setting, Packages::Debian::ProjectDistributionKey | | Compliance | 8 | ComplianceManagement::ComplianceFramework::ComplianceRequirementsControl, AuditEvents::Instance::ExternalStreamingDestination | | Environments | 7 | Clusters::Providers::Gcp, Clusters::Platforms::Kubernetes | | Pipeline Authoring | 6 | Ci::JobVariable, Ci::GroupVariable, Ci::Variable | | Authentication | 4 | SystemAccess::MicrosoftGraphAccessToken, SystemAccess::MicrosoftApplication | | Source Code | 4 | RemoteMirror, Snippet, ProjectSnippet | | Service Desk | 3 | ServiceDesk::CustomEmailVerification, ServiceDesk::CustomEmailCredential | | Project Management | 3 | JiraConnectInstallation, ProjectSetting | | Incident Management | 2 | StatusPage::ProjectSetting, IncidentManagement::ProjectIncidentManagementSetting | | Observability | 2 | ErrorTracking::ProjectErrorTrackingSetting, GrafanaIntegration | | Platform Insights | 2 | Alerting::ProjectAlertingSetting, AlertManagement::HttpIntegration | | Pages | 2 | PagesDomainAcmeOrder, PagesDomain | | Cloud Connector | 1 | CloudConnector::ServiceAccessToken | | Notifications | 1 | ChatName | | Custom Models | 1 | Ai::SelfHostedModel | | Code Review | 1 | MergeRequests::ExternalStatusCheck | | Remote Development | 1 | RemoteDevelopment::WorkspaceVariable | | Geo | 1 | GeoNode | | User Management | 1 | User | | Dynamic Analysis | 1 | Dast::SiteProfileSecretVariable | | Pipeline Security | 1 | Ci::Trigger | ### Exhaustive list of attributes per group <details><summary>Click to expand</summary> | Group | Model | Attribute | Table Size | | ----- | ----- | --------- | ---------- | | Authentication | SystemAccess::GroupMicrosoftApplication | client_secret | small | | Authentication | SystemAccess::GroupMicrosoftGraphAccessToken | token | small | | Authentication | SystemAccess::MicrosoftApplication | client_secret | small | | Authentication | SystemAccess::MicrosoftGraphAccessToken | token | small | | Cells Infrastructure | ApplicationSetting | akismet_api_key | small | | Cells Infrastructure | ApplicationSetting | arkose_labs_client_secret | small | | Cells Infrastructure | ApplicationSetting | arkose_labs_client_xid | small | | Cells Infrastructure | ApplicationSetting | arkose_labs_data_exchange_key | small | | Cells Infrastructure | ApplicationSetting | arkose_labs_private_api_key | small | | Cells Infrastructure | ApplicationSetting | arkose_labs_public_api_key | small | | Cells Infrastructure | ApplicationSetting | asset_proxy_secret_key | small | | Cells Infrastructure | ApplicationSetting | ci_job_token_signing_key | small | | Cells Infrastructure | ApplicationSetting | ci_jwt_signing_key | small | | Cells Infrastructure | ApplicationSetting | cloud_license_auth_token | small | | Cells Infrastructure | ApplicationSetting | cube_api_key | small | | Cells Infrastructure | ApplicationSetting | customers_dot_jwt_signing_key | small | | Cells Infrastructure | ApplicationSetting | database_grafana_api_key | small | | Cells Infrastructure | ApplicationSetting | eks_secret_access_key | small | | Cells Infrastructure | ApplicationSetting | elasticsearch_aws_secret_access_key | small | | Cells Infrastructure | ApplicationSetting | elasticsearch_password | small | | Cells Infrastructure | ApplicationSetting | external_auth_client_key | small | | Cells Infrastructure | ApplicationSetting | external_auth_client_key_pass | small | | Cells Infrastructure | ApplicationSetting | external_pipeline_validation_service_token | small | | Cells Infrastructure | ApplicationSetting | lets_encrypt_private_key | small | | Cells Infrastructure | ApplicationSetting | mailgun_signing_key | small | | Cells Infrastructure | ApplicationSetting | product_analytics_configurator_connection_string | small | | Cells Infrastructure | ApplicationSetting | recaptcha_private_key | small | | Cells Infrastructure | ApplicationSetting | recaptcha_site_key | small | | Cells Infrastructure | ApplicationSetting | secret_detection_service_auth_token | small | | Cells Infrastructure | ApplicationSetting | secret_detection_token_revocation_token | small | | Cells Infrastructure | ApplicationSetting | slack_app_secret | small | | Cells Infrastructure | ApplicationSetting | slack_app_signing_secret | small | | Cells Infrastructure | ApplicationSetting | slack_app_verification_token | small | | Cells Infrastructure | ApplicationSetting | spam_check_api_key | small | | Cells Infrastructure | ApplicationSetting | telesign_api_key | small | | Cells Infrastructure | ApplicationSetting | telesign_customer_xid | small | | Cloud Connector | CloudConnector::ServiceAccessToken | token | small | | Code Review | MergeRequests::ExternalStatusCheck | shared_secret | small | | Compliance | AuditEvents::AmazonS3Configuration | secret_access_key | small | | Compliance | AuditEvents::GoogleCloudLoggingConfiguration | private_key | small | | Compliance | AuditEvents::Group::ExternalStreamingDestination | secret_token | small | | Compliance | AuditEvents::Instance::AmazonS3Configuration | secret_access_key | small | | Compliance | AuditEvents::Instance::ExternalStreamingDestination | secret_token | small | | Compliance | AuditEvents::Instance::GoogleCloudLoggingConfiguration | private_key | small | | Compliance | AuditEvents::InstanceExternalAuditEventDestination | verification_token | small | | Compliance | ComplianceManagement::ComplianceFramework::ComplianceRequirementsControl | secret_token | small | | Custom Models | Ai::SelfHostedModel | api_token | small | | Dynamic Analysis | Dast::SiteProfileSecretVariable | value | small | | Environments | Clusters::Agents::UrlConfiguration | private_key | small | | Environments | Clusters::Integrations::Prometheus | alert_manager_token | small | | Environments | Clusters::KubernetesNamespace | service_account_token | small | | Environments | Clusters::Platforms::Kubernetes | password | small | | Environments | Clusters::Platforms::Kubernetes | token | small | | Environments | Clusters::Providers::Aws | secret_access_key | small | | Environments | Clusters::Providers::Gcp | access_token | small | | Geo | GeoNode | secret_access_key | small | | Import and Integrate | Atlassian::Identity | refresh_token | small | | Import and Integrate | Atlassian::Identity | token | small | | Import and Integrate | BulkImports::Configuration | access_token | small | | Import and Integrate | BulkImports::Configuration | url | small | | Import and Integrate | Integration | properties | small | | Import and Integrate | Integrations::AmazonQ | properties | small | | Import and Integrate | Integrations::AppleAppStore | properties | small | | Import and Integrate | Integrations::Asana | properties | small | | Import and Integrate | Integrations::Assembla | properties | small | | Import and Integrate | Integrations::Bamboo | properties | small | | Import and Integrate | Integrations::BeyondIdentity | properties | small | | Import and Integrate | Integrations::Bugzilla | properties | small | | Import and Integrate | Integrations::Buildkite | properties | small | | Import and Integrate | Integrations::Campfire | properties | small | | Import and Integrate | Integrations::Clickup | properties | small | | Import and Integrate | Integrations::Confluence | properties | small | | Import and Integrate | Integrations::CustomIssueTracker | properties | small | | Import and Integrate | Integrations::Datadog | properties | small | | Import and Integrate | Integrations::DiffblueCover | properties | small | | Import and Integrate | Integrations::Discord | properties | small | | Import and Integrate | Integrations::DroneCi | properties | small | | Import and Integrate | Integrations::EmailsOnPush | properties | small | | Import and Integrate | Integrations::ExternalWiki | properties | small | | Import and Integrate | Integrations::Ewm | properties | small | | Import and Integrate | Integrations::GitGuardian | properties | small | | Import and Integrate | Integrations::Github | properties | small | | Import and Integrate | Integrations::GitlabSlackApplication | properties | small | | Import and Integrate | Integrations::GoogleCloudPlatform::ArtifactRegistry | properties | small | | Import and Integrate | Integrations::GoogleCloudPlatform::WorkloadIdentityFederation | properties | small | | Import and Integrate | Integrations::GooglePlay | properties | small | | Import and Integrate | Integrations::HangoutsChat | properties | small | | Import and Integrate | Integrations::Harbor | properties | small | | Import and Integrate | Integrations::Instance::AmazonQ | properties | small | | Import and Integrate | Integrations::Instance::Asana | properties | small | | Import and Integrate | Integrations::Instance::Assembla | properties | small | | Import and Integrate | Integrations::Instance::Bamboo | properties | small | | Import and Integrate | Integrations::Instance::BeyondIdentity | properties | small | | Import and Integrate | Integrations::Instance::Bugzilla | properties | small | | Import and Integrate | Integrations::Instance::Buildkite | properties | small | | Import and Integrate | Integrations::Instance::Clickup | properties | small | | Import and Integrate | Integrations::Instance::Confluence | properties | small | | Import and Integrate | Integrations::Instance::CustomIssueTracker | properties | small | | Import and Integrate | Integrations::Instance::Datadog | properties | small | | Import and Integrate | Integrations::Instance::DiffblueCover | properties | small | | Import and Integrate | Integrations::Instance::Discord | properties | small | | Import and Integrate | Integrations::Instance::DroneCi | properties | small | | Import and Integrate | Integrations::Instance::EmailsOnPush | properties | small | | Import and Integrate | Integrations::Instance::Ewm | properties | small | | Import and Integrate | Integrations::Instance::ExternalWiki | properties | small | | Import and Integrate | Integrations::Instance::GitGuardian | properties | small | | Import and Integrate | Integrations::Instance::HangoutsChat | properties | small | | Import and Integrate | Integrations::Instance::Harbor | properties | small | | Import and Integrate | Integrations::Instance::Integration | properties | small | | Import and Integrate | Integrations::Instance::Irker | properties | small | | Import and Integrate | Integrations::Instance::Jira | properties | small | | Import and Integrate | Integrations::Instance::Mattermost | properties | small | | Import and Integrate | Integrations::Instance::MattermostSlashCommands | properties | small | | Import and Integrate | Integrations::Instance::Matrix | properties | small | | Import and Integrate | Integrations::Instance::MicrosoftTeams | properties | small | | Import and Integrate | Integrations::Instance::MockCi | properties | small | | Import and Integrate | Integrations::Instance::MockMonitoring | properties | small | | Import and Integrate | Integrations::Instance::Packagist | properties | small | | Import and Integrate | Integrations::Instance::Phorge | properties | small | | Import and Integrate | Integrations::Instance::PipelinesEmail | properties | small | | Import and Integrate | Integrations::Instance::Pivotaltracker | properties | small | | Import and Integrate | Integrations::Instance::Pumble | properties | small | | Import and Integrate | Integrations::Instance::Pushover | properties | small | | Import and Integrate | Integrations::Instance::Redmine | properties | small | | Import and Integrate | Integrations::Instance::Slack | properties | small | | Import and Integrate | Integrations::Instance::SlackSlashCommands | properties | small | | Import and Integrate | Integrations::Instance::SquashTm | properties | small | | Import and Integrate | Integrations::Instance::Teamcity | properties | small | | Import and Integrate | Integrations::Instance::Telegram | properties | small | | Import and Integrate | Integrations::Instance::UnifyCircuit | properties | small | | Import and Integrate | Integrations::Instance::WebexTeams | properties | small | | Import and Integrate | Integrations::Instance::Youtrack | properties | small | | Import and Integrate | Integrations::Instance::Zentao | properties | small | | Import and Integrate | Integrations::Irker | properties | small | | Import and Integrate | Integrations::IssueTrackerData | issues_url | small | | Import and Integrate | Integrations::IssueTrackerData | new_issue_url | small | | Import and Integrate | Integrations::IssueTrackerData | project_url | small | | Import and Integrate | Integrations::Jenkins | properties | small | | Import and Integrate | Integrations::Jira | properties | small | | Import and Integrate | Integrations::JiraCloudApp | properties | small | | Import and Integrate | Integrations::JiraTrackerData | api_url | small | | Import and Integrate | Integrations::JiraTrackerData | password | small | | Import and Integrate | Integrations::JiraTrackerData | url | small | | Import and Integrate | Integrations::JiraTrackerData | username | small | | Import and Integrate | Integrations::Matrix | properties | small | | Import and Integrate | Integrations::Mattermost | properties | small | | Import and Integrate | Integrations::MattermostSlashCommands | properties | small | | Import and Integrate | Integrations::MicrosoftTeams | properties | small | | Import and Integrate | Integrations::MockCi | properties | small | | Import and Integrate | Integrations::MockMonitoring | properties | small | | Import and Integrate | Integrations::Packagist | properties | small | | Import and Integrate | Integrations::Phorge | properties | small | | Import and Integrate | Integrations::PipelinesEmail | properties | small | | Import and Integrate | Integrations::Pivotaltracker | properties | small | | Import and Integrate | Integrations::Prometheus | properties | small | | Import and Integrate | Integrations::Pumble | properties | small | | Import and Integrate | Integrations::Pushover | properties | small | | Import and Integrate | Integrations::Redmine | properties | small | | Import and Integrate | Integrations::Slack | properties | small | | Import and Integrate | Integrations::SlackSlashCommands | properties | small | | Import and Integrate | Integrations::SquashTm | properties | small | | Import and Integrate | Integrations::Teamcity | properties | small | | Import and Integrate | Integrations::Telegram | properties | small | | Import and Integrate | Integrations::UnifyCircuit | properties | small | | Import and Integrate | Integrations::WebexTeams | properties | small | | Import and Integrate | Integrations::Youtrack | properties | small | | Import and Integrate | Integrations::Zentao | properties | small | | Import and Integrate | Integrations::ZentaoTrackerData | api_token | small | | Import and Integrate | Integrations::ZentaoTrackerData | api_url | small | | Import and Integrate | Integrations::ZentaoTrackerData | url | small | | Import and Integrate | Integrations::ZentaoTrackerData | zentao_product_xid | small | | Import and Integrate | ProjectImportData | credentials | small | | Import and Integrate | SlackIntegration | bot_access_token | small | | Incident Management | IncidentManagement::ProjectIncidentManagementSetting | pagerduty_token | small | | Incident Management | StatusPage::ProjectSetting | aws_secret_key | small | | Notifications | ChatName | token | small | | Observability | ErrorTracking::ProjectErrorTrackingSetting | token | small | | Observability | GrafanaIntegration | token | small | | Package Registry | DependencyProxy::Packages::Setting | maven_external_registry_password | small | | Package Registry | DependencyProxy::Packages::Setting | maven_external_registry_username | small | | Package Registry | DependencyProxy::Packages::Setting | npm_external_registry_auth_token | small | | Package Registry | DependencyProxy::Packages::Setting | npm_external_registry_basic_auth | small | | Package Registry | Packages::Debian::GroupDistributionKey | passphrase | small | | Package Registry | Packages::Debian::GroupDistributionKey | private_key | small | | Package Registry | Packages::Debian::ProjectDistributionKey | passphrase | small | | Package Registry | Packages::Debian::ProjectDistributionKey | private_key | small | | Pages | PagesDomain | key | small | | Pages | PagesDomainAcmeOrder | private_key | small | | Pipeline Authoring | Ci::GroupVariable | value | small | | Pipeline Authoring | Ci::InstanceVariable | value | small | | Pipeline Authoring | Ci::JobVariable | value | over_limit | | Pipeline Authoring | Ci::PipelineScheduleVariable | value | small | | Pipeline Authoring | Ci::PipelineVariable | value | small | | Pipeline Authoring | Ci::Variable | value | small | | Pipeline Security | Ci::Trigger | encrypted_token_tmp | small | | Platform Insights | AlertManagement::HttpIntegration | token | small | | Platform Insights | Alerting::ProjectAlertingSetting | token | small | | Project Management | JiraConnectInstallation | shared_secret | small | | Project Management | ProjectSetting | cube_api_key | small | | Project Management | ProjectSetting | product_analytics_configurator_connection_string | small | | Remote Development | RemoteDevelopment::WorkspaceVariable | value | small | | Service Desk | ServiceDesk::CustomEmailCredential | smtp_password | small | | Service Desk | ServiceDesk::CustomEmailCredential | smtp_username | small | | Service Desk | ServiceDesk::CustomEmailVerification | token | small | | Source Code | PersonalSnippet | secret_token | small | | Source Code | ProjectSnippet | secret_token | small | | Source Code | RemoteMirror | credentials | small | | Source Code | Snippet | secret_token | small | | User Management | User | otp_secret | medium | | Import and Integrate | WebHooks::Hook | custom_headers | small | | Import and Integrate | WebHooks::Hook | token | small | | Import and Integrate | WebHooks::Hook | url | small | | Import and Integrate | WebHooks::Hook | url_variables | small | </details> ### Exhaustive JSON of attributes per group <details><summary>Click to expand</summary> ```json [ { "model": "DependencyProxy::Packages::Setting", "attribute": "maven_external_registry_username", "table_size_categorization": "small", "group_name": "Package Registry", "group_key": "package_registry" }, { "model": "DependencyProxy::Packages::Setting", "attribute": "maven_external_registry_password", "table_size_categorization": "small", "group_name": "Package Registry", "group_key": "package_registry" }, { "model": "DependencyProxy::Packages::Setting", "attribute": "npm_external_registry_basic_auth", "table_size_categorization": "small", "group_name": "Package Registry", "group_key": "package_registry" }, { "model": "DependencyProxy::Packages::Setting", "attribute": "npm_external_registry_auth_token", "table_size_categorization": "small", "group_name": "Package Registry", "group_key": "package_registry" }, { "model": "SystemAccess::MicrosoftGraphAccessToken", "attribute": "token", "table_size_categorization": "small", "group_name": "Authentication", "group_key": "authentication" }, { "model": "SystemAccess::MicrosoftApplication", "attribute": "client_secret", "table_size_categorization": "small", "group_name": "Authentication", "group_key": "authentication" }, { "model": "SystemAccess::GroupMicrosoftGraphAccessToken", "attribute": "token", "table_size_categorization": "small", "group_name": "Authentication", "group_key": "authentication" }, { "model": "SystemAccess::GroupMicrosoftApplication", "attribute": "client_secret", "table_size_categorization": "small", "group_name": "Authentication", "group_key": "authentication" }, { "model": "StatusPage::ProjectSetting", "attribute": "aws_secret_key", "table_size_categorization": "small", "group_name": "Incident Management", "group_key": "incident_management" }, { "model": "Packages::Debian::ProjectDistributionKey", "attribute": "private_key", "table_size_categorization": "small", "group_name": "Package Registry", "group_key": "package_registry" }, { "model": "Packages::Debian::ProjectDistributionKey", "attribute": "passphrase", "table_size_categorization": "small", "group_name": "Package Registry", "group_key": "package_registry" }, { "model": "Packages::Debian::GroupDistributionKey", "attribute": "private_key", "table_size_categorization": "small", "group_name": "Package Registry", "group_key": "package_registry" }, { "model": "Packages::Debian::GroupDistributionKey", "attribute": "passphrase", "table_size_categorization": "small", "group_name": "Package Registry", "group_key": "package_registry" }, { "model": "Clusters::Providers::Gcp", "attribute": "access_token", "table_size_categorization": "small", "group_name": "Environments", "group_key": "environments" }, { "model": "Clusters::Providers::Aws", "attribute": "secret_access_key", "table_size_categorization": "small", "group_name": "Environments", "group_key": "environments" }, { "model": "Clusters::Integrations::Prometheus", "attribute": "alert_manager_token", "table_size_categorization": "small", "group_name": "Environments", "group_key": "environments" }, { "model": "ServiceDesk::CustomEmailVerification", "attribute": "token", "table_size_categorization": "small", "group_name": "Service Desk", "group_key": "service_desk" }, { "model": "ServiceDesk::CustomEmailCredential", "attribute": "smtp_username", "table_size_categorization": "small", "group_name": "Service Desk", "group_key": "service_desk" }, { "model": "ServiceDesk::CustomEmailCredential", "attribute": "smtp_password", "table_size_categorization": "small", "group_name": "Service Desk", "group_key": "service_desk" }, { "model": "Integrations::ZentaoTrackerData", "attribute": "url", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Integrations::ZentaoTrackerData", "attribute": "api_url", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Integrations::ZentaoTrackerData", "attribute": "zentao_product_xid", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Integrations::ZentaoTrackerData", "attribute": "api_token", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Integrations::JiraTrackerData", "attribute": "url", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Integrations::JiraTrackerData", "attribute": "api_url", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Integrations::JiraTrackerData", "attribute": "username", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Integrations::JiraTrackerData", "attribute": "password", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Integrations::IssueTrackerData", "attribute": "project_url", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Integrations::IssueTrackerData", "attribute": "issues_url", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Integrations::IssueTrackerData", "attribute": "new_issue_url", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "IncidentManagement::ProjectIncidentManagementSetting", "attribute": "pagerduty_token", "table_size_categorization": "small", "group_name": "Incident Management", "group_key": "incident_management" }, { "model": "ErrorTracking::ProjectErrorTrackingSetting", "attribute": "token", "table_size_categorization": "small", "group_name": "Observability", "group_key": "observability" }, { "model": "Clusters::KubernetesNamespace", "attribute": "service_account_token", "table_size_categorization": "small", "group_name": "Environments", "group_key": "environments" }, { "model": "CloudConnector::ServiceAccessToken", "attribute": "token", "table_size_categorization": "small", "group_name": "Cloud Connector", "group_key": "cloud_connector" }, { "model": "BulkImports::Configuration", "attribute": "url", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "importers" }, { "model": "BulkImports::Configuration", "attribute": "access_token", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "importers" }, { "model": "Atlassian::Identity", "attribute": "token", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Atlassian::Identity", "attribute": "refresh_token", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Alerting::ProjectAlertingSetting", "attribute": "token", "table_size_categorization": "small", "group_name": "Platform Insights", "group_key": "platform_insights" }, { "model": "SlackIntegration", "attribute": "bot_access_token", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "RemoteMirror", "attribute": "credentials", "table_size_categorization": "small", "group_name": "Source Code", "group_key": "source_code" }, { "model": "ProjectSetting", "attribute": "cube_api_key", "table_size_categorization": "small", "group_name": "Project Management", "group_key": "project_management" }, { "model": "ProjectSetting", "attribute": "product_analytics_configurator_connection_string", "table_size_categorization": "small", "group_name": "Project Management", "group_key": "project_management" }, { "model": "PagesDomainAcmeOrder", "attribute": "private_key", "table_size_categorization": "small", "group_name": "Pages", "group_key": "pages" }, { "model": "PagesDomain", "attribute": "key", "table_size_categorization": "small", "group_name": "Pages", "group_key": "pages" }, { "model": "JiraConnectInstallation", "attribute": "shared_secret", "table_size_categorization": "small", "group_name": "Project Management", "group_key": "project_management" }, { "model": "GrafanaIntegration", "attribute": "token", "table_size_categorization": "small", "group_name": "Observability", "group_key": "observability" }, { "model": "ChatName", "attribute": "token", "table_size_categorization": "small", "group_name": "Notifications", "group_key": "notifications" }, { "model": "ComplianceManagement::ComplianceFramework::ComplianceRequirementsControl", "attribute": "secret_token", "table_size_categorization": "small", "group_name": "Compliance", "group_key": "compliance" }, { "model": "AuditEvents::Instance::ExternalStreamingDestination", "attribute": "secret_token", "table_size_categorization": "small", "group_name": "Compliance", "group_key": "compliance" }, { "model": "AuditEvents::Group::ExternalStreamingDestination", "attribute": "secret_token", "table_size_categorization": "small", "group_name": "Compliance", "group_key": "compliance" }, { "model": "AuditEvents::Instance::GoogleCloudLoggingConfiguration", "attribute": "private_key", "table_size_categorization": "small", "group_name": "Compliance", "group_key": "compliance" }, { "model": "AuditEvents::Instance::AmazonS3Configuration", "attribute": "secret_access_key", "table_size_categorization": "small", "group_name": "Compliance", "group_key": "compliance" }, { "model": "AuditEvents::AmazonS3Configuration", "attribute": "secret_access_key", "table_size_categorization": "small", "group_name": "Compliance", "group_key": "compliance" }, { "model": "AuditEvents::GoogleCloudLoggingConfiguration", "attribute": "private_key", "table_size_categorization": "small", "group_name": "Compliance", "group_key": "compliance" }, { "model": "AuditEvents::InstanceExternalAuditEventDestination", "attribute": "verification_token", "table_size_categorization": "small", "group_name": "Compliance", "group_key": "compliance" }, { "model": "Ai::SelfHostedModel", "attribute": "api_token", "table_size_categorization": "small", "group_name": "Custom Models", "group_key": "custom_models" }, { "model": "MergeRequests::ExternalStatusCheck", "attribute": "shared_secret", "table_size_categorization": "small", "group_name": "Code Review", "group_key": "code_review" }, { "model": "RemoteDevelopment::WorkspaceVariable", "attribute": "value", "table_size_categorization": "small", "group_name": "Remote Development", "group_key": "remote_development" }, { "model": "Clusters::Agents::UrlConfiguration", "attribute": "private_key", "table_size_categorization": "small", "group_name": "Environments", "group_key": "environments" }, { "model": "AlertManagement::HttpIntegration", "attribute": "token", "table_size_categorization": "small", "group_name": "Platform Insights", "group_key": "platform_insights" }, { "model": "WebHooks::Hook", "attribute": "token", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "WebHooks::Hook", "attribute": "url", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "WebHooks::Hook", "attribute": "url_variables", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "WebHooks::Hook", "attribute": "custom_headers", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "Integration", "attribute": "properties", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "import_and_integrate" }, { "model": "ProjectImportData", "attribute": "credentials", "table_size_categorization": "small", "group_name": "Import and Integrate", "group_key": "importers" }, { "model": "Snippet", "attribute": "secret_token", "table_size_categorization": "small", "group_name": "Source Code", "group_key": "source_code" }, { "model": "Clusters::Platforms::Kubernetes", "attribute": "password", "table_size_categorization": "small", "group_name": "Environments", "group_key": "environments" }, { "model": "Clusters::Platforms::Kubernetes", "attribute": "token", "table_size_categorization": "small", "group_name": "Environments", "group_key": "environments" }, { "model": "GeoNode", "attribute": "secret_access_key", "table_size_categorization": "small", "group_name": "Geo", "group_key": "geo" }, { "model": "User", "attribute": "otp_secret", "table_size_categorization": "medium", "group_name": "User Management", "group_key": "user_management" }, { "model": "ApplicationSetting", "attribute": "asset_proxy_secret_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "external_auth_client_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "external_auth_client_key_pass", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "lets_encrypt_private_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "eks_secret_access_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "akismet_api_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "spam_check_api_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "elasticsearch_aws_secret_access_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "elasticsearch_password", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "recaptcha_private_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "recaptcha_site_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "slack_app_secret", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "slack_app_signing_secret", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "slack_app_verification_token", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "ci_jwt_signing_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "ci_job_token_signing_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "customers_dot_jwt_signing_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "secret_detection_token_revocation_token", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "cloud_license_auth_token", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "external_pipeline_validation_service_token", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "mailgun_signing_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "database_grafana_api_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "arkose_labs_client_xid", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "arkose_labs_client_secret", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "arkose_labs_public_api_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "arkose_labs_private_api_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "arkose_labs_data_exchange_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "cube_api_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "telesign_customer_xid", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "telesign_api_key", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "product_analytics_configurator_connection_string", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ApplicationSetting", "attribute": "secret_detection_service_auth_token", "table_size_categorization": "small", "group_name": "Cells Infrastructure", "group_key": "cells_infrastructure" }, { "model": "ProjectSnippet", "attribute": "secret_token", "table_size_categorization": "small", "group_name": "Source Code", "group_key": "source_code" }, { "model": "PersonalSnippet", "attribute": "secret_token", "table_size_categorization": "small", "group_name": "Source Code", "group_key": "source_code" }, { "model": "Dast::SiteProfileSecretVariable", "attribute": "value", "table_size_categorization": "small", "group_name": "Dynamic Analysis", "group_key": "dynamic_analysis" }, { "model": "Ci::JobVariable", "attribute": "value", "table_size_categorization": "over_limit", "group_name": "Pipeline Authoring", "group_key": "pipeline_authoring" }, { "model": "Ci::Trigger", "attribute": "encrypted_token_tmp", "table_size_categorization": "small", "group_name": "Pipeline Security", "group_key": "pipeline_security" }, { "model": "Ci::GroupVariable", "attribute": "value", "table_size_categorization": "small", "group_name": "Pipeline Authoring", "group_key": "pipeline_authoring" }, { "model": "Ci::Variable", "attribute": "value", "table_size_categorization": "small", "group_name": "Pipeline Authoring", "group_key": "pipeline_authoring" }, { "model": "Ci::PipelineScheduleVariable", "attribute": "value", "table_size_categorization": "small", "group_name": "Pipeline Authoring", "group_key": "pipeline_authoring" }, { "model": "Ci::InstanceVariable", "attribute": "value", "table_size_categorization": "small", "group_name": "Pipeline Authoring", "group_key": "pipeline_authoring" }, { "model": "Ci::PipelineVariable", "attribute": "value", "table_size_categorization": "small", "group_name": "Pipeline Authoring", "group_key": "pipeline_authoring" } ``` </details>
epic