티스토리 뷰

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

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함