티스토리 뷰
IAM을 만들기 특히나 어려운 상황중 하나가 바로 "콘솔"로 접근을 허가해줘할때이다.
예를들면 logs:DescribeLogGroups를 보자.
우리가 아래와 같은 정책에 기대하는건 "특정 로그그룹이 아니면 deny 해주세요." 이다.
{
"Effect": "Deny",
"Action": [
"logs:DescribeLogStreams"
],
"NotResource": [
"arn:aws:logs:ap-northeast-2:*:log-group:specific-log-group"
]
},
하지만 콘솔에서의 현실은?
User: arn:aws:iam::*:user/1234 is not authorized to perform: logs:DescribeLogGroups on resource: arn:aws:logs:ap-northeast-2:*:log-group::log-stream: with an explicit deny in an identity-based policy
결국 콘솔에서 특정 Cloudwatch logs groups만 보도록 허용하려면 logs:DescribeLogGroups는 모두 허용하고,
logs:DescribeLogSteams를 이용해서 로그그룹들은 볼 수 있지만, 내부 내용은 보지 못하도록 설정해야한다.
{
"Sid": "VisualEditor1",
"Effect": "Deny",
"Action": [
"logs:DescribeLogStreams"
],
"NotResource": [
"arn:aws:logs:ap-northeast-2:*:log-group:/aws/rds/cluster/test/error"
]
},
위와 같이 권한을 주게되면 /aws/rds/cluster/test/error 라는 로그그룹 외에 다른 로그그룹의 스트림들은 볼 수 없게 된다.(아래)
User: arn:aws:iam::*:user/rex-rds-test is not authorized to perform: logs:DescribeLogStreams on resource: arn:aws:logs:ap-northeast-2:*:log-group:TESTTEST:log-stream: with an explicit deny in an identity-based policy
RDS 관리자를 위한 IAM이라면서 왜 CloudWatch 얘기를 꺼내느냐? 방금 설명한 내용이 우리가 CLI를 통해 질의할때와 콘솔을 통해 볼때와의 가장 큰 차이이기 때문이다.
사실 아직 완성은 못했지만 지금까지 진행한 내용을 기록하고, 앞으로 계속 추가하려고 한다.
[가정사항]
1. 가능한것
- RDS 관련 모든 것
- 특정 IP에서 계정 사용
2. 불가능한것
- 서브넷 그룹 생성
- 스토리지 암호화 해제
- 싱글 az(이건 고민이다.)
- SecurityGroup 조작(조직마다 다를듯)
기본부여정책 : AmazonRDSFullAccess
SCP : 스토리지 암호화를 해제하면 deny(기본이 설정됨이다.)
여기에 추가로 rds:Vpc(이건 사실상 필요없긴하다.), rds:MultiAz와 같은 옵션을 구성해줘도 된다. 다만 명심할 것은 SCP의 경우 Effect를 Allow로 줄 경우 리소스는 *만 컨디션은 지정할 수 없기 때문에 웬만하면 Deny로 사용하도록 하자.(근데 그것때문에 조건 넣기가 너무 빡세짐..;)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Deny",
"Action": "rds:CreateDBCluster",
"Resource": "*",
"Condition": {
"BoolIfExists": {
"rds:StorageEncrypted": "false"
}
}
}
]
}
사용자정책(진행중)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:ListRoles",
"logs:DescribeLogGroups"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::*:role/rds-monitoring-role"
]
},
{
"Effect": "Deny",
"Action": [
"logs:DescribeLogStreams"
],
"NotResource": [
"arn:aws:logs:ap-northeast-2:*:log-group:/aws/rds/cluster/test/error"
]
},
{
"Effect": "Allow",
"Action": "kms:ListAliases",
"Resource": "arn:aws:kms:ap-northeast-2:*:alias/aws/rds"
},
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "IP/32"
},
"Bool": {
"aws:ViaAWSService": "false"
}
}
}
]
}
글을 다 쓰고 보니 가장 중요한걸 까먹을뻔했다.
처음엔 나도 헷갈렸는데 RDS 관련 작업에서 DBSecurity~ 어쩌고 이런 것들 전부 무시해도 된다. 이제는 vpc 내부에 있기 때문에 ec2:CreateSecurityGroup~ 이런 애들로 권한을 줘야 한다.
참고링크
1. SCP 최대 크기 : https://docs.aws.amazon.com/ko_kr/organizations/latest/userguide/orgs_reference_limits.html
2. SCP는 관리 계정에 영향을 끼치지 않는다. : https://docs.aws.amazon.com/ko_kr/organizations/latest/userguide/orgs_manage_policies_scps.html
3. IAM으로 작업 가능한 서비스 : https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html
4. 소스 IP를 통한 엑세스 제어 : https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html
5. RDS에서 사용되는 리소스, 조건키 등 : https://docs.aws.amazon.com/ko_kr/service-authorization/latest/reference/list_amazonrds.html#amazonrds-rds_Vpc
6. EC2에서 사용되는 리소스, 조건키 등 : https://docs.aws.amazon.com/ko_kr/service-authorization/latest/reference/list_amazonec2.html#amazonec2-vpc
7. RDS VPC : https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_VPC.Scenarios.html
'퍼블릭클라우드 > AWS' 카테고리의 다른 글
OTP를 이용하여 AWS SSM 사용 가능 환경 구성 (0) | 2022.01.23 |
---|---|
AWS MarketPlace 구독 오류에 대해 알아보자 (2) | 2021.12.29 |
AWS SSO를 통한 Windows 접근(이제 비싼 솔루션은 그만!!) (0) | 2021.11.28 |
AWS Control Tower GuardRail SCP (0) | 2021.11.23 |
[CIS AWS v1.3.0] 1.15 Ensure IAM Users Receive Permissions Only Through Groups (0) | 2021.03.07 |
- Total
- Today
- Yesterday
- 우주와컴퓨터
- opensource
- CIS
- terraform
- conftest policy
- Cloud
- aws
- temlate
- REACT
- IAM
- ControlTower
- teplate
- 4xx
- defaulttheme
- 2xx
- compliance
- web
- stateType
- JavaScript
- 계정정보저장
- AWS #CIS
- fleet manager
- ViaAWSService
- platform
- steampipe
- security
- findinglatestversion
- scp
- .get()
- cloudsecurity
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |