Lambda 함수 URL에 대한 액세스 제어 - AWS Lambda

Lambda 함수 URL에 대한 액세스 제어

참고

2025년 10월부터 새 함수 URL에는 lambda:InvokeFunctionUrllambda:InvokeFunction 권한이 모두 필요합니다.

AuthType 파라미터를 특정 함수에 연결된 리소스 기반 정책과 함께 사용하여 Lambda 함수 URL에 대한 액세스를 제어할 수 있습니다. 이 두 구성 요소의 구성에 따라 함수 URL에서 다른 관리 작업을 간접 호출하거나 수행할 수 있는 사람이 결정됩니다.

AuthType 파라미터는 Lambda가 함수 URL에 대한 요청을 인증하거나 권한을 부여하는 방법을 결정합니다. 함수 URL을 구성할 때 다음 AuthType 옵션 중 하나를 지정해야 합니다.

  • AWS_IAM – Lambda는 AWS Identity and Access Management(IAM)를 사용하여 IAM 위탁자의 자격 증명 정책 및 함수의 리소스 기반 정책에 따라 요청을 인증하고 권한을 부여합니다. 인증된 사용자 및 역할만 함수 URL을 사용해 함수를 간접 호출하도록 하려면 이 옵션을 선택합니다.

  • NONE – Lambda가 함수를 호출하기 전에 인증을 수행하지 않습니다. 그러나 함수의 리소스 기반 정책은 항상 유효하며 함수 URL이 요청을 수신하기 전에 퍼블릭 액세스 권한을 부여해야 합니다. 함수 URL에 인증되지 않은 퍼블릭 액세스를 허용하려면 이 옵션을 선택합니다.

보안에 대한 추가 인사이트를 얻기 위해, AWS Identity and Access Management Access Analyzer을 사용하여 함수 URL에 대한 외부 액세스의 종합적인 분석을 확인할 수 있습니다. 또한 IAM Access Analyzer는 Lambda 함수에 대한 신규 또는 업데이트된 권한을 모니터링하여 퍼블릭 및 교차 계정 액세스를 부여하는 권한을 식별하는 데 도움이 됩니다. IAM Access Analyzer는 무료로 사용할 수 있습니다. IAM Access Analyzer를 시작하려면 AWS IAM Access Analyzer 사용 섹션을 참조하세요.

이 페이지에는 두 인증 유형에 대한 리소스 기반 정책의 예와 AddPermission API 작업 또는 Lambda 콘솔을 사용하여 이러한 정책을 생성하는 방법이 포함되어 있습니다. 권한을 설정한 후 함수 URL을 간접 호출하는 방법에 대한 자세한 내용은 Lambda 함수 URL 호출 섹션을 참조하세요.

AWS_IAM 인증 유형 사용

AWS_IAM 인증 유형을 선택하는 경우 Lambda 함수 URL을 간접 호출해야 하는 사용자에게 lambda:InvokeFunctionUrllambda:InvokeFunction 권한이 있어야 합니다. 호출을 요청하는 사람에 따라 리소스 기반 정책을 사용하여 이 권한을 부여해야 할 수 있습니다.

요청을 하는 위탁자가 함수 URL과 동일한 AWS 계정에 있는 경우, 위탁자가 자격 증명 기반 정책lambda:InvokeFunctionUrllambda:InvokeFunction 권한이 있거나 또는 함수의 리소스 기반 정책에 부여된 권한이 있어야 합니다. 즉, 사용자가 이미 자격 증명 기반 정책에 lambda:InvokeFunctionUrllambda:InvokeFunction 권한이 있는 경우 리소스 기반 정책은 선택 사항입니다. 정책 평가는 정책 평가 로직에 설명된 규칙을 따릅니다.

요청을 하는 위탁자가 다른 계정에 있는 경우 위탁자는 lambda:InvokeFunctionUrllambda:InvokeFunction 권한을 부여하는 자격 증명 기반 정책 간접 호출하려는 함수에 대한 리소스 기반 정책에 부여된 권한이 모두 있어야 합니다. 정책 평가는 계정 내에서 교차 계정 요청 허용 여부 결정에 설명된 규칙을 따릅니다.

다음과 같은 리소스 기반 정책은 AWS 계정 444455556666example 역할이 함수 my-function와 연결된 함수 URL을 간접 호출하도록 허용합니다. lambda:InvokedViaFunctionUrl 컨텍스트 키는 lambda:InvokeFunction 작업을 함수 URL 직접 호출로 제한합니다. 즉, 위탁자는 함수 URL을 사용하여 함수를 간접 호출해야 합니다. lambda:InvokedViaFunctionUrl을 포함하지 않으면 위탁자는 함수 URL 외에도 다른 간접 호출 방법을 통해 함수를 간접 호출할 수 있습니다.

예 - 교차 계정 리소스 기반 정책
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "Bool": { "lambda:InvokedViaFunctionUrl": "true" } } } ] }

다음 단계에 따라 콘솔을 통해 이 리소스 기반 정책을 생성할 수 있습니다.

다른 계정에 URL 호출 권한을 부여하려면(콘솔)
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. URL 호출 권한을 부여하려는 함수의 이름을 선택합니다.

  3. 구성(Configuration) 탭을 선택한 다음, 권한(Permissions)을 선택합니다.

  4. 리소스 기반 정책(Resource-based policy)에서 권한 추가(Add permissions)를 선택합니다.

  5. 함수 URL(Function URL)을 선택합니다.

  6. 인증 유형(Auth type)에서 AWS_IAM을 선택합니다.

  7. 정책 문의 문 ID를 입력합니다.

  8. 위탁자에 권한을 부여하려는 사용자나 역할의 계정 ID 또는 Amazon 리소스 이름(ARN)을 입력합니다. 예를 들면 444455556666입니다.

  9. 저장을 선택합니다.

또는 다음 add-permission AWS Command Line Interface(AWS CLI) 명령을 사용하여 이 정책을 생성할 수 있습니다. AWS CLI를 사용하는 경우 lambda:InvokeFunctionUrllambda:InvokeFunction 문을 별도로 추가해야 합니다. 예:

aws lambda add-permission --function-name my-function \ --statement-id UrlPolicyInvokeURL \ --action lambda:InvokeFunctionUrl \ --principal 444455556666 \ --function-url-auth-type AWS_IAM
aws lambda add-permission --function-name my-function \ --statement-id UrlPolicyInvokeFunction \ --action lambda:InvokeFunction \ --principal 444455556666 \ --invoked-via-function-url

NONE 인증 유형 사용

중요

함수 URL 인증 유형이 NONE이고 퍼블릭 액세스 권한을 부여하는 리소스 기반 정책이 있는 경우, 함수 URL이 있는 인증되지 않은 모든 사용자가 함수를 간접 호출할 수 있습니다.

경우에 따라 함수 URL을 공개할 수 있습니다. 예를 들어 웹 브라우저에서 직접 제출된 요청을 처리하고자 할 수 있습니다. 함수 URL에 대한 퍼블릭 액세스를 허용하려면 NONE 인증 유형을 선택합니다.

NONE 인증 유형을 선택하는 경우, Lambda는 IAM을 사용하여 함수 URL에 대한 요청을 인증하지 않습니다. 그러나 함수에는 lambda:InvokeFunctionUrllambda:InvokeFunction을 허용하는 리소스 기반 정책이 있어야 합니다. 콘솔 또는 AWS Serverless Application Model(AWS SAM)을 통해 인증 유형 NONE을 사용하는 함수 URL을 생성하는 경우 Lambda에서 리소스 기반 정책을 자동으로 생성합니다. AWS CLI, AWS CloudFormation, 또는 Lambda API를 직접 사용하는 경우 권한을 직접 추가해야 합니다.

NONE 인증 유형을 사용할 때는 리소스 기반 정책에 lambda:InvokedViaFunctionUrl 컨텍스트 키를 포함하는 것이 좋습니다. 이 컨텍스트 키는 함수 URL을 통해서만 함수를 간접 호출할 수 있고 다른 간접 호출 방법을 통해서는 호출할 수 없도록 합니다.

이 정책에 대한 다음을 참고하세요.

  • 모든 엔터티는 lambda:InvokeFunctionUrllambda:InvokeFunction을 직접 호출할 수 있습니다. 즉, 함수 URL이 있는 사람은 누구나 함수를 간접 호출할 수 있습니다.

  • lambda:FunctionUrlAuthType 조건 키 값은 NONE입니다. 이 정책 문은 함수 URL의 인증 유형도 NONE인 경우에만 액세스를 허용합니다.

  • lambda:InvokedViaFunctionUrl 조건은 함수 URL을 통해서만 함수를 간접 호출할 수 있고 다른 간접 호출 방법을 통해서는 호출할 수 없도록 합니다.

예 - NONE 인증 유형에 대한 기본 리소스 기반 정책
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "FunctionURLAllowPublicAccess", "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } }, { "Sid": "FunctionURLInvokeAllowPublicAccess", "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "Bool": { "lambda:InvokedViaFunctionUrl": "true" } } } ] }
AWS CLI를 사용하여 리소스 기반 정책 생성

콘솔 또는 AWS SAM를 사용하여 인증 유형이 NONE인 함수 URL을 생성하지 않는다면 리소스 기반 정책을 직접 추가해야 합니다. 다음 명령을 사용하여 lambda:InvokeFunctionUrllambda:InvokeFunction 권한을 갖는 문을 생성합니다. 각 문은 별도의 명령에 추가해야 합니다.

aws lambda add-permission \ --function-name UrlTestFunction \ --statement-id UrlPolicyInvokeURL \ --action lambda:InvokeFunctionUrl \ --principal * \ --function-url-auth-type NONE
aws lambda add-permission \ --function-name UrlTestFunction \ --statement-id UrlPolicyInvokeFunction \ --action lambda:InvokeFunction \ --principal * \ --invoked-via-function-url
참고

NONE 인증 유형이 있는 함수 URL을 삭제하는 경우, Lambda는 연결된 리소스 기반 정책을 자동으로 삭제하지 않습니다. 이 정책을 삭제하려면 수동으로 삭제해야 합니다.

함수의 리소스 기반 정책이 lambda:invokeFunctionUrllambda:InvokeFunction 권한을 부여하지 않는 경우 사용자가 함수 URL을 간접 호출하면 403 금지됨 오류 코드가 표시됩니다. 이는 함수 URL이 NONE 인증 유형을 사용하는 경우에도 발생합니다.

거버넌스 및 액세스 제어

함수 URL 호출 권한 외에도 함수 URL을 구성하는 데 사용되는 작업에 대한 액세스를 제어할 수도 있습니다. Lambda는 함수 URL에 대해 다음과 같은 IAM 정책 작업을 지원합니다.

  • lambda:InvokeFunctionUrl – 함수 URL을 사용하여 Lambda 함수를 간접 호출합니다.

  • lambda:CreateFunctionUrlConfig – 함수 URL을 생성하고 해당 을 설정합니다.AuthType

  • lambda:UpdateFunctionUrlConfig – 함수 URL 구성 및 해당 을 업데이트합니다.AuthType

  • lambda:GetFunctionUrlConfig – 함수 URL의 세부 정보를 봅니다.

  • lambda:ListFunctionUrlConfigs – 함수 URL 구성을 나열합니다.

  • lambda:DeleteFunctionUrlConfig – 함수 URL을 삭제합니다.

다른 AWS 엔터티에 대한 함수 URL 액세스를 허용하거나 거부하려면 IAM 정책에 이러한 작업을 포함합니다. 예를 들어 다음 정책은 계정 123456789012의 함수 my-function에 대한 함수 URL을 업데이트할 수 있는 권한을 AWS 계정 444455556666example 역할에 부여합니다.

예 교차 계정 함수 URL 정책
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:UpdateFunctionUrlConfig", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function" } ] }

조건 키

함수 URL에 대한 세분화된 액세스 제어를 위해 조건 컨텍스트 키를 사용합니다. Lambda는 함수 URL에 대해 다음 컨텍스트 키를 지원합니다.

  • lambda:FunctionUrlAuthType - 함수 URL에서 사용하는 인증 유형을 설명하는 열거형 값을 정의합니다. 이때 값은 AWS_IAM 또는 NONE가 될 수 있습니다.

  • lambda:InvokedViaFunctionUrl - 함수 URL을 통해 이루어진 호출로 lambda:InvokeFunction 작업을 제한합니다. 이렇게 하면 함수 URL을 사용해서만 함수를 간접 호출할 수 있고 다른 간접 호출 방법을 통해서는 호출할 수 없도록 합니다. lambda:InvokedViaFunctionUrl 컨텍스트 키를 사용하는 리소스 기반 정책의 예는 AWS_IAM 인증 유형 사용NONE 인증 유형 사용의 예제를 참조하세요.

함수와 연결된 정책에서 이 컨텍스트 키를 사용할 수 있습니다. 예를 들어 함수 URL의 구성을 변경할 수 있는 사용자를 제한하려고 할 수 있습니다. URL 인증 유형이 NONE인 모든 함수에 대한 UpdateFunctionUrlConfig 요청을 거부하려면 다음 정책을 정의할 수 있습니다.

예 명시적 거부를 사용한 함수 URL 정책
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action":[ "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } } ] }

URL 인증 유형이 AWS_IAM인 함수에 대한 CreateFunctionUrlConfigUpdateFunctionUrlConfig 요청을 할 수 있는 권한을 AWS 계정 444455556666example 역할을 부여하려면 다음 정책을 정의할 수 있습니다.

예 명시적 허용을 사용한 함수 URL 정책
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action":[ "lambda:CreateFunctionUrlConfig", "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }

서비스 제어 정책(SCP)에서 이 조건 키를 사용할 수도 있습니다. SCP를 사용하여 AWS Organizations의 조직 전체에서 권한을 관리합니다. 예를 들어, 사용자가 AWS_IAM 이외의 인증 유형을 사용하는 함수 URL을 생성하거나 업데이트하는 것을 거부하려면 다음 서비스 제어 정책을 사용합니다.

예 명시적 거부를 사용한 함수 URL SCP
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action":[ "lambda:CreateFunctionUrlConfig", "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:*:123456789012:function:*", "Condition": { "StringNotEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }