All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.aws.sdk.kotlin.services.securityhub.DefaultSecurityHubClient.kt Maven / Gradle / Ivy

There is a newer version: 1.3.35
Show newest version
// Code generated by smithy-kotlin-codegen. DO NOT EDIT!

package aws.sdk.kotlin.services.securityhub

import aws.sdk.kotlin.runtime.http.ApiMetadata
import aws.sdk.kotlin.runtime.http.AwsUserAgentMetadata
import aws.sdk.kotlin.runtime.http.interceptors.AwsSpanInterceptor
import aws.sdk.kotlin.runtime.http.interceptors.BusinessMetricsInterceptor
import aws.sdk.kotlin.runtime.http.middleware.AwsRetryHeaderMiddleware
import aws.sdk.kotlin.runtime.http.middleware.RecursionDetection
import aws.sdk.kotlin.runtime.http.middleware.UserAgent
import aws.sdk.kotlin.services.securityhub.auth.SecurityHubAuthSchemeProviderAdapter
import aws.sdk.kotlin.services.securityhub.auth.SecurityHubIdentityProviderConfigAdapter
import aws.sdk.kotlin.services.securityhub.endpoints.internal.EndpointResolverAdapter
import aws.sdk.kotlin.services.securityhub.model.*
import aws.sdk.kotlin.services.securityhub.serde.*
import aws.smithy.kotlin.runtime.auth.AuthSchemeId
import aws.smithy.kotlin.runtime.auth.awssigning.AwsSigningAttributes
import aws.smithy.kotlin.runtime.auth.awssigning.DefaultAwsSigner
import aws.smithy.kotlin.runtime.awsprotocol.AwsAttributes
import aws.smithy.kotlin.runtime.client.SdkClientOption
import aws.smithy.kotlin.runtime.collections.attributesOf
import aws.smithy.kotlin.runtime.collections.putIfAbsent
import aws.smithy.kotlin.runtime.collections.putIfAbsentNotNull
import aws.smithy.kotlin.runtime.http.SdkHttpClient
import aws.smithy.kotlin.runtime.http.auth.AuthScheme
import aws.smithy.kotlin.runtime.http.auth.SigV4AuthScheme
import aws.smithy.kotlin.runtime.http.operation.OperationAuthConfig
import aws.smithy.kotlin.runtime.http.operation.OperationMetrics
import aws.smithy.kotlin.runtime.http.operation.SdkHttpOperation
import aws.smithy.kotlin.runtime.http.operation.context
import aws.smithy.kotlin.runtime.http.operation.roundTrip
import aws.smithy.kotlin.runtime.http.operation.telemetry
import aws.smithy.kotlin.runtime.io.SdkManagedGroup
import aws.smithy.kotlin.runtime.io.addIfManaged
import aws.smithy.kotlin.runtime.operation.ExecutionContext

internal class DefaultSecurityHubClient(override val config: SecurityHubClient.Config) : SecurityHubClient {
    private val managedResources = SdkManagedGroup()
    private val client = SdkHttpClient(config.httpClient)
    private val identityProviderConfig = SecurityHubIdentityProviderConfigAdapter(config)
    private val configuredAuthSchemes = with(config.authSchemes.associateBy(AuthScheme::schemeId).toMutableMap()){
        getOrPut(AuthSchemeId.AwsSigV4){
            SigV4AuthScheme(DefaultAwsSigner, "securityhub")
        }
        toMap()
    }
    private val authSchemeAdapter = SecurityHubAuthSchemeProviderAdapter(config)
    private val telemetryScope = "aws.sdk.kotlin.services.securityhub"
    private val opMetrics = OperationMetrics(telemetryScope, config.telemetryProvider)

    init {
        managedResources.addIfManaged(config.httpClient)
        managedResources.addIfManaged(config.credentialsProvider)
    }

    private val awsUserAgentMetadata = AwsUserAgentMetadata.fromEnvironment(ApiMetadata(ServiceId, SdkVersion), config.applicationId)

    /**
     * Accepts the invitation to be a member account and be monitored by the Security Hub administrator account that the invitation was sent from.
     *
     * This operation is only used by member accounts that are not added through Organizations.
     *
     * When the member account accepts the invitation, permission is granted to the administrator account to view findings generated in the member account.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.AcceptAdministratorInvitation.sample
     */
    override suspend fun acceptAdministratorInvitation(input: AcceptAdministratorInvitationRequest): AcceptAdministratorInvitationResponse {
        val op = SdkHttpOperation.build {
            serializeWith = AcceptAdministratorInvitationOperationSerializer()
            deserializeWith = AcceptAdministratorInvitationOperationDeserializer()
            operationName = "AcceptAdministratorInvitation"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * This method is deprecated. Instead, use `AcceptAdministratorInvitation`.
     *
     * The Security Hub console continues to use `AcceptInvitation`. It will eventually change to use `AcceptAdministratorInvitation`. Any IAM policies that specifically control access to this function must continue to use `AcceptInvitation`. You should also add `AcceptAdministratorInvitation` to your policies to ensure that the correct permissions are in place after the console begins to use `AcceptAdministratorInvitation`.
     *
     * Accepts the invitation to be a member account and be monitored by the Security Hub administrator account that the invitation was sent from.
     *
     * This operation is only used by member accounts that are not added through Organizations.
     *
     * When the member account accepts the invitation, permission is granted to the administrator account to view findings generated in the member account.
     */
    @Deprecated("This API has been deprecated, use AcceptAdministratorInvitation API instead.")
    override suspend fun acceptInvitation(input: AcceptInvitationRequest): AcceptInvitationResponse {
        val op = SdkHttpOperation.build {
            serializeWith = AcceptInvitationOperationSerializer()
            deserializeWith = AcceptInvitationOperationDeserializer()
            operationName = "AcceptInvitation"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Deletes one or more automation rules.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.BatchDeleteAutomationRules.sample
     */
    override suspend fun batchDeleteAutomationRules(input: BatchDeleteAutomationRulesRequest): BatchDeleteAutomationRulesResponse {
        val op = SdkHttpOperation.build {
            serializeWith = BatchDeleteAutomationRulesOperationSerializer()
            deserializeWith = BatchDeleteAutomationRulesOperationDeserializer()
            operationName = "BatchDeleteAutomationRules"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Disables the standards specified by the provided `StandardsSubscriptionArns`.
     *
     * For more information, see [Security Standards](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards.html) section of the *Security Hub User Guide*.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.BatchDisableStandards.sample
     */
    override suspend fun batchDisableStandards(input: BatchDisableStandardsRequest): BatchDisableStandardsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = BatchDisableStandardsOperationSerializer()
            deserializeWith = BatchDisableStandardsOperationDeserializer()
            operationName = "BatchDisableStandards"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Enables the standards specified by the provided `StandardsArn`. To obtain the ARN for a standard, use the `DescribeStandards` operation.
     *
     * For more information, see the [Security Standards](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards.html) section of the *Security Hub User Guide*.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.BatchEnableStandards.sample
     */
    override suspend fun batchEnableStandards(input: BatchEnableStandardsRequest): BatchEnableStandardsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = BatchEnableStandardsOperationSerializer()
            deserializeWith = BatchEnableStandardsOperationDeserializer()
            operationName = "BatchEnableStandards"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Retrieves a list of details for automation rules based on rule Amazon Resource Names (ARNs).
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.BatchGetAutomationRules.sample
     */
    override suspend fun batchGetAutomationRules(input: BatchGetAutomationRulesRequest): BatchGetAutomationRulesResponse {
        val op = SdkHttpOperation.build {
            serializeWith = BatchGetAutomationRulesOperationSerializer()
            deserializeWith = BatchGetAutomationRulesOperationDeserializer()
            operationName = "BatchGetAutomationRules"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns associations between an Security Hub configuration and a batch of target accounts, organizational units, or the root. Only the Security Hub delegated administrator can invoke this operation from the home Region. A configuration can refer to a configuration policy or to a self-managed configuration.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.BatchGetConfigurationPolicyAssociations.sample
     */
    override suspend fun batchGetConfigurationPolicyAssociations(input: BatchGetConfigurationPolicyAssociationsRequest): BatchGetConfigurationPolicyAssociationsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = BatchGetConfigurationPolicyAssociationsOperationSerializer()
            deserializeWith = BatchGetConfigurationPolicyAssociationsOperationDeserializer()
            operationName = "BatchGetConfigurationPolicyAssociations"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Provides details about a batch of security controls for the current Amazon Web Services account and Amazon Web Services Region.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.BatchGetSecurityControls.sample
     */
    override suspend fun batchGetSecurityControls(input: BatchGetSecurityControlsRequest): BatchGetSecurityControlsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = BatchGetSecurityControlsOperationSerializer()
            deserializeWith = BatchGetSecurityControlsOperationDeserializer()
            operationName = "BatchGetSecurityControls"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * For a batch of security controls and standards, identifies whether each control is currently enabled or disabled in a standard.
     */
    override suspend fun batchGetStandardsControlAssociations(input: BatchGetStandardsControlAssociationsRequest): BatchGetStandardsControlAssociationsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = BatchGetStandardsControlAssociationsOperationSerializer()
            deserializeWith = BatchGetStandardsControlAssociationsOperationDeserializer()
            operationName = "BatchGetStandardsControlAssociations"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Imports security findings generated by a finding provider into Security Hub. This action is requested by the finding provider to import its findings into Security Hub.
     *
     * `BatchImportFindings` must be called by one of the following:
     * + The Amazon Web Services account that is associated with a finding if you are using the [default product ARN](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-custom-providers.html#securityhub-custom-providers-bfi-reqs) or are a partner sending findings from within a customer's Amazon Web Services account. In these cases, the identifier of the account that you are calling `BatchImportFindings` from needs to be the same as the `AwsAccountId` attribute for the finding.
     * + An Amazon Web Services account that Security Hub has allow-listed for an official partner integration. In this case, you can call `BatchImportFindings` from the allow-listed account and send findings from different customer accounts in the same batch.
     *
     * The maximum allowed size for a finding is 240 Kb. An error is returned for any finding larger than 240 Kb.
     *
     * After a finding is created, `BatchImportFindings` cannot be used to update the following finding fields and objects, which Security Hub customers use to manage their investigation workflow.
     * + `Note`
     * + `UserDefinedFields`
     * + `VerificationState`
     * + `Workflow`
     *
     * Finding providers also should not use `BatchImportFindings` to update the following attributes.
     * + `Confidence`
     * + `Criticality`
     * + `RelatedFindings`
     * + `Severity`
     * + `Types`
     *
     * Instead, finding providers use `FindingProviderFields` to provide values for these attributes.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.BatchImportFindings.sample
     */
    override suspend fun batchImportFindings(input: BatchImportFindingsRequest): BatchImportFindingsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = BatchImportFindingsOperationSerializer()
            deserializeWith = BatchImportFindingsOperationDeserializer()
            operationName = "BatchImportFindings"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Updates one or more automation rules based on rule Amazon Resource Names (ARNs) and input parameters.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.BatchUpdateAutomationRules.sample
     */
    override suspend fun batchUpdateAutomationRules(input: BatchUpdateAutomationRulesRequest): BatchUpdateAutomationRulesResponse {
        val op = SdkHttpOperation.build {
            serializeWith = BatchUpdateAutomationRulesOperationSerializer()
            deserializeWith = BatchUpdateAutomationRulesOperationDeserializer()
            operationName = "BatchUpdateAutomationRules"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Used by Security Hub customers to update information about their investigation into a finding. Requested by administrator accounts or member accounts. Administrator accounts can update findings for their account and their member accounts. Member accounts can update findings for their account.
     *
     * Updates from `BatchUpdateFindings` do not affect the value of `UpdatedAt` for a finding.
     *
     * Administrator and member accounts can use `BatchUpdateFindings` to update the following finding fields and objects.
     * + `Confidence`
     * + `Criticality`
     * + `Note`
     * + `RelatedFindings`
     * + `Severity`
     * + `Types`
     * + `UserDefinedFields`
     * + `VerificationState`
     * + `Workflow`
     *
     * You can configure IAM policies to restrict access to fields and field values. For example, you might not want member accounts to be able to suppress findings or change the finding severity. See [Configuring access to BatchUpdateFindings](https://docs.aws.amazon.com/securityhub/latest/userguide/finding-update-batchupdatefindings.html#batchupdatefindings-configure-access) in the *Security Hub User Guide*.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.BatchUpdateFindings.sample
     */
    override suspend fun batchUpdateFindings(input: BatchUpdateFindingsRequest): BatchUpdateFindingsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = BatchUpdateFindingsOperationSerializer()
            deserializeWith = BatchUpdateFindingsOperationDeserializer()
            operationName = "BatchUpdateFindings"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * For a batch of security controls and standards, this operation updates the enablement status of a control in a standard.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.BatchUpdateStandardsControlAssociations.sample
     */
    override suspend fun batchUpdateStandardsControlAssociations(input: BatchUpdateStandardsControlAssociationsRequest): BatchUpdateStandardsControlAssociationsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = BatchUpdateStandardsControlAssociationsOperationSerializer()
            deserializeWith = BatchUpdateStandardsControlAssociationsOperationDeserializer()
            operationName = "BatchUpdateStandardsControlAssociations"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Creates a custom action target in Security Hub.
     *
     * You can use custom actions on findings and insights in Security Hub to trigger target actions in Amazon CloudWatch Events.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.CreateActionTarget.sample
     */
    override suspend fun createActionTarget(input: CreateActionTargetRequest): CreateActionTargetResponse {
        val op = SdkHttpOperation.build {
            serializeWith = CreateActionTargetOperationSerializer()
            deserializeWith = CreateActionTargetOperationDeserializer()
            operationName = "CreateActionTarget"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Creates an automation rule based on input parameters.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.CreateAutomationRule.sample
     */
    override suspend fun createAutomationRule(input: CreateAutomationRuleRequest): CreateAutomationRuleResponse {
        val op = SdkHttpOperation.build {
            serializeWith = CreateAutomationRuleOperationSerializer()
            deserializeWith = CreateAutomationRuleOperationDeserializer()
            operationName = "CreateAutomationRule"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Creates a configuration policy with the defined configuration. Only the Security Hub delegated administrator can invoke this operation from the home Region.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.CreateConfigurationPolicy.sample
     */
    override suspend fun createConfigurationPolicy(input: CreateConfigurationPolicyRequest): CreateConfigurationPolicyResponse {
        val op = SdkHttpOperation.build {
            serializeWith = CreateConfigurationPolicyOperationSerializer()
            deserializeWith = CreateConfigurationPolicyOperationDeserializer()
            operationName = "CreateConfigurationPolicy"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Used to enable finding aggregation. Must be called from the aggregation Region.
     *
     * For more details about cross-Region replication, see [Configuring finding aggregation](https://docs.aws.amazon.com/securityhub/latest/userguide/finding-aggregation.html) in the *Security Hub User Guide*.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.CreateFindingAggregator.sample
     */
    override suspend fun createFindingAggregator(input: CreateFindingAggregatorRequest): CreateFindingAggregatorResponse {
        val op = SdkHttpOperation.build {
            serializeWith = CreateFindingAggregatorOperationSerializer()
            deserializeWith = CreateFindingAggregatorOperationDeserializer()
            operationName = "CreateFindingAggregator"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Creates a custom insight in Security Hub. An insight is a consolidation of findings that relate to a security issue that requires attention or remediation.
     *
     * To group the related findings in the insight, use the `GroupByAttribute`.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.CreateInsight.sample
     */
    override suspend fun createInsight(input: CreateInsightRequest): CreateInsightResponse {
        val op = SdkHttpOperation.build {
            serializeWith = CreateInsightOperationSerializer()
            deserializeWith = CreateInsightOperationDeserializer()
            operationName = "CreateInsight"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Creates a member association in Security Hub between the specified accounts and the account used to make the request, which is the administrator account. If you are integrated with Organizations, then the administrator account is designated by the organization management account.
     *
     * `CreateMembers` is always used to add accounts that are not organization members.
     *
     * For accounts that are managed using Organizations, `CreateMembers` is only used in the following cases:
     * + Security Hub is not configured to automatically add new organization accounts.
     * + The account was disassociated or deleted in Security Hub.
     *
     * This action can only be used by an account that has Security Hub enabled. To enable Security Hub, you can use the `EnableSecurityHub` operation.
     *
     * For accounts that are not organization members, you create the account association and then send an invitation to the member account. To send the invitation, you use the `InviteMembers` operation. If the account owner accepts the invitation, the account becomes a member account in Security Hub.
     *
     * Accounts that are managed using Organizations do not receive an invitation. They automatically become a member account in Security Hub.
     * + If the organization account does not have Security Hub enabled, then Security Hub and the default standards are automatically enabled. Note that Security Hub cannot be enabled automatically for the organization management account. The organization management account must enable Security Hub before the administrator account enables it as a member account.
     * + For organization accounts that already have Security Hub enabled, Security Hub does not make any other changes to those accounts. It does not change their enabled standards or controls.
     *
     * A permissions policy is added that permits the administrator account to view the findings generated in the member account.
     *
     * To remove the association between the administrator and member accounts, use the `DisassociateFromMasterAccount` or `DisassociateMembers` operation.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.CreateMembers.sample
     */
    override suspend fun createMembers(input: CreateMembersRequest): CreateMembersResponse {
        val op = SdkHttpOperation.build {
            serializeWith = CreateMembersOperationSerializer()
            deserializeWith = CreateMembersOperationDeserializer()
            operationName = "CreateMembers"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Declines invitations to become a member account.
     *
     * A prospective member account uses this operation to decline an invitation to become a member.
     *
     * This operation is only called by member accounts that aren't part of an organization. Organization accounts don't receive invitations.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DeclineInvitations.sample
     */
    override suspend fun declineInvitations(input: DeclineInvitationsRequest): DeclineInvitationsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DeclineInvitationsOperationSerializer()
            deserializeWith = DeclineInvitationsOperationDeserializer()
            operationName = "DeclineInvitations"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Deletes a custom action target from Security Hub.
     *
     * Deleting a custom action target does not affect any findings or insights that were already sent to Amazon CloudWatch Events using the custom action.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DeleteActionTarget.sample
     */
    override suspend fun deleteActionTarget(input: DeleteActionTargetRequest): DeleteActionTargetResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DeleteActionTargetOperationSerializer()
            deserializeWith = DeleteActionTargetOperationDeserializer()
            operationName = "DeleteActionTarget"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Deletes a configuration policy. Only the Security Hub delegated administrator can invoke this operation from the home Region. For the deletion to succeed, you must first disassociate a configuration policy from target accounts, organizational units, or the root by invoking the `StartConfigurationPolicyDisassociation` operation.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DeleteConfigurationPolicy.sample
     */
    override suspend fun deleteConfigurationPolicy(input: DeleteConfigurationPolicyRequest): DeleteConfigurationPolicyResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DeleteConfigurationPolicyOperationSerializer()
            deserializeWith = DeleteConfigurationPolicyOperationDeserializer()
            operationName = "DeleteConfigurationPolicy"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Deletes a finding aggregator. When you delete the finding aggregator, you stop finding aggregation.
     *
     * When you stop finding aggregation, findings that were already aggregated to the aggregation Region are still visible from the aggregation Region. New findings and finding updates are not aggregated.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DeleteFindingAggregator.sample
     */
    override suspend fun deleteFindingAggregator(input: DeleteFindingAggregatorRequest): DeleteFindingAggregatorResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DeleteFindingAggregatorOperationSerializer()
            deserializeWith = DeleteFindingAggregatorOperationDeserializer()
            operationName = "DeleteFindingAggregator"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Deletes the insight specified by the `InsightArn`.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DeleteInsight.sample
     */
    override suspend fun deleteInsight(input: DeleteInsightRequest): DeleteInsightResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DeleteInsightOperationSerializer()
            deserializeWith = DeleteInsightOperationDeserializer()
            operationName = "DeleteInsight"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Deletes invitations received by the Amazon Web Services account to become a member account.
     *
     * A Security Hub administrator account can use this operation to delete invitations sent to one or more member accounts.
     *
     * This operation is only used to delete invitations that are sent to member accounts that aren't part of an organization. Organization accounts don't receive invitations.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DeleteInvitations.sample
     */
    override suspend fun deleteInvitations(input: DeleteInvitationsRequest): DeleteInvitationsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DeleteInvitationsOperationSerializer()
            deserializeWith = DeleteInvitationsOperationDeserializer()
            operationName = "DeleteInvitations"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Deletes the specified member accounts from Security Hub.
     *
     * You can invoke this API only to delete accounts that became members through invitation. You can't invoke this API to delete accounts that belong to an Organizations organization.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DeleteMembers.sample
     */
    override suspend fun deleteMembers(input: DeleteMembersRequest): DeleteMembersResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DeleteMembersOperationSerializer()
            deserializeWith = DeleteMembersOperationDeserializer()
            operationName = "DeleteMembers"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns a list of the custom action targets in Security Hub in your account.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DescribeActionTargets.sample
     */
    override suspend fun describeActionTargets(input: DescribeActionTargetsRequest): DescribeActionTargetsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DescribeActionTargetsOperationSerializer()
            deserializeWith = DescribeActionTargetsOperationDeserializer()
            operationName = "DescribeActionTargets"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns details about the Hub resource in your account, including the `HubArn` and the time when you enabled Security Hub.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DescribeHub.sample
     */
    override suspend fun describeHub(input: DescribeHubRequest): DescribeHubResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DescribeHubOperationSerializer()
            deserializeWith = DescribeHubOperationDeserializer()
            operationName = "DescribeHub"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns information about the way your organization is configured in Security Hub. Only the Security Hub administrator account can invoke this operation.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DescribeOrganizationConfiguration.sample
     */
    override suspend fun describeOrganizationConfiguration(input: DescribeOrganizationConfigurationRequest): DescribeOrganizationConfigurationResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DescribeOrganizationConfigurationOperationSerializer()
            deserializeWith = DescribeOrganizationConfigurationOperationDeserializer()
            operationName = "DescribeOrganizationConfiguration"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns information about product integrations in Security Hub.
     *
     * You can optionally provide an integration ARN. If you provide an integration ARN, then the results only include that integration.
     *
     * If you do not provide an integration ARN, then the results include all of the available product integrations.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DescribeProducts.sample
     */
    override suspend fun describeProducts(input: DescribeProductsRequest): DescribeProductsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DescribeProductsOperationSerializer()
            deserializeWith = DescribeProductsOperationDeserializer()
            operationName = "DescribeProducts"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns a list of the available standards in Security Hub.
     *
     * For each standard, the results include the standard ARN, the name, and a description.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DescribeStandards.sample
     */
    override suspend fun describeStandards(input: DescribeStandardsRequest): DescribeStandardsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DescribeStandardsOperationSerializer()
            deserializeWith = DescribeStandardsOperationDeserializer()
            operationName = "DescribeStandards"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns a list of security standards controls.
     *
     * For each control, the results include information about whether it is currently enabled, the severity, and a link to remediation information.
     */
    override suspend fun describeStandardsControls(input: DescribeStandardsControlsRequest): DescribeStandardsControlsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DescribeStandardsControlsOperationSerializer()
            deserializeWith = DescribeStandardsControlsOperationDeserializer()
            operationName = "DescribeStandardsControls"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Disables the integration of the specified product with Security Hub. After the integration is disabled, findings from that product are no longer sent to Security Hub.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DisableImportFindingsForProduct.sample
     */
    override suspend fun disableImportFindingsForProduct(input: DisableImportFindingsForProductRequest): DisableImportFindingsForProductResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DisableImportFindingsForProductOperationSerializer()
            deserializeWith = DisableImportFindingsForProductOperationDeserializer()
            operationName = "DisableImportFindingsForProduct"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Disables a Security Hub administrator account. Can only be called by the organization management account.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DisableOrganizationAdminAccount.sample
     */
    override suspend fun disableOrganizationAdminAccount(input: DisableOrganizationAdminAccountRequest): DisableOrganizationAdminAccountResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DisableOrganizationAdminAccountOperationSerializer()
            deserializeWith = DisableOrganizationAdminAccountOperationDeserializer()
            operationName = "DisableOrganizationAdminAccount"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Disables Security Hub in your account only in the current Amazon Web Services Region. To disable Security Hub in all Regions, you must submit one request per Region where you have enabled Security Hub.
     *
     * You can't disable Security Hub in an account that is currently the Security Hub administrator.
     *
     * When you disable Security Hub, your existing findings and insights and any Security Hub configuration settings are deleted after 90 days and cannot be recovered. Any standards that were enabled are disabled, and your administrator and member account associations are removed.
     *
     * If you want to save your existing findings, you must export them before you disable Security Hub.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DisableSecurityHub.sample
     */
    override suspend fun disableSecurityHub(input: DisableSecurityHubRequest): DisableSecurityHubResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DisableSecurityHubOperationSerializer()
            deserializeWith = DisableSecurityHubOperationDeserializer()
            operationName = "DisableSecurityHub"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Disassociates the current Security Hub member account from the associated administrator account.
     *
     * This operation is only used by accounts that are not part of an organization. For organization accounts, only the administrator account can disassociate a member account.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DisassociateFromAdministratorAccount.sample
     */
    override suspend fun disassociateFromAdministratorAccount(input: DisassociateFromAdministratorAccountRequest): DisassociateFromAdministratorAccountResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DisassociateFromAdministratorAccountOperationSerializer()
            deserializeWith = DisassociateFromAdministratorAccountOperationDeserializer()
            operationName = "DisassociateFromAdministratorAccount"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * This method is deprecated. Instead, use `DisassociateFromAdministratorAccount`.
     *
     * The Security Hub console continues to use `DisassociateFromMasterAccount`. It will eventually change to use `DisassociateFromAdministratorAccount`. Any IAM policies that specifically control access to this function must continue to use `DisassociateFromMasterAccount`. You should also add `DisassociateFromAdministratorAccount` to your policies to ensure that the correct permissions are in place after the console begins to use `DisassociateFromAdministratorAccount`.
     *
     * Disassociates the current Security Hub member account from the associated administrator account.
     *
     * This operation is only used by accounts that are not part of an organization. For organization accounts, only the administrator account can disassociate a member account.
     */
    @Deprecated("This API has been deprecated, use DisassociateFromAdministratorAccount API instead.")
    override suspend fun disassociateFromMasterAccount(input: DisassociateFromMasterAccountRequest): DisassociateFromMasterAccountResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DisassociateFromMasterAccountOperationSerializer()
            deserializeWith = DisassociateFromMasterAccountOperationDeserializer()
            operationName = "DisassociateFromMasterAccount"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Disassociates the specified member accounts from the associated administrator account.
     *
     * Can be used to disassociate both accounts that are managed using Organizations and accounts that were invited manually.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.DisassociateMembers.sample
     */
    override suspend fun disassociateMembers(input: DisassociateMembersRequest): DisassociateMembersResponse {
        val op = SdkHttpOperation.build {
            serializeWith = DisassociateMembersOperationSerializer()
            deserializeWith = DisassociateMembersOperationDeserializer()
            operationName = "DisassociateMembers"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Enables the integration of a partner product with Security Hub. Integrated products send findings to Security Hub.
     *
     * When you enable a product integration, a permissions policy that grants permission for the product to send findings to Security Hub is applied.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.EnableImportFindingsForProduct.sample
     */
    override suspend fun enableImportFindingsForProduct(input: EnableImportFindingsForProductRequest): EnableImportFindingsForProductResponse {
        val op = SdkHttpOperation.build {
            serializeWith = EnableImportFindingsForProductOperationSerializer()
            deserializeWith = EnableImportFindingsForProductOperationDeserializer()
            operationName = "EnableImportFindingsForProduct"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Designates the Security Hub administrator account for an organization. Can only be called by the organization management account.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.EnableOrganizationAdminAccount.sample
     */
    override suspend fun enableOrganizationAdminAccount(input: EnableOrganizationAdminAccountRequest): EnableOrganizationAdminAccountResponse {
        val op = SdkHttpOperation.build {
            serializeWith = EnableOrganizationAdminAccountOperationSerializer()
            deserializeWith = EnableOrganizationAdminAccountOperationDeserializer()
            operationName = "EnableOrganizationAdminAccount"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Enables Security Hub for your account in the current Region or the Region you specify in the request.
     *
     * When you enable Security Hub, you grant to Security Hub the permissions necessary to gather findings from other services that are integrated with Security Hub.
     *
     * When you use the `EnableSecurityHub` operation to enable Security Hub, you also automatically enable the following standards:
     * + Center for Internet Security (CIS) Amazon Web Services Foundations Benchmark v1.2.0
     * + Amazon Web Services Foundational Security Best Practices
     *
     * Other standards are not automatically enabled.
     *
     * To opt out of automatically enabled standards, set `EnableDefaultStandards` to `false`.
     *
     * After you enable Security Hub, to enable a standard, use the `BatchEnableStandards` operation. To disable a standard, use the `BatchDisableStandards` operation.
     *
     * To learn more, see the [setup information](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-settingup.html) in the *Security Hub User Guide*.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.EnableSecurityHub.sample
     */
    override suspend fun enableSecurityHub(input: EnableSecurityHubRequest): EnableSecurityHubResponse {
        val op = SdkHttpOperation.build {
            serializeWith = EnableSecurityHubOperationSerializer()
            deserializeWith = EnableSecurityHubOperationDeserializer()
            operationName = "EnableSecurityHub"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Provides the details for the Security Hub administrator account for the current member account.
     *
     * Can be used by both member accounts that are managed using Organizations and accounts that were invited manually.
     */
    override suspend fun getAdministratorAccount(input: GetAdministratorAccountRequest): GetAdministratorAccountResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetAdministratorAccountOperationSerializer()
            deserializeWith = GetAdministratorAccountOperationDeserializer()
            operationName = "GetAdministratorAccount"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Provides information about a configuration policy. Only the Security Hub delegated administrator can invoke this operation from the home Region.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.GetConfigurationPolicy.sample
     */
    override suspend fun getConfigurationPolicy(input: GetConfigurationPolicyRequest): GetConfigurationPolicyResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetConfigurationPolicyOperationSerializer()
            deserializeWith = GetConfigurationPolicyOperationDeserializer()
            operationName = "GetConfigurationPolicy"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns the association between a configuration and a target account, organizational unit, or the root. The configuration can be a configuration policy or self-managed behavior. Only the Security Hub delegated administrator can invoke this operation from the home Region.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.GetConfigurationPolicyAssociation.sample
     */
    override suspend fun getConfigurationPolicyAssociation(input: GetConfigurationPolicyAssociationRequest): GetConfigurationPolicyAssociationResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetConfigurationPolicyAssociationOperationSerializer()
            deserializeWith = GetConfigurationPolicyAssociationOperationDeserializer()
            operationName = "GetConfigurationPolicyAssociation"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns a list of the standards that are currently enabled.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.GetEnabledStandards.sample
     */
    override suspend fun getEnabledStandards(input: GetEnabledStandardsRequest): GetEnabledStandardsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetEnabledStandardsOperationSerializer()
            deserializeWith = GetEnabledStandardsOperationDeserializer()
            operationName = "GetEnabledStandards"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns the current finding aggregation configuration.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.GetFindingAggregator.sample
     */
    override suspend fun getFindingAggregator(input: GetFindingAggregatorRequest): GetFindingAggregatorResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetFindingAggregatorOperationSerializer()
            deserializeWith = GetFindingAggregatorOperationDeserializer()
            operationName = "GetFindingAggregator"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns history for a Security Hub finding in the last 90 days. The history includes changes made to any fields in the Amazon Web Services Security Finding Format (ASFF).
     */
    override suspend fun getFindingHistory(input: GetFindingHistoryRequest): GetFindingHistoryResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetFindingHistoryOperationSerializer()
            deserializeWith = GetFindingHistoryOperationDeserializer()
            operationName = "GetFindingHistory"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns a list of findings that match the specified criteria.
     *
     * If finding aggregation is enabled, then when you call `GetFindings` from the aggregation Region, the results include all of the matching findings from both the aggregation Region and the linked Regions.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.GetFindings.sample
     */
    override suspend fun getFindings(input: GetFindingsRequest): GetFindingsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetFindingsOperationSerializer()
            deserializeWith = GetFindingsOperationDeserializer()
            operationName = "GetFindings"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Lists the results of the Security Hub insight specified by the insight ARN.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.GetInsightResults.sample
     */
    override suspend fun getInsightResults(input: GetInsightResultsRequest): GetInsightResultsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetInsightResultsOperationSerializer()
            deserializeWith = GetInsightResultsOperationDeserializer()
            operationName = "GetInsightResults"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Lists and describes insights for the specified insight ARNs.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.GetInsights.sample
     */
    override suspend fun getInsights(input: GetInsightsRequest): GetInsightsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetInsightsOperationSerializer()
            deserializeWith = GetInsightsOperationDeserializer()
            operationName = "GetInsights"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns the count of all Security Hub membership invitations that were sent to the current member account, not including the currently accepted invitation.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.GetInvitationsCount.sample
     */
    override suspend fun getInvitationsCount(input: GetInvitationsCountRequest): GetInvitationsCountResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetInvitationsCountOperationSerializer()
            deserializeWith = GetInvitationsCountOperationDeserializer()
            operationName = "GetInvitationsCount"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * This method is deprecated. Instead, use `GetAdministratorAccount`.
     *
     * The Security Hub console continues to use `GetMasterAccount`. It will eventually change to use `GetAdministratorAccount`. Any IAM policies that specifically control access to this function must continue to use `GetMasterAccount`. You should also add `GetAdministratorAccount` to your policies to ensure that the correct permissions are in place after the console begins to use `GetAdministratorAccount`.
     *
     * Provides the details for the Security Hub administrator account for the current member account.
     *
     * Can be used by both member accounts that are managed using Organizations and accounts that were invited manually.
     */
    @Deprecated("This API has been deprecated, use GetAdministratorAccount API instead.")
    override suspend fun getMasterAccount(input: GetMasterAccountRequest): GetMasterAccountResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetMasterAccountOperationSerializer()
            deserializeWith = GetMasterAccountOperationDeserializer()
            operationName = "GetMasterAccount"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns the details for the Security Hub member accounts for the specified account IDs.
     *
     * An administrator account can be either the delegated Security Hub administrator account for an organization or an administrator account that enabled Security Hub manually.
     *
     * The results include both member accounts that are managed using Organizations and accounts that were invited manually.
     */
    override suspend fun getMembers(input: GetMembersRequest): GetMembersResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetMembersOperationSerializer()
            deserializeWith = GetMembersOperationDeserializer()
            operationName = "GetMembers"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Retrieves the definition of a security control. The definition includes the control title, description, Region availability, parameter definitions, and other details.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.GetSecurityControlDefinition.sample
     */
    override suspend fun getSecurityControlDefinition(input: GetSecurityControlDefinitionRequest): GetSecurityControlDefinitionResponse {
        val op = SdkHttpOperation.build {
            serializeWith = GetSecurityControlDefinitionOperationSerializer()
            deserializeWith = GetSecurityControlDefinitionOperationDeserializer()
            operationName = "GetSecurityControlDefinition"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Invites other Amazon Web Services accounts to become member accounts for the Security Hub administrator account that the invitation is sent from.
     *
     * This operation is only used to invite accounts that do not belong to an organization. Organization accounts do not receive invitations.
     *
     * Before you can use this action to invite a member, you must first use the `CreateMembers` action to create the member account in Security Hub.
     *
     * When the account owner enables Security Hub and accepts the invitation to become a member account, the administrator account can view the findings generated from the member account.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.InviteMembers.sample
     */
    override suspend fun inviteMembers(input: InviteMembersRequest): InviteMembersResponse {
        val op = SdkHttpOperation.build {
            serializeWith = InviteMembersOperationSerializer()
            deserializeWith = InviteMembersOperationDeserializer()
            operationName = "InviteMembers"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * A list of automation rules and their metadata for the calling account.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.ListAutomationRules.sample
     */
    override suspend fun listAutomationRules(input: ListAutomationRulesRequest): ListAutomationRulesResponse {
        val op = SdkHttpOperation.build {
            serializeWith = ListAutomationRulesOperationSerializer()
            deserializeWith = ListAutomationRulesOperationDeserializer()
            operationName = "ListAutomationRules"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Lists the configuration policies that the Security Hub delegated administrator has created for your organization. Only the delegated administrator can invoke this operation from the home Region.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.ListConfigurationPolicies.sample
     */
    override suspend fun listConfigurationPolicies(input: ListConfigurationPoliciesRequest): ListConfigurationPoliciesResponse {
        val op = SdkHttpOperation.build {
            serializeWith = ListConfigurationPoliciesOperationSerializer()
            deserializeWith = ListConfigurationPoliciesOperationDeserializer()
            operationName = "ListConfigurationPolicies"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Provides information about the associations for your configuration policies and self-managed behavior. Only the Security Hub delegated administrator can invoke this operation from the home Region.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.ListConfigurationPolicyAssociations.sample
     */
    override suspend fun listConfigurationPolicyAssociations(input: ListConfigurationPolicyAssociationsRequest): ListConfigurationPolicyAssociationsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = ListConfigurationPolicyAssociationsOperationSerializer()
            deserializeWith = ListConfigurationPolicyAssociationsOperationDeserializer()
            operationName = "ListConfigurationPolicyAssociations"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Lists all findings-generating solutions (products) that you are subscribed to receive findings from in Security Hub.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.ListEnabledProductsForImport.sample
     */
    override suspend fun listEnabledProductsForImport(input: ListEnabledProductsForImportRequest): ListEnabledProductsForImportResponse {
        val op = SdkHttpOperation.build {
            serializeWith = ListEnabledProductsForImportOperationSerializer()
            deserializeWith = ListEnabledProductsForImportOperationDeserializer()
            operationName = "ListEnabledProductsForImport"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * If finding aggregation is enabled, then `ListFindingAggregators` returns the ARN of the finding aggregator. You can run this operation from any Region.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.ListFindingAggregators.sample
     */
    override suspend fun listFindingAggregators(input: ListFindingAggregatorsRequest): ListFindingAggregatorsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = ListFindingAggregatorsOperationSerializer()
            deserializeWith = ListFindingAggregatorsOperationDeserializer()
            operationName = "ListFindingAggregators"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Lists all Security Hub membership invitations that were sent to the current Amazon Web Services account.
     *
     * This operation is only used by accounts that are managed by invitation. Accounts that are managed using the integration with Organizations do not receive invitations.
     */
    override suspend fun listInvitations(input: ListInvitationsRequest): ListInvitationsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = ListInvitationsOperationSerializer()
            deserializeWith = ListInvitationsOperationDeserializer()
            operationName = "ListInvitations"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Lists details about all member accounts for the current Security Hub administrator account.
     *
     * The results include both member accounts that belong to an organization and member accounts that were invited manually.
     */
    override suspend fun listMembers(input: ListMembersRequest): ListMembersResponse {
        val op = SdkHttpOperation.build {
            serializeWith = ListMembersOperationSerializer()
            deserializeWith = ListMembersOperationDeserializer()
            operationName = "ListMembers"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Lists the Security Hub administrator accounts. Can only be called by the organization management account.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.ListOrganizationAdminAccounts.sample
     */
    override suspend fun listOrganizationAdminAccounts(input: ListOrganizationAdminAccountsRequest): ListOrganizationAdminAccountsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = ListOrganizationAdminAccountsOperationSerializer()
            deserializeWith = ListOrganizationAdminAccountsOperationDeserializer()
            operationName = "ListOrganizationAdminAccounts"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Lists all of the security controls that apply to a specified standard.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.ListSecurityControlDefinitions.sample
     */
    override suspend fun listSecurityControlDefinitions(input: ListSecurityControlDefinitionsRequest): ListSecurityControlDefinitionsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = ListSecurityControlDefinitionsOperationSerializer()
            deserializeWith = ListSecurityControlDefinitionsOperationDeserializer()
            operationName = "ListSecurityControlDefinitions"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Specifies whether a control is currently enabled or disabled in each enabled standard in the calling account.
     */
    override suspend fun listStandardsControlAssociations(input: ListStandardsControlAssociationsRequest): ListStandardsControlAssociationsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = ListStandardsControlAssociationsOperationSerializer()
            deserializeWith = ListStandardsControlAssociationsOperationDeserializer()
            operationName = "ListStandardsControlAssociations"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Returns a list of tags associated with a resource.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.ListTagsForResource.sample
     */
    override suspend fun listTagsForResource(input: ListTagsForResourceRequest): ListTagsForResourceResponse {
        val op = SdkHttpOperation.build {
            serializeWith = ListTagsForResourceOperationSerializer()
            deserializeWith = ListTagsForResourceOperationDeserializer()
            operationName = "ListTagsForResource"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Associates a target account, organizational unit, or the root with a specified configuration. The target can be associated with a configuration policy or self-managed behavior. Only the Security Hub delegated administrator can invoke this operation from the home Region.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.StartConfigurationPolicyAssociation.sample
     */
    override suspend fun startConfigurationPolicyAssociation(input: StartConfigurationPolicyAssociationRequest): StartConfigurationPolicyAssociationResponse {
        val op = SdkHttpOperation.build {
            serializeWith = StartConfigurationPolicyAssociationOperationSerializer()
            deserializeWith = StartConfigurationPolicyAssociationOperationDeserializer()
            operationName = "StartConfigurationPolicyAssociation"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Disassociates a target account, organizational unit, or the root from a specified configuration. When you disassociate a configuration from its target, the target inherits the configuration of the closest parent. If there’s no configuration to inherit, the target retains its settings but becomes a self-managed account. A target can be disassociated from a configuration policy or self-managed behavior. Only the Security Hub delegated administrator can invoke this operation from the home Region.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.StartConfigurationPolicyDisassociation.sample
     */
    override suspend fun startConfigurationPolicyDisassociation(input: StartConfigurationPolicyDisassociationRequest): StartConfigurationPolicyDisassociationResponse {
        val op = SdkHttpOperation.build {
            serializeWith = StartConfigurationPolicyDisassociationOperationSerializer()
            deserializeWith = StartConfigurationPolicyDisassociationOperationDeserializer()
            operationName = "StartConfigurationPolicyDisassociation"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Adds one or more tags to a resource.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.TagResource.sample
     */
    override suspend fun tagResource(input: TagResourceRequest): TagResourceResponse {
        val op = SdkHttpOperation.build {
            serializeWith = TagResourceOperationSerializer()
            deserializeWith = TagResourceOperationDeserializer()
            operationName = "TagResource"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Removes one or more tags from a resource.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.UntagResource.sample
     */
    override suspend fun untagResource(input: UntagResourceRequest): UntagResourceResponse {
        val op = SdkHttpOperation.build {
            serializeWith = UntagResourceOperationSerializer()
            deserializeWith = UntagResourceOperationDeserializer()
            operationName = "UntagResource"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Updates the name and description of a custom action target in Security Hub.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.UpdateActionTarget.sample
     */
    override suspend fun updateActionTarget(input: UpdateActionTargetRequest): UpdateActionTargetResponse {
        val op = SdkHttpOperation.build {
            serializeWith = UpdateActionTargetOperationSerializer()
            deserializeWith = UpdateActionTargetOperationDeserializer()
            operationName = "UpdateActionTarget"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Updates a configuration policy. Only the Security Hub delegated administrator can invoke this operation from the home Region.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.UpdateConfigurationPolicy.sample
     */
    override suspend fun updateConfigurationPolicy(input: UpdateConfigurationPolicyRequest): UpdateConfigurationPolicyResponse {
        val op = SdkHttpOperation.build {
            serializeWith = UpdateConfigurationPolicyOperationSerializer()
            deserializeWith = UpdateConfigurationPolicyOperationDeserializer()
            operationName = "UpdateConfigurationPolicy"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Updates the finding aggregation configuration. Used to update the Region linking mode and the list of included or excluded Regions. You cannot use `UpdateFindingAggregator` to change the aggregation Region.
     *
     * You must run `UpdateFindingAggregator` from the current aggregation Region.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.UpdateFindingAggregator.sample
     */
    override suspend fun updateFindingAggregator(input: UpdateFindingAggregatorRequest): UpdateFindingAggregatorResponse {
        val op = SdkHttpOperation.build {
            serializeWith = UpdateFindingAggregatorOperationSerializer()
            deserializeWith = UpdateFindingAggregatorOperationDeserializer()
            operationName = "UpdateFindingAggregator"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * `UpdateFindings` is a deprecated operation. Instead of `UpdateFindings`, use the `BatchUpdateFindings` operation.
     *
     * The `UpdateFindings` operation updates the `Note` and `RecordState` of the Security Hub aggregated findings that the filter attributes specify. Any member account that can view the finding can also see the update to the finding.
     *
     * Finding updates made with `UpdateFindings` aren't persisted if the same finding is later updated by the finding provider through the `BatchImportFindings` operation. In addition, Security Hub doesn't record updates made with `UpdateFindings` in the finding history.
     */
    override suspend fun updateFindings(input: UpdateFindingsRequest): UpdateFindingsResponse {
        val op = SdkHttpOperation.build {
            serializeWith = UpdateFindingsOperationSerializer()
            deserializeWith = UpdateFindingsOperationDeserializer()
            operationName = "UpdateFindings"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Updates the Security Hub insight identified by the specified insight ARN.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.UpdateInsight.sample
     */
    override suspend fun updateInsight(input: UpdateInsightRequest): UpdateInsightResponse {
        val op = SdkHttpOperation.build {
            serializeWith = UpdateInsightOperationSerializer()
            deserializeWith = UpdateInsightOperationDeserializer()
            operationName = "UpdateInsight"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Updates the configuration of your organization in Security Hub. Only the Security Hub administrator account can invoke this operation.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.UpdateOrganizationConfiguration.sample
     */
    override suspend fun updateOrganizationConfiguration(input: UpdateOrganizationConfigurationRequest): UpdateOrganizationConfigurationResponse {
        val op = SdkHttpOperation.build {
            serializeWith = UpdateOrganizationConfigurationOperationSerializer()
            deserializeWith = UpdateOrganizationConfigurationOperationDeserializer()
            operationName = "UpdateOrganizationConfiguration"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Updates the properties of a security control.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.UpdateSecurityControl.sample
     */
    override suspend fun updateSecurityControl(input: UpdateSecurityControlRequest): UpdateSecurityControlResponse {
        val op = SdkHttpOperation.build {
            serializeWith = UpdateSecurityControlOperationSerializer()
            deserializeWith = UpdateSecurityControlOperationDeserializer()
            operationName = "UpdateSecurityControl"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Updates configuration options for Security Hub.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.UpdateSecurityHubConfiguration.sample
     */
    override suspend fun updateSecurityHubConfiguration(input: UpdateSecurityHubConfigurationRequest): UpdateSecurityHubConfigurationResponse {
        val op = SdkHttpOperation.build {
            serializeWith = UpdateSecurityHubConfigurationOperationSerializer()
            deserializeWith = UpdateSecurityHubConfigurationOperationDeserializer()
            operationName = "UpdateSecurityHubConfiguration"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    /**
     * Used to control whether an individual security standard control is enabled or disabled.
     *
     * @sample aws.sdk.kotlin.services.securityhub.samples.UpdateStandardsControl.sample
     */
    override suspend fun updateStandardsControl(input: UpdateStandardsControlRequest): UpdateStandardsControlResponse {
        val op = SdkHttpOperation.build {
            serializeWith = UpdateStandardsControlOperationSerializer()
            deserializeWith = UpdateStandardsControlOperationDeserializer()
            operationName = "UpdateStandardsControl"
            serviceName = ServiceId
            telemetry {
                provider = config.telemetryProvider
                scope = telemetryScope
                metrics = opMetrics
                attributes = attributesOf {
                    "rpc.system" to "aws-api"
                }
            }
            execution.auth = OperationAuthConfig(authSchemeAdapter, configuredAuthSchemes, identityProviderConfig)
            execution.endpointResolver = EndpointResolverAdapter(config)
            execution.retryStrategy = config.retryStrategy
            execution.retryPolicy = config.retryPolicy
        }
        mergeServiceDefaults(op.context)
        op.install(AwsRetryHeaderMiddleware())
        op.interceptors.add(AwsSpanInterceptor)
        op.interceptors.add(BusinessMetricsInterceptor())
        op.install(UserAgent(awsUserAgentMetadata))
        op.install(RecursionDetection())
        op.interceptors.addAll(config.interceptors)
        return op.roundTrip(client, input)
    }

    override fun close() {
        managedResources.unshareAll()
    }

    /**
     * merge the defaults configured for the service into the execution context before firing off a request
     */
    private fun mergeServiceDefaults(ctx: ExecutionContext) {
        ctx.putIfAbsent(SdkClientOption.ClientName, config.clientName)
        ctx.putIfAbsent(SdkClientOption.LogMode, config.logMode)
        ctx.putIfAbsentNotNull(AwsAttributes.Region, config.region)
        ctx.putIfAbsentNotNull(AwsSigningAttributes.SigningRegion, config.region)
        ctx.putIfAbsent(AwsSigningAttributes.SigningService, "securityhub")
        ctx.putIfAbsent(AwsSigningAttributes.CredentialsProvider, config.credentialsProvider)
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy