23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
Identity and Access Management(IAM)은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다.
AWS 웹콘솔에 접근하는 사용자들의 경우, IAM User를 발급 받아 직접 로그인을 하거나,
IAM Identity Center에서 AD와 연동하여 사용자 별 IAM Role(Permission Set)을 임시로 할당 받아 SSO로 로그인 합니다.
Athena, Sagemaker, S3 등 AWS 웹콘솔을 통한 매니지드 서비스를 사용자들에게 제공하는 경우,
일반적으로 개인 별 WorkGroup, 개인 별 Domain, 개인 별 디렉토리 환경을 구성하여 접근하도록 합니다.
이러한 구성을 할 때 사용자 별 권한 분리를 명확하게 하지 않을 경우, 리소스 안전성이 보장되지 않고 비용에 대한 추적도 어려워집니다.
(예를 들어 A라는 사용자가 B의 Athena WorkGroup에서 쿼리를 날리면 안되겠죠?)
때문에 사용자 별 개인용 리소스에 대한 접근 권한 분리를 해주어야 하는데요,
사용자가 두 명밖에 없다면 두 개의 IAM Policy를 만들어서 각각의 사용자에게 부여하면 되겠지만,
사용자가 많아질 경우 사용자 수 만큼 IAM Policy를 늘리기엔 관리가 힘들어집니다.
하여 AWS 정책변수를 활용하여 각 사용자 리소스 별 IAM Policy를 설계하는 방법을 공유 드리고자 합니다.
위와 같이 zero-user-bucket 이라는 S3 버킷 아래에 user1, user2 디렉토리를 만들어 두었습니다.
그리고 user1이라는 IAM User를 생성하여, s3-policy-test라는 IAM Policy를 할당하였습니다.
s3-policy-test의 내용은 아래와 같습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::zero-user-bucket"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"",
"${aws:username}",
"${aws:username}/*"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::zero-user-bucket/${aws:username}",
"arn:aws:s3:::zero-user-bucket/${aws:username}/*"
]
}
]
}{aws:username}라는 정책변수는, 접근한 IAM User의 이름을 반환해 줍니다.
우리는 user1 이라는 디렉토리를 만들었기 때문에, 위 권한을 통해 user1 IAM User는 자신의 이름과 동일한 user1 디렉토리에만 접근 권한을 갖고, user2 디렉토리는 접근할 수 없도록 policy를 설계하였습니다.
그럼 접근 테스트를 해보겠습니다.
-> user1 디렉토리는 정상적으로 접근이 됩니다.
-> user2 디렉토리는 접근이 되지 않습니다.
이로써 원하는 대로 설계한 policy가 리소스 이름에 따라 권한이 부여됨을 확인할 수 있었습니다.
이번엔 Athena Workgroup에 대해 Tag 기반으로 접근 권한을 부여해 보겠습니다.
위와 같이 2개의 Athena Workgroup을 만들어 두었습니다.
그리고 각각의 Workgroup에는 해당 Workgroup 소유자에 대한 Tag 정보를 기입하였습니다.
< user1-workgroup >
< user2-workgroup >
그리고 user1 IAM User에서 태그 기반 Athena 접근을 하기 위해 아래와 같이 athena-policy-test라는 IAM Policy를 추가 할당하였습니다.
내용은 아래와 같습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"*"
],
"Condition": {
"ForAnyValue:StringEquals": {
"aws:CalledVia": [
"athena.amazonaws.com"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"glue:*"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"athena:*"
],
"Resource": [
"*"
],
"Condition": {
"StringEquals": {
"aws:ResourceTag/owner": "${aws:username}"
}
}
}
]
}위 내용을 보면, Resource Tag의 'owner' 키의 값이 {aws:username}과 일치하는 리소스에 대해서만 athena 권한을 획득할 수 있도록 하였습니다.
이제 테스트를 해보겠습니다.
-> user1-workgroup에서는 테이블 생성 쿼리가 정상적으로 수행됩니다.
-> user2-workgroup에서는 athena:GetWorkGroup 권한을 획득하지 못하여 에러가 발생합니다.
이로써 정상적으로 Tag 기반 사용자 별 리소스 권한 부여가 적용되었음을 확인할 수 있었습니다.
AWS 공식 문서를 보면, 아래와 같이 IAM User가 아닌 Federation 혹은 Assume Role 사용자는 {aws:username} 정책변수가 존재하지 않습니다.
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_variables.html
이러한 경우에는 {aws:userid}라는 정책변수를 사용해 주면 됩니다.
userid 값은 아래와 같이 AWS STS CLI를 통해 얻어낼 수 있습니다.
(제가 확인한 바로는 웹콘솔 상에서는 해당 값을 확인할 수 없는 것 같았습니다.)
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.