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

Lambda 함수 URL에 대한 액세스 제어 (Control access to Lambda function URLs)

참고

2025년 10월부터 새 함수 URL에는 lambda:InvokeFunctionUrl 및 lambda: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 사용을 참조하세요.

이 페이지에는 두 auth 유형에 대한 리소스 기반 정책 예제와 AddPermission API 작업 또는 Lambda 콘솔로 이러한 정책을 만드는 방법이 포함되어 있습니다. 권한을 설정한 후 함수 URL을 호출하는 방법에 대한 정보는 Lambda 함수 URL 호출을 참조하세요.

출처: AWS Lambda 개발자 안내서

본문

AWS_IAM auth 유형 사용

AWS_IAM auth 유형을 선택하면 Lambda 함수 URL을 호출해야 하는 사용자는 lambda:InvokeFunctionUrl 및 lambda:InvokeFunction 권한이 있어야 합니다. 누가 호출 요청을 하는지에 따라 리소스 기반 정책으로 이 권한을 부여해야 할 수 있습니다.

요청을 하는 보안 주체가 함수 URL과 같은 AWS 계정에 있으면 해당 보안 주체는 자격 증명 기반 정책에서 lambda:InvokeFunctionUrl 및 lambda:InvokeFunction 권한을 가지거나 함수의 리소스 기반 정책에서 권한을 받아야 합니다. 즉 사용자가 자격 증명 기반 정책에 이미 lambda:InvokeFunctionUrl 및 lambda:InvokeFunction 권한이 있다면 리소스 기반 정책은 선택 사항입니다. 정책 평가는 정책 평가 로직에 설명된 규칙을 따릅니다.

요청을 하는 보안 주체가 다른 계정에 있으면 해당 보안 주체는 lambda:InvokeFunctionUrl 및 lambda:InvokeFunction 권한을 주는 자격 증명 기반 정책과 호출하려는 함수의 리소스 기반 정책에서 부여된 권한을 모두 가져야 합니다. 정책 평가는 교차 계정 요청이 허용되는지 결정에 설명된 규칙을 따릅니다.

다음 리소스 기반 정책은 AWS 계정 444455556666의 example 역할이 함수 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 콘솔의 Functions(함수) 페이지를 엽니다.
  2. URL 호출 권한을 부여할 함수의 이름을 선택합니다.
  3. Configuration(구성) 탭을 선택한 다음 Permissions(권한) 을 선택합니다.
  4. Resource-based policy(리소스 기반 정책) 아래에서 Add permissions(권한 추가) 를 선택합니다.
  5. Function URL 을 선택합니다.
  6. Auth type 에서 AWS_IAM 을 선택합니다.
  7. 정책 문의 Statement ID 를 입력합니다.
  8. Principal 에 권한을 부여할 사용자 또는 역할의 계정 ID 또는 Amazon 리소스 이름(ARN)을 입력합니다. 예: 444455556666.
  9. Save(저장) 를 선택합니다.

또는 다음 add-permission AWS Command Line Interface(AWS CLI) 명령으로 이 정책을 만들 수 있습니다. AWS CLI를 사용할 때는 lambda:InvokeFunctionUrl과 lambda: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 auth 유형 사용

중요

함수 URL auth 유형이 NONE이고 공개 액세스를 부여하는 리소스 기반 정책이 있으면 함수 URL을 가진 인증되지 않은 모든 사용자가 함수를 호출할 수 있습니다.

경우에 따라 함수 URL이 공개되기를 원할 수 있습니다. 예를 들어 웹 브라우저에서 직접 오는 요청을 서비스하고 싶을 수 있습니다. 함수 URL에 공개 액세스를 허용하려면 NONE auth 유형을 선택하세요.

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

NONE auth 유형을 사용할 때 리소스 기반 정책에 lambda:InvokedViaFunctionUrl 컨텍스트 키를 포함할 것을 권장합니다. 이 컨텍스트 키는 함수가 함수 URL을 통해서만 호출되고 다른 호출 방법으로는 호출되지 않도록 보장합니다.

이 정책에 대해 다음에 유의하세요:

  • 모든 엔터티가 lambda:InvokeFunctionUrl과 lambda:InvokeFunction을 호출할 수 있습니다. 즉 함수 URL을 가진 사람은 누구나 함수를 호출할 수 있습니다.
  • lambda:FunctionUrlAuthType 조건 키 값은 NONE입니다. 즉 이 정책 문은 함수 URL의 auth 유형도 NONE일 때만 액세스를 허용합니다.
  • lambda:InvokedViaFunctionUrl 조건은 함수가 함수 URL을 통해서만 호출되고 다른 호출 방법으로는 호출되지 않도록 보장합니다.

예시 — NONE auth 유형용 기본 리소스 기반 정책 (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을 사용해 auth 유형 NONE 함수 URL을 만들지 않았다면 리소스 기반 정책을 직접 추가해야 합니다. 다음 명령을 사용해 lambda:InvokeFunctionUrl 및 lambda: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

참고

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

함수의 리소스 기반 정책이 lambda:invokeFunctionUrl과 lambda:InvokeFunction 권한을 부여하지 않으면 사용자가 함수 URL을 호출하려 할 때 403 Forbidden 오류 코드가 발생합니다. 이는 함수 URL이 NONE auth 유형을 사용해도 마찬가지입니다.

거버넌스 및 액세스 제어

함수 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 정책에 포함하세요. 예를 들어 다음 정책은 AWS 계정 444455556666의 example 역할에게 계정 123456789012의 함수 my-function에 대한 함수 URL을 업데이트할 권한을 부여합니다.

예시 교차 계정 함수 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이 사용하는 auth 유형을 설명하는 열거형 값을 정의합니다. 값은 AWS_IAM 또는 NONE일 수 있습니다.
  • lambda:InvokedViaFunctionUrl — lambda:InvokeFunction 작업을 함수 URL을 통한 호출로 제한합니다. 이는 함수가 함수 URL을 사용해서만 호출되고 다른 호출 방법으로는 호출되지 않도록 보장합니다. lambda:InvokedViaFunctionUrl 컨텍스트 키를 사용하는 리소스 기반 정책의 예는 AWS_IAM auth 유형 사용 및 NONE auth 유형 사용의 예제를 참조하세요.

이 컨텍스트 키를 함수와 연결된 정책에서 사용할 수 있습니다. 예를 들어 함수 URL에 구성을 변경할 수 있는 사람을 제한하고 싶을 수 있습니다. URL auth 유형 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"
                }
            }
        }
    ]
}

AWS 계정 444455556666의 example 역할에게 URL auth 유형 AWS_IAM인 함수에 대해 CreateFunctionUrlConfig 및 UpdateFunctionUrlConfig 요청을 하도록 권한을 부여하려면 다음 정책을 정의할 수 있습니다:

예시 명시적 허용이 있는 함수 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이 아닌 auth 유형을 사용하는 함수 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"
                }
            }
        }
    ]
}

더 알아보기 (Learn more)

  • Lambda 함수 URL
  • Lambda 함수 URL 호출
  • IAM 리소스 기반 정책