태그로 함수 보안
태그로 함수 보안 (ABAC)
다음 단계는 ABAC를 사용해 함수에 대한 권한을 설정하는 한 가지 방법을 보여줘요. 이 예제 시나리오에서는 4개의 IAM 권한 정책을 만든 다음, 이 정책들을 새 IAM 역할에 연결해요. 마지막으로 IAM 사용자를 만들고 그 사용자에게 새 역할을 수임할 권한을 줍니다.
본문
Topics(주제)
- 사전 요구 사항
- 1단계: 새 함수에 태그 요구
- 2단계: Lambda 함수와 IAM 보안 주체에 연결된 태그를 기반으로 작업 허용
- 3단계: 목록 권한 부여
- 4단계: IAM 권한 부여
- 5단계: IAM 역할 만들기
- 6단계: IAM 사용자 만들기
- 7단계: 권한 테스트
- 8단계: 리소스 정리
사전 요구 사항
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으로 바꾸세요.
참고
iam:PassRole 작업이 있는 정책에서 ResourceTag 조건 키를 사용하지 마세요. 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 역할을 만드세요:
- Step 1: Select trusted entity(신뢰할 엔터티 선택): AWS account를 선택한 다음 This account를 선택합니다.
- Step 2: Add permissions(권한 추가): 이전 단계에서 만든 4개의 IAM 정책을 연결합니다.
- Step 3: Name, review, and create(이름, 검토, 생성): Add tag를 선택합니다. Key에
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 역할을 수임하도록 허용
[ JSON ]
{
"Version":"2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::{{111122223333}}:role/{{abac-project-role}}"
}
}
7단계: 권한 테스트
abac-test-user로 AWS 콘솔에 로그인합니다. 자세한 내용은 IAM 사용자로 로그인을 참고하세요.abac-project-role역할로 전환합니다. 자세한 내용은 역할로 전환 (콘솔)을 참고하세요.- Lambda 함수를 만듭니다:
- Permissions 아래에서 Change default execution role을 선택한 다음 Execution role에 대해 Use an existing role을 선택합니다. 4단계: IAM 권한 부여에서 사용한 같은 실행 역할을 선택하세요.
- Advanced settings 아래에서 Enable tags를 선택한 다음 Add new tag를 선택합니다. Key에
project를 입력합니다. Value는 입력하지 않습니다.
- 함수를 테스트합니다.
- 두 번째 Lambda 함수를 만들고
environment같은 다른 태그를 추가합니다. 이 작업은 실패해야 해요. 1단계: 새 함수에 태그 요구에서 만든 ABAC 정책이 보안 주체가project태그로만 함수를 만들 수 있게 허용하기 때문이에요. - 태그 없이 세 번째 함수를 만듭니다. 이 작업은 실패해야 해요. 1단계: 새 함수에 태그 요구에서 만든 ABAC 정책이 보안 주체가 태그 없이 함수를 만들 수 있게 허용하지 않기 때문이에요.
이 권한 부여 전략을 사용하면 새 사용자마다 새 정책을 만들지 않고도 접근을 제어할 수 있어요. 새 사용자에게 접근 권한을 주려면 할당된 프로젝트에 해당하는 역할을 수임할 권한만 부여하면 됩니다.
8단계: 리소스 정리
IAM 역할 삭제하기
- IAM 콘솔의 역할 페이지를 엽니다.
- 5단계에서 만든 역할을 선택합니다.
- Delete(삭제)를 선택합니다.
- 삭제를 확인하려면 텍스트 입력 필드에 역할 이름을 입력합니다.
- Delete(삭제)를 선택합니다.
IAM 사용자 삭제하기
- IAM 콘솔의 Users 페이지를 엽니다.
- 6단계에서 만든 IAM 사용자를 선택합니다.
- Delete(삭제)를 선택합니다.
- 삭제를 확인하려면 텍스트 입력 필드에 사용자 이름을 입력합니다.
- Delete user(사용자 삭제)를 선택합니다.
Lambda 함수 삭제하기
- Lambda 콘솔의 함수 페이지를 엽니다.
- 만든 함수를 선택합니다.
- Actions, Delete를 선택합니다.
- 텍스트 입력 필드에 confirm을 입력하고 Delete를 선택합니다.
더 알아보기 (Learn more)
- 태그 기반 ABAC로 함수 권한을 제어하고, 새 함수 태그 요구, 함수·보안 주체 태그 일치, 역할·사용자·테스트·정리 단계를 익혀 보세요.