투케이2K

224. (python/파이썬) [AWS] [Lambda] 런타임 Python 3.13 - boto3 모듈 사용해 GetAccessKeyLastUsed IAM 최근 사용 이력 조회 본문

Python

224. (python/파이썬) [AWS] [Lambda] 런타임 Python 3.13 - boto3 모듈 사용해 GetAccessKeyLastUsed IAM 최근 사용 이력 조회

투케이2K 2026. 1. 14. 21:08
728x90

[개발 환경 설정]

개발 툴 : Aws / Lambda / Runtime Python 3.13

개발 언어 : python

 

[소스 코드]

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Python


- 개발 툴 : Aws / Lambda / Runtime Python 3.13


- 개발 기술 : AWS Lambda 이벤트 동작 함수


- 사전) AWS Lambda 설명 : 

  >> Aws Lambda 는 서버 리스 FaaS 솔루션으로, 함수의 인스턴스를 실행하여 이벤트를 처리할 수 있습니다.

  >> Aws Lambda 는 이벤트에 응답하여 코드를 실행 하고 해당 코드에 필요한 컴퓨팅 리소스를 자동으로 관리합니다.


- 사전) AWS IAM 자격 증명 설명 정리 : 

  >> AWS IAM 아이엠 계정 은 일부 AWS 서비스 및 리소스에 대한 액세스 권한을 가지고 있는 자격 증명입니다

  >> IAM 아이엠 계정 은 ROOT 계정 혹은 다른 IAM 계정으로부터 권한을 부여 받을 수 있으며, 주어진 권한 내의 작업만 할 수 있습니다

  >> IAM 아이엠 계정에서 할당 된 권한 외의 작업이 필요한 경우 ROOT 계정으로부터 추가 액세스 접근 권한을 부여 받아야 사용할 수 있습니다

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------

# ========================================================================
# [Aws] : [boto3 모듈] : IAM 계정 정보 사용해 AccessKey 가 최근 마지막에 사용 된 이력 조회
# ========================================================================
# [참고] : API Gateway 와 연동 되어 Post 방식으로 Lambda 함수 호출 및 응답 값 반환 수행
# ========================================================================
"""
1. aws lambda python 3.13 런타임 환경 기반
2. boto3 모듈 기본 내장 AWS 사용 모듈
3. import ClientError : AWS SDK for Python 인 boto3 에서 발생할 수 있는 예외 중 하나로, AWS 서비스 호출 중 오류가 발생했을 때 사용됩니다
"""
# ========================================================================

import json

import os

import boto3
from botocore.exceptions import ClientError
from decimal import Decimal

def lambda_handler(event, context): # Lambda 호출 시 동작 되는 메인 함수

    # [event , context 정보 디버깅 로그 출력]
    print(f"DLOG = event : {event} / context {context}")


    # [Return 반환 Json 변수 선언]
    response = {
        "statusCode" : 0,
        "headers" : {},
        "body" : ""
    }


    # [AWS IAM 계정 AccessKey, SecretKey 변수 선언]
    iamAccessKey = "AK..A6"
    iamSecretKey = "mP..5J"


    # [명시적 인증 정보로 세션 생성]
    session = boto3.Session(
        aws_access_key_id=iamAccessKey,
        aws_secret_access_key=iamSecretKey
    )


    # [AWS 클라이언트 생성]
    aws_client = session.client('iam')

    
    try:

      # ---------------------------------------------
      # ✅ [주요 에러 정리]
      # ---------------------------------------------
      # AccessDenied : 호출 주체가 iam:GetAccessKeyLastUsed 권한이 없거나 정책에서 거부됨
      # NoSuchEntity : 지정한 AccessKeyId가 존재하지 않음 (삭제되었거나 잘못된 키)
      # InvalidInput : 잘못된 형식의 AccessKeyId를 전달한 경우
      # ThrottlingAPI : 호출이 너무 많아 제한된 경우
      # InternalFailure : AWS 내부 오류
      # ---------------------------------------------

      aws_res = aws_client.get_access_key_last_used(
        AccessKeyId=iamAccessKey
      )

      print(f"DLOG = aws_res : {aws_res}")      

      # [리턴 변수 삽입] : ApiGateWay 응답 반환 설정 : Lambda 통합 요청 사용
      response["statusCode"] = 200 
      response["headers"] = {
        "Content-Type": "application/json",
        'Access-Control-Allow-Origin': '*',  # CORS 허용 (필요 시)
      }
      response["body"] = json.dumps({
        "aws_res": json.dumps(aws_res, default=str)
      })
        
    except ClientError as e: # AWS 서비스 호출 중 오류 발생 처리
        error_code = e.response['Error']['Code']
        error_message = e.response['Error']['Message']

        # [리턴 변수 삽입]
        response["statusCode"] = 400
        response["headers"] = {
          "Content-Type": "application/json",
          'Access-Control-Allow-Origin': '*',  # CORS 허용 (필요 시)
        }
        response["body"] = json.dumps(
          {
            "exception" : "ClientError",
            "error_code" : error_code,
            "error_message" : error_message
          }
        )


    # [리턴 반환 수행]
    return response

# ========================================================================
"""
Response:
{
  "statusCode": 200,
  "headers": {
    "Content-Type": "application/json",
    "Access-Control-Allow-Origin": "*"
  },
  "body": "{\"aws_res\": \"{\\\"UserName\\\": \\\"twok@2k.com-CLI\\\", \\\"AccessKeyLastUsed\\\": {\\\"LastUsedDate\\\": \\\"2026-01-13 09:58:00+00:00\\\", \\\"ServiceName\\\": \\\"iot\\\", \\\"Region\\\": \\\"ap-northeast-2\\\"}, \\\"ResponseMetadata\\\": {\\\"RequestId\\\": \\\"c749c224-af12-4ae3-a0ff-9f11e837674e\\\", \\\"HTTPStatusCode\\\": 200, \\\"HTTPHeaders\\\": {\\\"date\\\": \\\"Tue, 13 Jan 2026 23:15:10 GMT\\\", \\\"x-amzn-requestid\\\": \\\"c749c224-af12-4ae3-a0ff-9f11e837674e\\\", \\\"content-type\\\": \\\"text/xml\\\", \\\"content-length\\\": \\\"508\\\"}, \\\"RetryAttempts\\\": 0}}\"}"
}
"""
# ========================================================================

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[로그인 계정] ROOT 루트 계정 로그인과 IAM 아이엠 계정 로그인 차이 설명 정리

https://kkh0977.tistory.com/7618

https://blog.naver.com/kkh0977/223731955897?trackingCode=blog_bloghome_searchlist


[자바스크립트 AWS Access Key ID 액세스 키 가 마지막으로 사용된 이력 조회 수행 - GetAccessKeyLastUsed]

https://kkh0977.tistory.com/8558

https://blog.naver.com/kkh0977/224141378644


[Amazon API Gateway] Aws API Gateway 게이트웨이 설명 정리 - 중개 서버

https://blog.naver.com/kkh0977/223827753479


[Amazon API Gateway] Aws API Gateway 게이트웨이 API 엔드포인트 유형 정리

https://blog.naver.com/kkh0977/223911565693


[Aws Lambda] Aws 사이트에서 생성 된 Lambda 람다 검증 함수 리스트 및 내용 소스 코드 확인 방법

https://blog.naver.com/kkh0977/223765198383


[AWS] Lambda 람다 함수 수행 errorType Sandbox.Timedout 에러 발생

https://blog.naver.com/kkh0977/223962778768

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments