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 |
함수의 리소스 기반 정책 보기
함수의 리소스 기반 정책 삭제
기존 정책 업데이트
함수의 기존 리소스 기반 권한을 업데이트하는 경우, 사용하는 메서드에 따라 동작이 달라집니다.
-
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-ida1b2c3d4-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 작업은 리소스 기반 정책을 지원합니다.
-
InvokeFunctionUrl(권한만 해당)