[파이썬] 파이썬 애플리케이션의 AWS Lambda 보안 설정 및 인가

AWS Lambda는 서버리스 아키텍처를 구현하기 위해 많이 사용되는 서비스 중 하나입니다. Lambda를 사용하면 신속하게 스케일링되는 애플리케이션을 구축할 수 있으며, 비용 효율적이고 유연한 개발이 가능합니다. 하지만 Lambda 함수를 보안적으로 잘 설정하지 않으면, 잘못된 권한 설정으로 인해 데이터 유출, 악용 등의 보안 위험을 초래할 수 있습니다.

이 블로그 포스트에서는 파이썬을 사용하여 AWS Lambda 함수의 보안 설정 및 인가 방법을 알아보겠습니다. 이를 통해 Lambda 함수를 안전하게 운영할 수 있습니다.

1. IAM 역할 생성

Lambda 함수에 대한 보안 설정을 위해 먼저 적절한 IAM(Identity and Access Management) 역할을 생성해야 합니다. 다음은 IAM 역할을 생성하는 예시 코드입니다.

import boto3

# IAM 클라이언트 생성
iam = boto3.client('iam')

# 새로운 IAM 역할 생성
iam.create_role(
    RoleName='LambdaExecutionRole',
    AssumeRolePolicyDocument='''{
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "lambda.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }'''
)

2. IAM 정책 추가

생성한 IAM 역할에는 적절한 IAM 정책을 추가해야 합니다. 이를 통해 Lambda 함수가 필요한 서비스에만 접근할 수 있도록 제한할 수 있습니다. 다음은 DynamoDB 테이블에 접근할 수 있는 IAM 정책을 추가하는 예시 코드입니다.

import boto3

# IAM 클라이언트 생성
iam = boto3.client('iam')

# IAM 정책 추가
iam.put_role_policy(
    RoleName='LambdaExecutionRole',
    PolicyName='DynamoDBAccess',
    PolicyDocument='''{
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "dynamodb:Scan",
                    "dynamodb:Query",
                    "dynamodb:GetItem",
                    "dynamodb:PutItem",
                    "dynamodb:UpdateItem",
                    "dynamodb:DeleteItem"
                ],
                "Resource": "arn:aws:dynamodb:REGION:ACCOUNT_ID:table/TableName"
            }
        ]
    }'''
)

위 코드에서 REGION은 사용하는 AWS 리전을, ACCOUNT_ID는 AWS 계정 ID를, TableName은 접근하려는 DynamoDB 테이블의 이름을 각각 대체해야 합니다.

3. Lambda 함수에 IAM 역할 연결

마지막으로, 생성한 IAM 역할을 Lambda 함수와 연결해야 합니다. 다음은 Lambda 함수를 생성하고 IAM 역할을 연결하는 예시 코드입니다.

import boto3

# Lambda 클라이언트 생성
lambda_client = boto3.client('lambda')

# Lambda 함수 생성
lambda_client.create_function(
    FunctionName='MyLambdaFunction',
    Runtime='python3.8',
    Role='arn:aws:iam::ACCOUNT_ID:role/LambdaExecutionRole',
    Handler='MyLambdaFunction.handler',
    Code={
        'ZipFile': open('lambda_function.zip', 'rb').read()
    }
)

위 코드에서 ACCOUNT_ID는 본인의 AWS 계정 ID를 대체해야 합니다. 또한, lambda_function.zip은 Lambda 함수 코드를 압축한 파일로 대체해야 합니다.

위의 과정을 통해 파이썬 애플리케이션의 AWS Lambda 함수에 대한 보안 설정과 인가를 완료할 수 있습니다. 적절한 IAM 역할과 정책을 설정하여 Lambda 함수가 필요한 서비스에만 접근할 수 있도록 관리해야 합니다.