Lambda 함수에 다른 계정에 대한 액세스 권한 부여
함수를 다른 AWS 계정와 공유하려면 함수의 리소스 기반 정책에 교차 계정 권한 문을 추가합니다. 전체 JSON 정책을 생성하려면 put-resource-policy를 사용하는 것이 좋습니다. put-resource-policy를 사용하면 여러 보안 주체를 지정하고, 조건을 추가하고, 거부 문을 생성할 수 있습니다. add-permission는 간단한 사용 사례에도 사용할 수 있습니다.
중요
put-resource-policy를 사용하면 리소스의 기존 리소스 기반 정책을 대신합니다. 리소스에 이미 add-permission으로 정의된 권한이 있는 경우, put-resource-policy가 해당 항목을 덮어씁니다. 변경 사항을 적용하기 전에 get-resource-policy를 사용해 기존 정책을 검색하세요.
전체 JSON 정책 사용(권장)
다음 정책 예시는 함수를 호출할 AWS 계정 권한 2개를 부여하며, 하나는 특정 IAM 역할로만 제한됩니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-invoke", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:role/cross-account-role" ] }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function" } ] }
정책을 이름이 policy.json인 파일에 저장하고 적용합니다. resource-arn은 함수, 버전 또는 별칭을 지정할 수 있습니다.
aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function\ --policy file://policy.json
별칭을 사용해 교차 계정 액세스를 특정 버전으로만 제한할 수도 있습니다. 다음 정책은 prod 별칭을 통해서만 호출 액세스 권한을 부여합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-prod-alias", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function:prod" } ] }
이 정책을 이름이 alias-policy.json인 파일에 저장하고 별칭에 적용합니다.
aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function:prod\ --policy file://alias-policy.json
리소스 기반 정책은 다른 계정에서 함수에 액세스할 수 있는 권한을 부여하지만, 해당 계정의 사용자가 권한을 초과하도록 허용하지 않습니다. 다른 계정의 사용자는 Lambda API를 사용할 수 있는 해당 사용자 권한이 있어야 합니다.
기존 함수에서 작업을 수행하는 대부분의 API 작업에 대해 교차 계정 액세스 권한을 부여할 수 있습니다. 예를 들어 계정에서 별칭 목록을 확인할 수 있게 하려면 lambda:ListAliases에 대한 액세스를 부여하고, 함수 코드를 다운로드할 수 있게 하려면 lambda:GetFunction에 대한 액세스를 부여할 수 있습니다.
여러 함수에 대한 권한 또는 함수에서 작업을 수행하지 않는 작업에 대한 권한을 다른 계정에 부여하려면 IAM 역할을 사용하는 것이 좋습니다.
add-permission 사용
간단한 사용 사례의 경우, add-permission을 사용해 개별 문을 추가할 수 있습니다. 다음 예제는 계정 111122223333에 별칭 prod를 사용해 my-function를 호출할 권한을 부여합니다.
aws lambda add-permission \ --function-name my-function:prod\ --statement-id xaccount \ --action lambda:InvokeFunction \ --principal111122223333\ --output text
다음 결과가 표시됩니다.
{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-1:123456789012:function:my-function"}
참고
add-permission을 put-resource-policy 이후에 호출하면 새 문이 기존 JSON에 추가됩니다.
사용자 또는 다른 계정의 역할에 대한 액세스 제한을 위해서는 ID의 전체 ARN을 보안 주체로 지정합니다. 예를 들어 arn:aws:iam::123456789012:user/developer입니다.