다음 단계에서는 ABAC를 사용하여 함수에 대한 권한을 설정하는 한 가지 방법을 보여줍니다. 이 예제 시나리오에서는 4개의 IAM 권한 정책을 생성합니다. 그런 다음 이러한 정책을 새 IAM 역할에 연결합니다. 마지막으로 IAM 사용자를 만들고 해당 사용자에게 새 역할을 수임할 권한을 부여합니다.
주제
사전 조건
Lambda 실행 역할이 있는지 확인하십시오. IAM 권한을 부여할 떄와 Lambda 함수를 만들 때 이 역할을 사용합니다.
1단계: 새 함수에 태그 필요
Lambda와 함께 ABAC를 사용하는 경우 모든 함수에 태그가 필요한 것이 모범 사례입니다. 이렇게 하면 ABAC 권한 정책이 예상대로 작동할 수 있습니다.
다음과 비슷한 IAM 정책을 생성합니다. 이 정책은 aws:RequestTag/tag-key, aws:ResourceTag/tag-key 및 aws:TagKeys 조건 키를 사용하여 새 함수와 해당 함수를 생성하는 IAM 보안 주체가 모두 project
태그를 갖도록 요구합니다. ForAllValues
수정자는 project
태그만 허용되게 합니다. ForAllValues
수정자를 포함하지 않는 경우 사용자는 project
울(를) 통과하는 한 함수에 다른 태그를 추가할 수 있습니다.
예 - 새 함수에 태그 필요
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:TagResource" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:RequestTag/
project
": "${aws:PrincipalTag/project
}", "aws:ResourceTag/project
": "${aws:PrincipalTag/project
}" }, "ForAllValues:StringEquals": { "aws:TagKeys": "project
" } } } }
2단계: Lambda 함수 및 IAM 보안 주체에 연결된 태그를 기반으로 작업 허용
aws:ResourceTag/tag-key 조건 키를 사용하여 보안 주체의 태그가 함수에 연결된 태그와 일치할 것을 요구하는 두 번째 IAM 정책을 생성합니다.. 다음 예제 정책에서는 project
태그가 있는 보안 주체가 project
태그가 있는 함수를 간접 호출하도록 허용합니다. 함수에 다른 태그가 있으면 작업이 거부됩니다.
예 — 함수와 IAM 보안 주체에 일치하는 태그 필요
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:ResourceTag/
project
": "${aws:PrincipalTag/project
}" } } } ] }
3단계: 목록 권한 부여
보안 주체가 Lambda 함수 및 IAM 역할을 나열할 수 있도록 허용하는 정책을 생성합니다. 이렇게 하면 보안 주체가 콘솔에서 그리고 API 작업을 호출할 때 모든 Lambda 함수와 IAM 역할을 볼 수 있습니다.
예 — Lambda 및 IAM 목록 권한 부여
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllResourcesLambdaNoTags",
"Effect": "Allow",
"Action": [
"lambda:GetAccountSettings",
"lambda:ListFunctions",
"iam:ListRoles"
],
"Resource": "*"
}
]
}
4단계: IAM 권한 부여
iam:PassRole을 허용하는 정책을 생성합니다. 이 권한은 함수에 실행 역할을 할당할 때 필요합니다. 다음 예제 정책에서는 예제 ARN을 Lambda 실행 역할의 ARN으로 바꿉니다.
참고
ResourceTag
작업을 포함하는 정책에는 iam:PassRole
조건 키를 사용하지 마세요. IAM 역할에서는 태그를 사용하여 누가 해당 역할을 전달할 수 있는지 액세스 권한을 제어할 수 없습니다. 서비스에 역할을 전달할 수 있는 권한 부여에 대한 자세한 내용은 사용자에게 AWS 서비스에 역할을 전달할 권한 부여를 참조하세요.
예 — 실행 역할을 전달할 수 있는 권한 부여
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "
arn:aws:iam::111122223333:role/lambda-ex
" } ] }
5단계 - IAM 역할 생성
역할을 사용하여 권한을 위임하는 모범 사례입니다. abac-project-role
이라고 하는 IAM 역할 생성:
-
1단계: 신뢰할 수 있는 엔터티 선택(Step 1: Select trusted entity)에서 AWS 계정( account)을 선택한 다음 이 계정(This account)을 선택합니다.
-
2단계: 권한 추가(Step 2: Add permissions)에서는 이전 단계에서 생성한 네 가지 IAM 정책을 연결합니다.
-
3단계: 이름, 검토 및 생성(Step 3: Name, review, and create)에서는 태그 추가(Add tag)를 선택합니다. 키에
project
를 입력합니다. 값(Value)을 입력하지 마십시오.
6단계: IAM 사용자 생성
abac-test-user
(이)라고 하는 IAM 사용자를 생성합니다. 권한 설정(Set permissions) 섹션에서 기존 정책 직접 연결(Attach existing policies directly)을 선택한 후 정책 생성(Create policy)을 선택합니다. 다음 정책 정의를 입력합니다. 111122223333
을 AWS 계정 ID로 바꿉니다. 이 정책은 abac-test-user
이(가) abac-project-role
을(를) 수임할 수 있게 허용합니다.
예 — IAM 사용자가 ABAC 역할을 수임할 수 있게 허용
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
111122223333
:role/abac-project-role
" } }
7단계: 권한 테스트
-
AWS 콘솔에
abac-test-user
(으)로 로그인합니다. 자세한 정보는 IAM 사용자로 로그인을 참조하십시오. -
abac-project-role
역할로 전환합니다. 자세한 내용은 역할(콘솔) 전환을 참조하십시오. -
-
권한(Permissions)에서 기본 실행 역할 변경(Change default execution role)을 선택하고 실행 역할(Execution role)을 선택한 후 기존 역할 사용(Use an existing role)을 선택합니다. 4단계: IAM 권한 부여에서 사용한 것과 동일한 실행 역할을 선택합니다.
-
고급 설정(Advanced settings)에서 태그 사용(Enable tags)를 선택한 다음 새 태그 추가(Add new tag)를 선택합니다. 키에
project
를 입력합니다. 값(Value)을 입력하지 마십시오.
-
-
두 번째 Lambda 함수를 생성하고 다른 태그(예:
environment
)를 추가합니다. 1단계: 새 함수에 태그 필요에서 만든 ABAC 정책은 보안 주체가project
태그를 사용하여 함수를 만들 수만 있도록 허용하기 때문에 이 작업이 실패합니다. -
태그 없이 세 번째 함수를 만듭니다. 1단계: 새 함수에 태그 필요에서 만든 ABAC 정책은 보안 주체가 태그 없이 함수를 만들 수만 있도록 허용하지 않기 때문에 이 작업이 실패합니다.
이 권한 부여 전략을 사용하면 각 새 사용자에 대해 새 정책을 만들지 않고도 액세스를 제어할 수 있습니다. 새 사용자에게 액세스 권한을 부여하려면 할당된 프로젝트에 해당하는 역할을 수임할 권한을 부여하기만 하면 됩니다.
8단계: 리소스 정리
IAM 역할 삭제
IAM 사용자를 삭제하려면 다음을 수행하세요.
Lambda 함수를 삭제하려면
-
Lambda 콘솔의 함수 페이지
를 엽니다. -
생성한 함수를 선택합니다.
-
작업, 삭제를 선택합니다.
-
텍스트 입력 필드에
confirm
를 입력하고 Delete(삭제)를 선택합니다.