Lambda에서 ID 기반 IAM 정책 작업 - AWS Lambda

Lambda에서 ID 기반 IAM 정책 작업

AWS Identity and Access Management(IAM)에서 자격 증명 기반 정책을 사용하여 계정의 사용자에게 Lambda에 대한 액세스 권한을 부여할 수 있습니다. 자격 증명 기반 정책은 사용자에게 직접 적용하거나, 사용자와 연결된 그룹 및 역할에 적용할 수 있습니다. 다른 계정의 사용자에게 내 계정의 역할을 수행할 수 있는 권한 및 Lambda 리소스에 대한 액세스 권한을 부여할 수도 있습니다. 이 페이지는 ID 기반 정책을 함수 개발에 사용하는 방법의 예를 보여줍니다.

Lambda는 Lambda API 작업에 대해 액세스 권한을 부여하는 AWS 관리형 정책을 제공합니다. 경우에 따라 이 정책은 Lambda 리소스를 개발하고 관리하는 데 사용되는 AWS 다른 서비스에 대한 액세스 권한도 부여합니다. Lambda는 필요에 따라 이러한 관리형 정책을 업데이트하여 정책 릴리스 시 사용자가 새 기능에 대한 액세스 권한을 가질 수 있도록 보장합니다.

  • AWSLambda_FullAccess - Lambda 작업에 대한 모든 액세스 권한 및 Lambda 리소스를 개발 및 유지하는 데 사용되는 다른 AWS 서비스에 대한 모든 액세스 권한을 부여합니다. 이 정책은 이전 정책 AWSLambdaFullAccess의 범위를 줄이는 방식으로 만들어졌습니다.

  • AWSLambda_ReadOnlyAccess – Lambda 리소스에 대한 읽기 전용 액세스 권한을 부여합니다. 이 정책은 이전 정책 AWSLambdaReadOnlyAccess의 범위를 줄이는 방식으로 만들어졌습니다.

  • AWSLambdaRole – Lambda 함수를 호출할 수 있는 권한을 부여합니다.

AWS 관리형 정책은 사용자가 수정할 수 있는 Lambda 함수나 계층을 제한하지 않고 API 작업에 대한 권한을 부여합니다. 보다 세부적으로 제어하기 위해 사용자의 권한을 제한하는 정책을 직접 만들 수 있습니다.

사용자에게 함수에 대한 권한을 부여하는 예제 정책 작성

자격 증명 기반 정책을 사용해 사용자에게 Lambda 함수에 대한 작업을 실행할 수 있도록 허용합니다.

참고

컨테이너 이미지로 정의된 함수의 경우 이미지에 액세스할 수 있는 사용자 권한은 Amazon Elastic Container Registry에서 구성해야 합니다. 예시는 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": { "StringLike": { "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-*" } ] }

정책의 권한은 구문이 지원하는 리소스 및 조건에 따라 구문으로 구성됩니다.

  • ReadOnlyPermissions – 찾아보기 및 보기 기능을 사용할 때 Lambda 콘솔은 이러한 권한을 사용합니다. 이들 권한은 리소스 패턴 또는 조건을 지원하지 않습니다.

    "Action": [ "lambda:GetAccountSettings", "lambda:GetEventSourceMapping", "lambda:GetFunction", "lambda:GetFunctionConfiguration", "lambda:GetFunctionCodeSigningConfig", "lambda:GetFunctionConcurrency", "lambda:ListEventSourceMappings", "lambda:ListFunctions", "lambda:ListTags", "iam:ListRoles" ], "Resource": "*"
  • DevelopFunctionsAddPermissionPutFunctionConcurrency제외하고 intern-으로 접두사가 지정된 함수에서 작동하는 Lambda 작업을 사용합니다. AddPermission은 함수에 대한 리소스 기반 정책을 수정하여 보안에 영향을 줄 수 있습니다. PutFunctionConcurrency는 함수에 대한 조정 용량을 예약하여 다른 함수로부터 용량을 가져올 수 있습니다.

    "NotAction": [ "lambda:AddPermission", "lambda:PutFunctionConcurrency" ], "Resource": "arn:aws:lambda:*:*:function:intern-*"
  • DevelopEventSourceMappings - intern-으로 접두사가 지정된 함수에 대한 이벤트 소스 매핑을 관리합니다. 이러한 작업은 이벤트 소스 매핑에 대해 작용하지만 조건과 함께 함수를 제한할 수 있습니다.

    "Action": [ "lambda:DeleteEventSourceMapping", "lambda:UpdateEventSourceMapping", "lambda:CreateEventSourceMapping" ], "Resource": "*", "Condition": { "StringLike": { "lambda:FunctionArn": "arn:aws:lambda:*:*:function:intern-*" } }
  • PassExecutionRole – IAM 권한을 가진 사용자가 생성하고 관리해야 하는 intern-lambda-execution-role이라는 역할만 조회하고 전달합니다. 함수에 실행 역할을 할당할 경우 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를 시작할 수 있도록 합니다. 사용자가 더 광범위한 IAM 권한이 필요한 다른 AWS 서비스에 의해 트리거되는 기능을 구성하거나 호출하는 것은 허용하지 않습니다. 또한 CloudWatch 및 X-Ray와 같이 범위 제한 정책을 지원하지 않는 서비스에 대한 권한은 포함하지 않습니다. 사용자에게 지표 및 추적 데이터에 대한 액세스 권한을 부여하려면 이러한 서비스에 대해 읽기 전용 정책을 사용합니다.

함수에 대한 트리거를 구성할 경우 해당 함수를 호출하는 AWS 서비스를 사용하기 위한 액세스 권한이 필요합니다. 예를 들어, Amazon S3 트리거를 구성하려면 버킷 알림을 관리하는 Amazon S3 작업을 사용할 수 있는 권한이 필요합니다. 이러한 권한의 대부분은 AWSLambdaFullAccess 관리형 정책에 포함됩니다. 예제 정책은 이 설명서의 GitHub 리포지토리에서 사용할 수 있습니다.

계층을 사용할 수 있는 권한을 부여하는 예제 정책 작성

다음 정책은 계층을 만들고 이를 함수에 사용할 수 있는 권한을 사용자에게 부여합니다. 이 리소스 패턴에 따르면 계층 이름이 AWS로 시작되는 한 사용자는 원하는 test- 리전에서 원하는 계층 버전으로 작업할 수 있습니다.

예 계층 개발 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublishLayers", "Effect": "Allow", "Action": [ "lambda:PublishLayerVersion" ], "Resource": "arn:aws:lambda:*:*:layer:test-*" }, { "Sid": "ManageLayerVersions", "Effect": "Allow", "Action": [ "lambda:GetLayerVersion", "lambda:DeleteLayerVersion" ], "Resource": "arn:aws:lambda:*:*:layer:test-*:*" } ] }

함수 생성 및 구성 중 lambda:Layer 조건을 사용하여 계층 사용을 적용할 수도 있습니다. 예를 들어 다른 계정에서 게시한 계층을 사용자가 사용하지 못하게 할 수 있습니다. 다음 정책은 CreateFunctionUpdateFunctionConfiguration 작업에 조건을 추가하여 지정된 계층이 123456789012 계정에 속한 계층이어야 하도록 요구합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ConfigureFunctions", "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Resource": "*", "Condition": { "ForAllValues:StringLike": { "lambda:Layer": [ "arn:aws:lambda:*:123456789012:layer:*:*" ] } } } ] }

조건이 적용되도록 하려면, 다른 구문이 이러한 작업에 대한 권한을 사용자에게 부여하지 않는지 확인하세요.

ID 기반 정책으로 크로스 계정 액세스 구현

이전의 정책과 구문을 역할에 적용할 수 있으며, 그런 다음 다른 계정과 공유하여 Lambda 리소스에 대한 액세스 권한을 부여할 수 있습니다. 사용자와 달리, 역할에는 인증을 위한 자격 증명이 없습니다. 대신, 누가 역할을 맡을 수 있고 해당 권한을 사용할 수 있는지를 지정하는 트러스트 정책이 있습니다.

신뢰하는 계정에 교차 계정 역할을 사용하여 Lambda 작업 및 리소스에 대한 액세스 권한을 부여할 수 있습니다. 함수를 호출하거나 계층을 사용하는 권한만 부여하려면 리소스 기반 정책을 사용하세요.

자세한 내용은 IAM 사용 설명서에서 IAM 역할을 참조하세요.