packages feed

amazonka-securitylake-2.0: gen/Amazonka/SecurityLake/CreateSubscriber.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.SecurityLake.CreateSubscriber
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a subscription permission for accounts that are already enabled
-- in Amazon Security Lake. You can create a subscriber with access to data
-- in the current Amazon Web Services Region.
module Amazonka.SecurityLake.CreateSubscriber
  ( -- * Creating a Request
    CreateSubscriber (..),
    newCreateSubscriber,

    -- * Request Lenses
    createSubscriber_accessTypes,
    createSubscriber_subscriberDescription,
    createSubscriber_accountId,
    createSubscriber_externalId,
    createSubscriber_sourceTypes,
    createSubscriber_subscriberName,

    -- * Destructuring the Response
    CreateSubscriberResponse (..),
    newCreateSubscriberResponse,

    -- * Response Lenses
    createSubscriberResponse_roleArn,
    createSubscriberResponse_s3BucketArn,
    createSubscriberResponse_snsArn,
    createSubscriberResponse_httpStatus,
    createSubscriberResponse_subscriptionId,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.SecurityLake.Types

-- | /See:/ 'newCreateSubscriber' smart constructor.
data CreateSubscriber = CreateSubscriber'
  { -- | The Amazon S3 or Lake Formation access type.
    accessTypes :: Prelude.Maybe [AccessType],
    -- | The description for your subscriber account in Security Lake.
    subscriberDescription :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Web Services account ID used to access your data.
    accountId :: Prelude.Text,
    -- | The external ID of the subscriber. This lets the user that is assuming
    -- the role assert the circumstances in which they are operating. It also
    -- provides a way for the account owner to permit the role to be assumed
    -- only under specific circumstances.
    externalId :: Prelude.Text,
    -- | The supported Amazon Web Services from which logs and events are
    -- collected. Security Lake supports log and event collection for natively
    -- supported Amazon Web Services.
    sourceTypes :: [SourceType],
    -- | The name of your Security Lake subscriber account.
    subscriberName :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateSubscriber' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'accessTypes', 'createSubscriber_accessTypes' - The Amazon S3 or Lake Formation access type.
--
-- 'subscriberDescription', 'createSubscriber_subscriberDescription' - The description for your subscriber account in Security Lake.
--
-- 'accountId', 'createSubscriber_accountId' - The Amazon Web Services account ID used to access your data.
--
-- 'externalId', 'createSubscriber_externalId' - The external ID of the subscriber. This lets the user that is assuming
-- the role assert the circumstances in which they are operating. It also
-- provides a way for the account owner to permit the role to be assumed
-- only under specific circumstances.
--
-- 'sourceTypes', 'createSubscriber_sourceTypes' - The supported Amazon Web Services from which logs and events are
-- collected. Security Lake supports log and event collection for natively
-- supported Amazon Web Services.
--
-- 'subscriberName', 'createSubscriber_subscriberName' - The name of your Security Lake subscriber account.
newCreateSubscriber ::
  -- | 'accountId'
  Prelude.Text ->
  -- | 'externalId'
  Prelude.Text ->
  -- | 'subscriberName'
  Prelude.Text ->
  CreateSubscriber
newCreateSubscriber
  pAccountId_
  pExternalId_
  pSubscriberName_ =
    CreateSubscriber'
      { accessTypes = Prelude.Nothing,
        subscriberDescription = Prelude.Nothing,
        accountId = pAccountId_,
        externalId = pExternalId_,
        sourceTypes = Prelude.mempty,
        subscriberName = pSubscriberName_
      }

-- | The Amazon S3 or Lake Formation access type.
createSubscriber_accessTypes :: Lens.Lens' CreateSubscriber (Prelude.Maybe [AccessType])
createSubscriber_accessTypes = Lens.lens (\CreateSubscriber' {accessTypes} -> accessTypes) (\s@CreateSubscriber' {} a -> s {accessTypes = a} :: CreateSubscriber) Prelude.. Lens.mapping Lens.coerced

-- | The description for your subscriber account in Security Lake.
createSubscriber_subscriberDescription :: Lens.Lens' CreateSubscriber (Prelude.Maybe Prelude.Text)
createSubscriber_subscriberDescription = Lens.lens (\CreateSubscriber' {subscriberDescription} -> subscriberDescription) (\s@CreateSubscriber' {} a -> s {subscriberDescription = a} :: CreateSubscriber)

-- | The Amazon Web Services account ID used to access your data.
createSubscriber_accountId :: Lens.Lens' CreateSubscriber Prelude.Text
createSubscriber_accountId = Lens.lens (\CreateSubscriber' {accountId} -> accountId) (\s@CreateSubscriber' {} a -> s {accountId = a} :: CreateSubscriber)

-- | The external ID of the subscriber. This lets the user that is assuming
-- the role assert the circumstances in which they are operating. It also
-- provides a way for the account owner to permit the role to be assumed
-- only under specific circumstances.
createSubscriber_externalId :: Lens.Lens' CreateSubscriber Prelude.Text
createSubscriber_externalId = Lens.lens (\CreateSubscriber' {externalId} -> externalId) (\s@CreateSubscriber' {} a -> s {externalId = a} :: CreateSubscriber)

-- | The supported Amazon Web Services from which logs and events are
-- collected. Security Lake supports log and event collection for natively
-- supported Amazon Web Services.
createSubscriber_sourceTypes :: Lens.Lens' CreateSubscriber [SourceType]
createSubscriber_sourceTypes = Lens.lens (\CreateSubscriber' {sourceTypes} -> sourceTypes) (\s@CreateSubscriber' {} a -> s {sourceTypes = a} :: CreateSubscriber) Prelude.. Lens.coerced

-- | The name of your Security Lake subscriber account.
createSubscriber_subscriberName :: Lens.Lens' CreateSubscriber Prelude.Text
createSubscriber_subscriberName = Lens.lens (\CreateSubscriber' {subscriberName} -> subscriberName) (\s@CreateSubscriber' {} a -> s {subscriberName = a} :: CreateSubscriber)

instance Core.AWSRequest CreateSubscriber where
  type
    AWSResponse CreateSubscriber =
      CreateSubscriberResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          CreateSubscriberResponse'
            Prelude.<$> (x Data..?> "roleArn")
            Prelude.<*> (x Data..?> "s3BucketArn")
            Prelude.<*> (x Data..?> "snsArn")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
            Prelude.<*> (x Data..:> "subscriptionId")
      )

instance Prelude.Hashable CreateSubscriber where
  hashWithSalt _salt CreateSubscriber' {..} =
    _salt
      `Prelude.hashWithSalt` accessTypes
      `Prelude.hashWithSalt` subscriberDescription
      `Prelude.hashWithSalt` accountId
      `Prelude.hashWithSalt` externalId
      `Prelude.hashWithSalt` sourceTypes
      `Prelude.hashWithSalt` subscriberName

instance Prelude.NFData CreateSubscriber where
  rnf CreateSubscriber' {..} =
    Prelude.rnf accessTypes
      `Prelude.seq` Prelude.rnf subscriberDescription
      `Prelude.seq` Prelude.rnf accountId
      `Prelude.seq` Prelude.rnf externalId
      `Prelude.seq` Prelude.rnf sourceTypes
      `Prelude.seq` Prelude.rnf subscriberName

instance Data.ToHeaders CreateSubscriber where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateSubscriber where
  toJSON CreateSubscriber' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("accessTypes" Data..=) Prelude.<$> accessTypes,
            ("subscriberDescription" Data..=)
              Prelude.<$> subscriberDescription,
            Prelude.Just ("accountId" Data..= accountId),
            Prelude.Just ("externalId" Data..= externalId),
            Prelude.Just ("sourceTypes" Data..= sourceTypes),
            Prelude.Just
              ("subscriberName" Data..= subscriberName)
          ]
      )

instance Data.ToPath CreateSubscriber where
  toPath = Prelude.const "/v1/subscribers"

instance Data.ToQuery CreateSubscriber where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newCreateSubscriberResponse' smart constructor.
data CreateSubscriberResponse = CreateSubscriberResponse'
  { -- | The Amazon Resource Name (ARN) created by you to provide to the
    -- subscriber. For more information about ARNs and how to use them in
    -- policies, see
    -- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html IAM identifiers in the Identity and Access Management (IAM) User Guide>.
    -- .
    roleArn :: Prelude.Maybe Prelude.Text,
    -- | The ARN for the Amazon S3 bucket.
    s3BucketArn :: Prelude.Maybe Prelude.Text,
    -- | The ARN for the Amazon Simple Notification Service.
    snsArn :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    httpStatus :: Prelude.Int,
    -- | The @subscriptionId@ created by the @CreateSubscriber@ API call.
    subscriptionId :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateSubscriberResponse' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'roleArn', 'createSubscriberResponse_roleArn' - The Amazon Resource Name (ARN) created by you to provide to the
-- subscriber. For more information about ARNs and how to use them in
-- policies, see
-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html IAM identifiers in the Identity and Access Management (IAM) User Guide>.
-- .
--
-- 's3BucketArn', 'createSubscriberResponse_s3BucketArn' - The ARN for the Amazon S3 bucket.
--
-- 'snsArn', 'createSubscriberResponse_snsArn' - The ARN for the Amazon Simple Notification Service.
--
-- 'httpStatus', 'createSubscriberResponse_httpStatus' - The response's http status code.
--
-- 'subscriptionId', 'createSubscriberResponse_subscriptionId' - The @subscriptionId@ created by the @CreateSubscriber@ API call.
newCreateSubscriberResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'subscriptionId'
  Prelude.Text ->
  CreateSubscriberResponse
newCreateSubscriberResponse
  pHttpStatus_
  pSubscriptionId_ =
    CreateSubscriberResponse'
      { roleArn =
          Prelude.Nothing,
        s3BucketArn = Prelude.Nothing,
        snsArn = Prelude.Nothing,
        httpStatus = pHttpStatus_,
        subscriptionId = pSubscriptionId_
      }

-- | The Amazon Resource Name (ARN) created by you to provide to the
-- subscriber. For more information about ARNs and how to use them in
-- policies, see
-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html IAM identifiers in the Identity and Access Management (IAM) User Guide>.
-- .
createSubscriberResponse_roleArn :: Lens.Lens' CreateSubscriberResponse (Prelude.Maybe Prelude.Text)
createSubscriberResponse_roleArn = Lens.lens (\CreateSubscriberResponse' {roleArn} -> roleArn) (\s@CreateSubscriberResponse' {} a -> s {roleArn = a} :: CreateSubscriberResponse)

-- | The ARN for the Amazon S3 bucket.
createSubscriberResponse_s3BucketArn :: Lens.Lens' CreateSubscriberResponse (Prelude.Maybe Prelude.Text)
createSubscriberResponse_s3BucketArn = Lens.lens (\CreateSubscriberResponse' {s3BucketArn} -> s3BucketArn) (\s@CreateSubscriberResponse' {} a -> s {s3BucketArn = a} :: CreateSubscriberResponse)

-- | The ARN for the Amazon Simple Notification Service.
createSubscriberResponse_snsArn :: Lens.Lens' CreateSubscriberResponse (Prelude.Maybe Prelude.Text)
createSubscriberResponse_snsArn = Lens.lens (\CreateSubscriberResponse' {snsArn} -> snsArn) (\s@CreateSubscriberResponse' {} a -> s {snsArn = a} :: CreateSubscriberResponse)

-- | The response's http status code.
createSubscriberResponse_httpStatus :: Lens.Lens' CreateSubscriberResponse Prelude.Int
createSubscriberResponse_httpStatus = Lens.lens (\CreateSubscriberResponse' {httpStatus} -> httpStatus) (\s@CreateSubscriberResponse' {} a -> s {httpStatus = a} :: CreateSubscriberResponse)

-- | The @subscriptionId@ created by the @CreateSubscriber@ API call.
createSubscriberResponse_subscriptionId :: Lens.Lens' CreateSubscriberResponse Prelude.Text
createSubscriberResponse_subscriptionId = Lens.lens (\CreateSubscriberResponse' {subscriptionId} -> subscriptionId) (\s@CreateSubscriberResponse' {} a -> s {subscriptionId = a} :: CreateSubscriberResponse)

instance Prelude.NFData CreateSubscriberResponse where
  rnf CreateSubscriberResponse' {..} =
    Prelude.rnf roleArn
      `Prelude.seq` Prelude.rnf s3BucketArn
      `Prelude.seq` Prelude.rnf snsArn
      `Prelude.seq` Prelude.rnf httpStatus
      `Prelude.seq` Prelude.rnf subscriptionId