사용자에게 Lambda 함수 접근 권한 부여

사용자에게 Lambda 함수 접근 권한 부여

자격 기반 정책(identity-based policies)을 사용해 사용자, 사용자 그룹, 또는 역할이 Lambda 함수에 대한 작업을 수행하도록 허용할 수 있어요.

참고
컨테이너 이미지로 정의된 함수의 경우 이미지에 접근할 사용자 권한을 Amazon Elastic Container Registry(Amazon ECR)에서 구성해야 해요. 예제는 Amazon ECR 저장소 정책을 참고하세요.

다음은 범위가 제한된 권한 정책의 예시예요. 이 정책은 사용자가 지정된 접두사(intern-)로 이름이 지정되고 지정된 실행 역할로 구성된 Lambda 함수를 만들고 관리할 수 있게 해줘요.

예제 함수 개발 정책


{
    "Version":"2012-10-17",		 		 	
    "Statement": [
        {
            "Sid": "ReadOnlyPermissions",
            "Effect": "Allow",
            "Action": [
                "lambda:GetAccountSettings",
                "lambda:GetEventSourceMapping",
                "lambda:GetFunction",
                "lambda:GetFunctionConfiguration",
                "lambda:GetFunctionCodeSigningConfig",
                "lambda:GetFunctionConcurrency",
                "lambda:ListEventSourceMappings",
                "lambda:ListFunctions",
                "lambda:ListTags",
                "iam:ListRoles"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DevelopFunctions",
            "Effect": "Allow",
            "NotAction": [
                "lambda:AddPermission",
                "lambda:PutFunctionConcurrency"
            ],
            "Resource": "arn:aws:lambda:*:*:function:intern-*"
        },
        {
            "Sid": "DevelopEventSourceMappings",
            "Effect": "Allow",
            "Action": [
                "lambda:DeleteEventSourceMapping",
                "lambda:UpdateEventSourceMapping",
                "lambda:CreateEventSourceMapping"
            ],
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "lambda:FunctionArn": "arn:aws:lambda:*:*:function:intern-*"
                }
            }
        },
        {
            "Sid": "PassExecutionRole",
            "Effect": "Allow",
            "Action": [
                "iam:ListRolePolicies",
                "iam:ListAttachedRolePolicies",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:PassRole",
                "iam:SimulatePrincipalPolicy"
            ],
            "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role"
        },
        {
            "Sid": "ViewLogs",
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/intern-*"
        }
    ]
}

정책의 권한은 지원하는 리소스 및 조건에 따라 문(statement)으로 구성돼요.

  • ReadOnlyPermissions – Lambda 콘솔은 함수를 탐색·조회할 때 이 권한들을 사용해요. 리소스 패턴이나 조건을 지원하지 않아요.

                "Action": [
                    "lambda:GetAccountSettings",
                    "lambda:GetEventSourceMapping",
                    "lambda:GetFunction",
                    "lambda:GetFunctionConfiguration",           
                    "lambda:GetFunctionCodeSigningConfig",
                    "lambda:GetFunctionConcurrency",                
                    "lambda:ListEventSourceMappings",
                    "lambda:ListFunctions",      
                    "lambda:ListTags",
                    "iam:ListRoles"
                ],
                "Resource": "*"
    
  • DevelopFunctions – intern-으로 접두사가 붙은 함수에 대해 작동하는 Lambda 작업을 사용하세요. 단 AddPermission과 PutFunctionConcurrency는 제외해요. AddPermission은 함수의 리소스 기반 정책을 수정하며 보안 영향이 있을 수 있어요. PutFunctionConcurrency는 함수의 스케일링 용량을 예약하며 다른 함수에서 용량을 가져갈 수 있죠.

                "NotAction": [
                    "lambda:AddPermission",
                    "lambda:PutFunctionConcurrency"
                ],
                "Resource": "arn:aws:lambda:*:*:function:intern-*"
    
  • DevelopEventSourceMappings – intern-으로 접두사가 붙은 함수의 이벤트 소스 매핑을 관리해요. 이러한 작업은 이벤트 소스 매핑에서 동작하지만, 조건(condition) 으로 함수별로 제한할 수 있어요.

                "Action": [
                    "lambda:DeleteEventSourceMapping",
                    "lambda:UpdateEventSourceMapping",
                    "lambda:CreateEventSourceMapping"
                ],
                "Resource": "*",
                "Condition": {
                    "StringLike": {
                        "lambda:FunctionArn": "arn:aws:lambda:*:*:function:intern-*"
                    }
                }
    
  • PassExecutionRole – intern-lambda-execution-role이라는 이름의 역할만 보고 전달하며, 이 역할은 IAM 권한이 있는 사용자가 만들고 관리해야 해요. PassRole은 함수에 실행 역할을 할당할 때 사용됩니다.

                "Action": [
                    "iam:ListRolePolicies",
                    "iam:ListAttachedRolePolicies",
                    "iam:GetRole",
                    "iam:GetRolePolicy",
                    "iam:PassRole",
                    "iam:SimulatePrincipalPolicy"
                ],
                "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role"
    
  • ViewLogs – CloudWatch Logs를 사용해 intern-으로 접두사가 붙은 함수의 로그를 봐요.

                "Action": [
                    "logs:*"
                ],
                "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/intern-*"
    

이 정책은 다른 사용자의 리소스를 위험에 빠뜨리지 않고 사용자가 Lambda를 시작할 수 있게 해줘요. 함수를 트리거하거나 다른 AWS 서비스를 호출하도록 구성하는 것은 허용하지 않는데, 이는 더 광범위한 IAM 권한이 필요해요. 또한 CloudWatch와 X-Ray처럼 제한된 범위 정책을 지원하지 않는 서비스에 대한 권한도 포함하지 않아요. 이러한 서비스에는 읽기 전용 정책을 사용해 사용자에게 지표와 추적 데이터 접근을 주세요.

함수의 트리거를 구성할 때는 함수를 호출하는 AWS 서비스를 사용할 접근 권한이 필요해요. 예를 들어 Amazon S3 트리거를 구성하려면 버킷 알림을 관리하는 Amazon S3 작업을 사용할 권한이 필요하죠. 이러한 권한 중 다수는 AWSLambda_FullAccess 관리형 정책에 포함되어 있어요.

출처: AWS Lambda 개발자 안내서

더 알아보기 (Learn more)

  • 자격 기반 정책으로 사용자·그룹·역할에 제한된 Lambda 함수 권한을 부여하는 방법과 문(statement)별 리소스·조건 활용을 익혀 보세요.