Como configurar eventos do Cloudwatch para serem acionados em chamadas de API IAM?

Como configurar eventos do Cloudwatch para serem acionados em chamadas de API IAM?

Estou tendo problemas para configurar eventos do Cloudwatch para acionar uma função Lambda. No cenário atual, quero acionar um Lambda quando alguém/coisa mudarqualquer coisano IAM.

Atualmente tenho um Cloudtrail global no Norte da Virgínia que registra todos os eventos IAM e posso vê-los com muita clareza.

Eu então tenho um evento Cloudwatch com seu gatilho configurado para Lambda. Ao testar o gatilho em qualquer outro serviço, como EC2, o lambda é acionado corretamente. Ao usar o IAM, no entanto,semprefalhar.

Aqui está o padrão de evento que estou usando, que parece ser a única coisa que pode estar errada neste momento:

{
   "detail-type": [
     "AWS API Call via CloudTrail"
   ],
   "detail": {
     "eventSource": [
       "iam.amazonaws.com"
     ]
   }
}

Se alguém já tentou configurar isso antes, por favor ajude. Está me deixando maluco.

Responder1

Para monitorar alterações no IAM, você precisará usar uma combinação de CloudWatch, CloudWatch Logs e CloudTrail. Certifique-se de que o CloudTrail esteja habilitado para cada região que você deseja monitorar.

O CloudTrail registrará chamadas para o IAM e as armazenará nos logs do CloudTrail. O CloudTrail publicará eventos nos logs do CloudWatch. Você configura um filtro no CloudWatch para gerar métricas do CloudWatch a partir dos eventos do CloudTrail. Essas métricas são usadas para acionar alarmes.

Seu filtro CloudWach é assim:

{ ($.eventSource = "iam.amazonaws.com") }

Este artigo ajudará você a entender o processo. Passo a passo com capturas de tela.

Como receber alertas quando a configuração do IAM for alterada

Responder2

Então descobri qual era o problema: os padrões que eu estava tentando usar não forneciam um escopo pequeno ou grande o suficiente. Monitorar o IAM desta forma requer o seguinteesseguia e quando ele informa o padrão de evento a ser inserido como um padrão de evento Cloudwatch, você precisa especificar EXATAMENTE os nomes dos eventos necessários.

É bastante longo, mas demonstra o quão minucioso você precisa ser e que nenhum globbing é suportado. Aqui está o padrão que acabei usando:

{
  "source": [
    "aws.iam"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "iam.amazonaws.com"
    ],
    "eventName": [
      "AddClientIDToOpenIDConnectProvider",
      "AddRoleToInstanceProfile",
      "AddUserToGroup",
      "ChangePassword",
      "CreateAccessKey",
      "CreateAccountAlias",
      "CreateInstanceProfile",
      "CreateLoginProfile",
      "CreateOpenIDConnectProvider",
      "CreateRole",
      "CreateSAMLProvider",
      "CreateServiceLinkedRole",
      "CreateServiceSpecificCredential",
      "CreateUser",
      "CreateVirtualMFADevice",
      "DeactivateMFADevice",
      "DeleteVirtualMFADevice",
      "EnableMFADevice",
      "ResyncMFADevice",
      "UpdateAccessKey",
      "UpdateAccountPasswordPolicy",
      "UpdateGroup",
      "UpdateLoginProfile",
      "UpdateOpenIDConnectProviderThumbprint",
      "UpdateRoleDescription",
      "UpdateSAMLProvider",
      "UpdateServerCertificate",
      "UpdateServiceSpecificCredential",
      "UpdateSigningCertificate",
      "UpdateSSHPublicKey",
      "UpdateUser",
      "UploadServerCertificate",
      "UploadSigningCertificate",
      "UploadSSHPublicKey",
      "AttachGroupPolicy",
      "AttachRolePolicy",
      "AttachUserPolicy",
      "CreatePolicy",
      "CreatePolicyVersion",
      "DeleteAccountPasswordPolicy",
      "DeleteGroupPolicy",
      "DeletePolicy",
      "DeletePolicyVersion",
      "DeleteRolePolicy",
      "DeleteUserPolicy",
      "DetachGroupPolicy",
      "DetachRolePolicy",
      "DetachUserPolicy",
      "PutGroupPolicy",
      "PutRolePolicy",
      "PutUserPolicy",
      "SetDefaultPolicyVersion",
      "UpdateAssumeRolePolicy"
    ]
  }
}

informação relacionada