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

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

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

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

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

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

AuthType과 함께 리소스 기반 정책을 사용하여 다른 AWS 계정가 함수를 호출하도록 권한을 부여할 수도 있습니다. 자세한 정보는 Lambda에서 리소스 기반 정책 작업 섹션을 참조하세요.

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

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

AWS_IAM 인증 유형 사용

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

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

요청을 하는 보안 주체가 다른 계정에 있는 경우 보안 주체는 lambda:InvokeFunctionUrl 권한을 부여하는 자격 증명 기반 정책 호출하려는 함수에 대한 리소스 기반 정책에 부여된 권한이 모두 있어야 합니다. 이러한 교차 계정 사례에서 정책 평가는 교차 계정 요청의 허용 여부 결정에 설명된 규칙을 따릅니다.

교차 계정 상호 작용의 예로, 다음과 같은 리소스 기반 정책은 AWS 계정 444455556666example 역할이 함수 my-function와 연결된 함수 URL을 호출하도록 허용합니다.

예 함수 URL 교차 계정 호출 정책
{ "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" } } } ] }

다음 단계에 따라 콘솔을 통해 이 정책 설명을 생성할 수 있습니다.

다른 계정에 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(Statement ID)에서 정책 설명의 문 ID를 입력합니다.

  8. 보안 주체에 권한을 부여하려는 사용자나 역할의 계정 ID 또는 Amazon 리소스 이름(ARN)을 입력합니다. 예: 444455556666.

  9. 저장(Save)을 선택합니다.

또는 다음 add-permission AWS Command Line Interface(AWS CLI) 명령을 사용하여 이 정책 설명을 생성할 수 있습니다.

aws lambda add-permission --function-name my-function \ --statement-id example0-cross-account-statement \ --action lambda:InvokeFunctionUrl \ --principal 444455556666 \ --function-url-auth-type AWS_IAM

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

NONE 인증 유형 사용

중요

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

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

NONE 인증 유형을 선택하는 경우, Lambda는 IAM을 사용하여 함수 URL에 대한 요청을 인증하지 않습니다. 그러나 사용자는 여전히 lambda:InvokeFunctionUrl 권한이 있어야 함수 URL을 성공적으로 호출할 수 있습니다. 다음 리소스 기반 정책을 사용하여 lambda:InvokeFunctionUrl 권한을 부여할 수 있습니다.

예 인증되지 않은 모든 보안 주체에 대한 함수 URL 호출 정책
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } } ] }
참고

콘솔 또는 AWS Serverless Application Model(AWS SAM)을 통해 인증 유형 NONE을 사용하는 함수 URL을 생성하는 경우 Lambda에서 선행 리소스 기반 정책 설명을 자동으로 생성합니다. 정책이 이미 존재하거나 애플리케이션을 생성하는 사용자 또는 역할에 적절한 권한이 없는 경우 Lambda에서 이를 생성하지 않습니다. AWS CLI, AWS CloudFormation, Lambda API를 직접 사용하는 경우 lambda:InvokeFunctionUrl 권한을 직접 추가해야 합니다. 이렇게 하면 함수가 공개됩니다.

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

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

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

거버넌스 및 액세스 제어

함수 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을 삭제합니다.

참고

Lambda 콘솔은 lambda:InvokeFunctionUrl에 대해서만 권한 추가를 지원합니다. 다른 모든 작업의 경우 Lambda API 또는 AWS CLI를 사용하여 권한을 추가해야 합니다.

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

예 교차 계정 함수 URL 정책
{ "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에 대해 하나의 추가 조건 키 FunctionUrlAuthType을 지원합니다. FunctionUrlAuthType 키는 함수 URL에서 사용하는 인증 유형을 설명하는 열거형 값을 정의합니다. 이때 값은 AWS_IAM 또는 NONE가 될 수 있습니다.

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

예 명시적 거부를 사용한 함수 URL 정책
{ "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 정책
{ "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
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action":[ "lambda:CreateFunctionUrlConfig", "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:*:123456789012:function:*", "Condition": { "StringNotEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }