packages feed

amazonka-securityhub-2.0: gen/Amazonka/SecurityHub/Types/AwsIamAccessKeyDetails.hs

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

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

-- |
-- Module      : Amazonka.SecurityHub.Types.AwsIamAccessKeyDetails
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.SecurityHub.Types.AwsIamAccessKeyDetails 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 Amazonka.SecurityHub.Types.AwsIamAccessKeySessionContext
import Amazonka.SecurityHub.Types.AwsIamAccessKeyStatus

-- | IAM access key details related to a finding.
--
-- /See:/ 'newAwsIamAccessKeyDetails' smart constructor.
data AwsIamAccessKeyDetails = AwsIamAccessKeyDetails'
  { -- | The identifier of the access key.
    accessKeyId :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Web Services account ID of the account for the key.
    accountId :: Prelude.Maybe Prelude.Text,
    -- | Indicates when the IAM access key was created.
    --
    -- Uses the @date-time@ format specified in
    -- <https://tools.ietf.org/html/rfc3339#section-5.6 RFC 3339 section 5.6, Internet Date\/Time Format>.
    -- The value cannot contain spaces. For example,
    -- @2020-03-22T13:22:13.933Z@.
    createdAt :: Prelude.Maybe Prelude.Text,
    -- | The ID of the principal associated with an access key.
    principalId :: Prelude.Maybe Prelude.Text,
    -- | The name of the principal.
    principalName :: Prelude.Maybe Prelude.Text,
    -- | The type of principal associated with an access key.
    principalType :: Prelude.Maybe Prelude.Text,
    -- | Information about the session that the key was used for.
    sessionContext :: Prelude.Maybe AwsIamAccessKeySessionContext,
    -- | The status of the IAM access key related to a finding.
    status :: Prelude.Maybe AwsIamAccessKeyStatus,
    -- | The user associated with the IAM access key related to a finding.
    --
    -- The @UserName@ parameter has been replaced with the @PrincipalName@
    -- parameter because access keys can also be assigned to principals that
    -- are not IAM users.
    userName :: Prelude.Maybe Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'AwsIamAccessKeyDetails' 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:
--
-- 'accessKeyId', 'awsIamAccessKeyDetails_accessKeyId' - The identifier of the access key.
--
-- 'accountId', 'awsIamAccessKeyDetails_accountId' - The Amazon Web Services account ID of the account for the key.
--
-- 'createdAt', 'awsIamAccessKeyDetails_createdAt' - Indicates when the IAM access key was created.
--
-- Uses the @date-time@ format specified in
-- <https://tools.ietf.org/html/rfc3339#section-5.6 RFC 3339 section 5.6, Internet Date\/Time Format>.
-- The value cannot contain spaces. For example,
-- @2020-03-22T13:22:13.933Z@.
--
-- 'principalId', 'awsIamAccessKeyDetails_principalId' - The ID of the principal associated with an access key.
--
-- 'principalName', 'awsIamAccessKeyDetails_principalName' - The name of the principal.
--
-- 'principalType', 'awsIamAccessKeyDetails_principalType' - The type of principal associated with an access key.
--
-- 'sessionContext', 'awsIamAccessKeyDetails_sessionContext' - Information about the session that the key was used for.
--
-- 'status', 'awsIamAccessKeyDetails_status' - The status of the IAM access key related to a finding.
--
-- 'userName', 'awsIamAccessKeyDetails_userName' - The user associated with the IAM access key related to a finding.
--
-- The @UserName@ parameter has been replaced with the @PrincipalName@
-- parameter because access keys can also be assigned to principals that
-- are not IAM users.
newAwsIamAccessKeyDetails ::
  AwsIamAccessKeyDetails
newAwsIamAccessKeyDetails =
  AwsIamAccessKeyDetails'
    { accessKeyId =
        Prelude.Nothing,
      accountId = Prelude.Nothing,
      createdAt = Prelude.Nothing,
      principalId = Prelude.Nothing,
      principalName = Prelude.Nothing,
      principalType = Prelude.Nothing,
      sessionContext = Prelude.Nothing,
      status = Prelude.Nothing,
      userName = Prelude.Nothing
    }

-- | The identifier of the access key.
awsIamAccessKeyDetails_accessKeyId :: Lens.Lens' AwsIamAccessKeyDetails (Prelude.Maybe Prelude.Text)
awsIamAccessKeyDetails_accessKeyId = Lens.lens (\AwsIamAccessKeyDetails' {accessKeyId} -> accessKeyId) (\s@AwsIamAccessKeyDetails' {} a -> s {accessKeyId = a} :: AwsIamAccessKeyDetails)

-- | The Amazon Web Services account ID of the account for the key.
awsIamAccessKeyDetails_accountId :: Lens.Lens' AwsIamAccessKeyDetails (Prelude.Maybe Prelude.Text)
awsIamAccessKeyDetails_accountId = Lens.lens (\AwsIamAccessKeyDetails' {accountId} -> accountId) (\s@AwsIamAccessKeyDetails' {} a -> s {accountId = a} :: AwsIamAccessKeyDetails)

-- | Indicates when the IAM access key was created.
--
-- Uses the @date-time@ format specified in
-- <https://tools.ietf.org/html/rfc3339#section-5.6 RFC 3339 section 5.6, Internet Date\/Time Format>.
-- The value cannot contain spaces. For example,
-- @2020-03-22T13:22:13.933Z@.
awsIamAccessKeyDetails_createdAt :: Lens.Lens' AwsIamAccessKeyDetails (Prelude.Maybe Prelude.Text)
awsIamAccessKeyDetails_createdAt = Lens.lens (\AwsIamAccessKeyDetails' {createdAt} -> createdAt) (\s@AwsIamAccessKeyDetails' {} a -> s {createdAt = a} :: AwsIamAccessKeyDetails)

-- | The ID of the principal associated with an access key.
awsIamAccessKeyDetails_principalId :: Lens.Lens' AwsIamAccessKeyDetails (Prelude.Maybe Prelude.Text)
awsIamAccessKeyDetails_principalId = Lens.lens (\AwsIamAccessKeyDetails' {principalId} -> principalId) (\s@AwsIamAccessKeyDetails' {} a -> s {principalId = a} :: AwsIamAccessKeyDetails)

-- | The name of the principal.
awsIamAccessKeyDetails_principalName :: Lens.Lens' AwsIamAccessKeyDetails (Prelude.Maybe Prelude.Text)
awsIamAccessKeyDetails_principalName = Lens.lens (\AwsIamAccessKeyDetails' {principalName} -> principalName) (\s@AwsIamAccessKeyDetails' {} a -> s {principalName = a} :: AwsIamAccessKeyDetails)

-- | The type of principal associated with an access key.
awsIamAccessKeyDetails_principalType :: Lens.Lens' AwsIamAccessKeyDetails (Prelude.Maybe Prelude.Text)
awsIamAccessKeyDetails_principalType = Lens.lens (\AwsIamAccessKeyDetails' {principalType} -> principalType) (\s@AwsIamAccessKeyDetails' {} a -> s {principalType = a} :: AwsIamAccessKeyDetails)

-- | Information about the session that the key was used for.
awsIamAccessKeyDetails_sessionContext :: Lens.Lens' AwsIamAccessKeyDetails (Prelude.Maybe AwsIamAccessKeySessionContext)
awsIamAccessKeyDetails_sessionContext = Lens.lens (\AwsIamAccessKeyDetails' {sessionContext} -> sessionContext) (\s@AwsIamAccessKeyDetails' {} a -> s {sessionContext = a} :: AwsIamAccessKeyDetails)

-- | The status of the IAM access key related to a finding.
awsIamAccessKeyDetails_status :: Lens.Lens' AwsIamAccessKeyDetails (Prelude.Maybe AwsIamAccessKeyStatus)
awsIamAccessKeyDetails_status = Lens.lens (\AwsIamAccessKeyDetails' {status} -> status) (\s@AwsIamAccessKeyDetails' {} a -> s {status = a} :: AwsIamAccessKeyDetails)

-- | The user associated with the IAM access key related to a finding.
--
-- The @UserName@ parameter has been replaced with the @PrincipalName@
-- parameter because access keys can also be assigned to principals that
-- are not IAM users.
awsIamAccessKeyDetails_userName :: Lens.Lens' AwsIamAccessKeyDetails (Prelude.Maybe Prelude.Text)
awsIamAccessKeyDetails_userName = Lens.lens (\AwsIamAccessKeyDetails' {userName} -> userName) (\s@AwsIamAccessKeyDetails' {} a -> s {userName = a} :: AwsIamAccessKeyDetails)

instance Data.FromJSON AwsIamAccessKeyDetails where
  parseJSON =
    Data.withObject
      "AwsIamAccessKeyDetails"
      ( \x ->
          AwsIamAccessKeyDetails'
            Prelude.<$> (x Data..:? "AccessKeyId")
            Prelude.<*> (x Data..:? "AccountId")
            Prelude.<*> (x Data..:? "CreatedAt")
            Prelude.<*> (x Data..:? "PrincipalId")
            Prelude.<*> (x Data..:? "PrincipalName")
            Prelude.<*> (x Data..:? "PrincipalType")
            Prelude.<*> (x Data..:? "SessionContext")
            Prelude.<*> (x Data..:? "Status")
            Prelude.<*> (x Data..:? "UserName")
      )

instance Prelude.Hashable AwsIamAccessKeyDetails where
  hashWithSalt _salt AwsIamAccessKeyDetails' {..} =
    _salt
      `Prelude.hashWithSalt` accessKeyId
      `Prelude.hashWithSalt` accountId
      `Prelude.hashWithSalt` createdAt
      `Prelude.hashWithSalt` principalId
      `Prelude.hashWithSalt` principalName
      `Prelude.hashWithSalt` principalType
      `Prelude.hashWithSalt` sessionContext
      `Prelude.hashWithSalt` status
      `Prelude.hashWithSalt` userName

instance Prelude.NFData AwsIamAccessKeyDetails where
  rnf AwsIamAccessKeyDetails' {..} =
    Prelude.rnf accessKeyId
      `Prelude.seq` Prelude.rnf accountId
      `Prelude.seq` Prelude.rnf createdAt
      `Prelude.seq` Prelude.rnf principalId
      `Prelude.seq` Prelude.rnf principalName
      `Prelude.seq` Prelude.rnf principalType
      `Prelude.seq` Prelude.rnf sessionContext
      `Prelude.seq` Prelude.rnf status
      `Prelude.seq` Prelude.rnf userName

instance Data.ToJSON AwsIamAccessKeyDetails where
  toJSON AwsIamAccessKeyDetails' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("AccessKeyId" Data..=) Prelude.<$> accessKeyId,
            ("AccountId" Data..=) Prelude.<$> accountId,
            ("CreatedAt" Data..=) Prelude.<$> createdAt,
            ("PrincipalId" Data..=) Prelude.<$> principalId,
            ("PrincipalName" Data..=) Prelude.<$> principalName,
            ("PrincipalType" Data..=) Prelude.<$> principalType,
            ("SessionContext" Data..=)
              Prelude.<$> sessionContext,
            ("Status" Data..=) Prelude.<$> status,
            ("UserName" Data..=) Prelude.<$> userName
          ]
      )