Lambda 함수에 다른 계정 접근 부여
Lambda 함수에 다른 계정 접근 부여
함수를 다른 AWS 계정과 공유하려면 함수의 리소스 기반 정책에 크로스 계정 권한 문을 추가하세요. 전체 JSON 정책을 만들려면 put-resource-policy를 사용할 것을 권장합니다. put-resource-policy로 여러 보안 주체를 지정하고, 조건을 추가하고, deny 문을 만들 수 있습니다. 간단한 사용 사례에는 add-permission을 사용할 수도 있습니다.
본문
put-resource-policy를 사용하면 리소스의 기존 리소스 기반 정책을 대체합니다. 리소스가 이미 add-permission으로 정의된 권한을 가진다면 put-resource-policy가 이를 덮어씁니다. 변경하기 전에 get-resource-policy로 기존 정책을 검색하세요.
전체 JSON 정책 사용(권장)
다음 예제 정책은 두 AWS 계정에 함수 호출 권한을 부여하며, 그중 하나는 특정 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 별칭을 통해서만 invoke 접근을 부여합니다.
{
"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 \
--principal 111122223333 \
--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"}
put-resource-policy 뒤에 add-permission을 호출하면 새 문이 기존 JSON 정책에 추가됩니다.
다른 계정의 사용자나 역할로 접근을 제한하려면 자격 증명의 전체 ARN을 보안 주체로 지정하세요. 예를 들어 arn:aws:iam::123456789012:user/developer입니다.