View a markdown version of this page

Lambda에서 리소스 기반 정책 작업 - AWS Lambda

Lambda에서 리소스 기반 정책 작업

리소스 기반 권한 정책을 사용하면 AWS 계정, 사용자, 조직 및 AWS 서비스에 Lambda 함수에 대한 액세스 권한을 부여할 수 있습니다. 리소스 기반 정책은 하나 이상의 문을 포함하는 JSON 문서입니다. 각각의 문은 다음을 정의합니다.

  • Principal: 권한을 부여하려는 엔터티(다른 AWS 계정, IAM 역할 또는 사용자, 아니면 또 다른 AWS 서비스)

  • Action: 지정된 보안 주체에게 허용 또는 거부하려는 API 작업

  • Effect: 보안 주체가 API 작업을 사용할 수 있도록 허용할지 거부할지 의향

  • Resource: 문을 적용하려는 Lambda 함수, 버전 또는 별칭(와일드카드 문자를 사용해 함수의 모든 버전 및 별칭을 지정할 수도 있음)

Sid(문 식별자) 및 Condition(세분화된 액세스 제어를 위한 논리적 조건)과 같은 선택적 요소도 사용할 수 있습니다. 지원되는 정책 요소 전체 목록은 AWS Identity and Access Management 사용 설명서의 IAM JSON 정책 요소 참조를 참조하세요.

Lambda 함수에 리소스 기반 권한 추가

Lambda 함수에 리소스 기반 권한을 추가하는 방법은 두 가지입니다.

  • 전체 JSON 정책 – Lambda 콘솔, AWS CLI 또는 PutResourcePolicy API 작업을 사용해 완전한 JSON 정책 문서 전체를 추가합니다. 전체 JSON 정책을 사용하면 다양한 IAM 전역 조건 키를 모두 사용할 수 있고, 여러 보안 주체를 사용해 여러 문을 추가할 수 있으며 명시적 Deny 문을 생성할 수 있습니다. JSON 리소스 기반 정책의 최대 크기는 20KB입니다.

  • 개별 권한 – 콘솔 또는 AddPermission API 작업을 사용해 단일 Allow 문을 추가합니다. 개별 권한은 제한된 조건 키 세트(aws:SourceArn, aws:SourceAccount 및 aws:PrincipalOrgID)만 지원합니다.

함수에 리소스 기반 권한을 추가하려면 전체 JSON 정책을 정의하는 것이 좋습니다. 전체 JSON 정책을 생성하면 좀 더 유연성이 확보되고, 권한을 세분화해서 제어할 수 있습니다.

중요

put-resource-policy를 사용하면 리소스의 기존 리소스 기반 정책을 대신합니다. 리소스에 이미 add-permission으로 정의된 권한이 있는 경우, put-resource-policy가 해당 항목을 덮어씁니다. 변경 사항을 적용하기 전에 get-resource-policy를 사용해 기존 정책을 검색하세요.

필수 권한

PutResourcePolicy, GetResourcePolicy 및 DeleteResourcePolicy API 작업을 사용하려면 다음 IAM 권한이 필요합니다.

API 작업 필수 권한
PutResourcePolicy lambda:PutResourcePolicy, lambda:AddPermission 및 lambda:RemovePermission
GetResourcePolicy lambda:GetResourcePolicy 및 lambda:GetPolicy
DeleteResourcePolicy lambda:DeleteResourcePolicy 및 lambda:RemovePermission
Console
전체 JSON 리소스 기반 정책을 생성하는 방법
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 액세스 권한을 부여하려는 함수를 선택하고 구성 탭을 선택합니다.

  3. 권한을 선택합니다.

  4. 리소스 기반 정책 문 창에서 편집을 선택합니다. 이 작업은 JSON 정책 편집기를 엽니다.

  5. 함수의 정책에 문을 추가합니다. API 작업을 선택하고, 다양한 유형의 보안 주체를 추가하고(서비스, 계정, IAM 역할) 액세스를 제어할 조건 키를 추가할 수 있습니다.

  6. 저장을 선택합니다.

정책 창에서 직접 함수의 리소스 기반 정책을 편집할 수도 있습니다.

AWS CLI
전체 JSON 리소스 기반 정책을 추가하는 방법

함수에 전체 JSON 정책을 추가하려면 put-resource-policy AWS CLI 명령을 사용합니다.

다음 명령 예시는 로컬 머신에 있는, 이름이 policy.json인 파일에서 정의된 정책을 사용해 함수에 리소스 기반 정책을 추가합니다. 해당 파일을 포함하는 디렉터리에서 명령을 실행하세요. resource-arn으로 함수 버전 또는 별칭을 지정할 수 있고, 또는 정규화되지 않은 함수 ARN을 사용해 정책을 함수 전체에 적용할 수도 있습니다.

aws lambda put-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json
Lambda APIs

전체 JSON 권한 정책을 함수에 추가하려면 PutResourcePolicy API 작업을 사용합니다. DeleteResourcePolicy 작업을 사용해 함수의 정책을 삭제할 수도 있고, GetResourcePolicy 작업을 사용해 현재 함수에 연결된 정책을 검색할 수도 있습니다.

함수의 정책에 개별 권한을 추가하려면 AddPermission API 작업을 사용하세요.

함수의 리소스 기반 정책 보기

Console
함수의 리소스 기반 정책을 보는 방법
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 함수를 선택합니다.

  3. 구성을 선택한 다음 권한을 선택합니다.

  4. 스크롤을 내려 리소스 기반 정책 문에서 정책을 확인합니다.

AWS CLI

함수의 리소스 기반 정책을 보려면 get-resource-policy 명령을 사용합니다. 함수의 정규화되지 않은 ARN을 사용할 수도 있고, 버전 또는 별칭을 지정할 수도 있습니다.

aws lambda get-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function

get-policy 명령을 사용할 수도 있습니다.

aws lambda get-policy \ --function-name my-function \ --output text
Lambda APIs

함수의 리소스 기반 정책을 검색하려면 GetResourcePolicy API 작업을 사용합니다. 함수의 정규화되지 않은 ARN을 사용할 수도 있고, 버전 또는 별칭 ARN을 지정할 수도 있습니다.

GetPolicy API 작업을 사용할 수도 있습니다.

함수의 리소스 기반 정책 삭제

Console
함수의 리소스 기반 정책을 삭제하는 방법
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 권한 정책을 삭제하려는 함수를 선택합니다.

  3. 구성 탭을 선택하고, 권한을 선택합니다.

  4. 리소스 기반 정책 문 창에서 삭제를 선택합니다.

AWS CLI

함수의 정책을 삭제하려면 delete-resource-policy 명령을 사용하고 정책을 삭제하려는 함수, 버전 또는 별칭의 ARN을 지정합니다.

aws lambda delete-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function

개별 문을 제거하려면 remove-permission을 사용하세요.

aws lambda remove-permission \ --function-name example \ --statement-id sns
Lambda APIs

함수, 함수 버전 또는 함수 별칭에 연결된 리소스 기반 정책을 삭제하려면 DeleteResourcePolicy API 작업을 사용합니다.

정책에서 개별 문을 제거하려면 RemovePermission API 작업을 사용합니다.

기존 정책 업데이트

함수의 기존 리소스 기반 권한을 업데이트하는 경우, 사용하는 메서드에 따라 동작이 달라집니다.

  • put-resource-policy/PutResourcePolicy – 기존 정책 전체를 바꿉니다. 이전에 추가된 개별 권한은 모두 덮어쓰입니다.

  • add-permission/AddPermission – 덮어쓰지 않고 기존 정책에 문을 추가합니다. add-permission을 put-resource-policy 이후에 호출하면 새 문이 기존 JSON에 추가됩니다.

put-resource-policy를 사용할 때 의도치 않게 기존 권한을 덮어쓰지 않도록 방지하려면 먼저 함수의 기존 정책을 검색하세요. get-resource-policy 출력에는 RevisionId 필드가 포함됩니다.

aws lambda get-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function

새 정책을 연결할 때 --revision-id 파라미터와 함께 RevisionId 값을 제공해야 최신 버전으로 업데이트되도록 보장됩니다. 이전 개정 ID를 제공하면 Lambda가 함수의 정책을 업데이트하지 않습니다.

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json \ --revision-id a1b2c3d4-5678-90ab-cdef-EXAMPLE11111
참고

AddPermission으로 생성한 기존 리소스 기반 정책은 수정 없이 계속 작동합니다. 새 PutResourcePolicy API를 사용하려고 함수 코드를 변경할 필요가 없습니다.

보안 모범 사례

JSON 리소스 기반 정책을 사용해 최소 권한 액세스 패턴을 따를 수 있습니다. 명시적 거부에 대한 규제 요구 사항도 충족할 수 있습니다. 전체 JSON 정책을 사용해 할 수 있는 일:

  • 명시적 Deny 문을 생성해 특정 보안 주체 또는 조건을 차단합니다.

  • 조직 조건(aws:PrincipalOrgID, aws:PrincipalOrgPaths)을 사용해 개별 계정을 열거하지 않고 Organizations에 대한 액세스를 제한합니다.

  • 다양한 IAM 전역 조건 키를 모두 사용해 특정 소스 계정 또는 ARN으로 권한 범위를 지정합니다.

리소스 기반 정책 예시

예거부 문을 사용해 Amazon S3에 권한 부여

다음 정책은 계정에 속한 모든 Amazon S3 버킷에 함수를 호출할 권한을 부여하며, 명시적으로 거부된 버킷 하나만 제외합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-s3", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } }, { "Sid": "deny-s3-bucket", "Effect": "Deny", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-east-2:111122223333:function:my-function", "arn:aws:lambda:us-east-2:111122223333:function:my-function:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket" } } } ] }
예조직의 계정에 권한 부여

다음 정책은 조직에 속한 모든 AWS 계정에 호출 액세스 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "org-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-a1b2c3d4e5f" } } } ] }
예조건을 사용해 여러 IAM 역할에 권한 부여

다음 정책은 IAM 역할 두 개에 지정된 IP 주소에서 CreateAlias 작업을 사용할 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-roles", "Effect": "Allow", "Action": "lambda:CreateAlias", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/role-name", "arn:aws:iam::444455556666:role/role-name2" ] }, "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "IpAddress": { "aws:SourceIp": "192.0.2.0" } } } ] }
예호출자가 지정된 조직 소속이 아닌 한 액세스 거부
{ "Version": "2012-10-17", "Statement": [ { "Sid": "deny-access", "Effect": "Deny", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAllValues:StringNotLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } }, { "Sid": "allow-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAnyValue:StringLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } } ] }

지원되는 API 작업

다음 Lambda API 작업은 리소스 기반 정책을 지원합니다.