Site icon 지락문화예술공작단

IAM 정책 요약 기능 출시! JSON 문법의 복잡한 정책을 손쉽게 이해하기

IAM 정책 요약 기능 출시! JSON 문법의 복잡한 정책을 손쉽게 이해하기

오늘 부터 IAM 콘솔에 정책 요약(Policy Summary)기능을 추가하여, AWS IAM 정책 사용 권한을 보다 쉽게 ​​이해할 수 있습니다. JSON 문서를 보는 대신 AWS 서비스, 작업, 리소스 및 각 정책 조건을 요약 한 테이블을 보실 수 있습니다. 본 정책 요약 기능은 정책 정보 페이지 또는 개별 IAM 사용자 페이지 Permissions 탭에서 찾을 수 있습니다.

이 글에서는 정책 요약 기능과 세부 사항을 소개합니다.

정책 요약 기능 사용하기
다음 스크린 샷은 정책 요약 예제를 보여줍니다. 이 표에는 각 서비스가 부여한 접근 수준, 자원 및 조건을 한 눈에 볼 수 있습니다.

정책 요약의 각 열은 다음과 같이 정의됩니다.

JSON에서 정책을 읽고 관리하려는 경우, 정책 요약 위의 View and edit JSON을 선택하십시오.  정책 요약 예제를 살펴보기 전에 새로운 개념인 접근 수준을 자세히 설명하겠습니다.

접근 수준 알아보기
IAM 정책에 정의한 권한을 이해하는 데 도움이 되도록 각 AWS 서비스의 작업은 목록 보기, 읽기, 쓰기 및 전체 권한 관리 등 네 가지 접근 수준으로 분류됩니다. 아래 표는 Amazon S3 접근 수준을 정의하고 이를 사용하는 예제를 제공합니다. Full 및 Limited는 각 서비스에 대한 접근 수준을 추가로 제한합니다. Full은 수준 내의 모든 동작을 나타내며, Limited는 접근 수준에서 하나 이상의 동작을 나타내지만, 모든 동작을 의미하지는 않습니다.  (참고: 자세한 사항은 AWS IAM Policy Actions Grouped by Access Level  문서를 참고하시기 바랍니다.)

접근 수준
소개 예제
List 리소스 목록을 볼 수 있는 작업 s3:ListBucket, s3:ListAllMyBuckets
Read 리소스의 내용을 읽을 수 있는 작업 s3:GetObject, s3:GetBucketTagging
Write 자원을 생성, 삭제 또는 수정할 수있는 작업 s3:PutObject, s3:DeleteBucket
Permissions management 리소스에 대한 사용 권한을 부여하거나 수정할 수있는 작업 s3:PutBucketPolicy

참고: 모든 AWS 서비스가 같은 접근 수준 작업을 제공하는 것은 아닙니다.

아래 스크린샷에서 S3의 접근 수준은 전체(Full) 접근 가능입니다. 즉, IAM 정책이 S3 목록 보기, 읽기, 쓰기 및 권한 관리 접근 수준의 모든 작업을 허용한다는 것을 의미합니다. EC2에 대한 접근 수준은 Full: List, Read 및 Limited: Write입니다. 즉, 정책이 List 및 Read 접근 수준의 모든 동작을 허용하지만, 쓰기 접근 수준 동작의 일부만 허용합니다. 정책 요약에서 서비스를 선택하여 정책에 정의 된 특정 작업을 볼 수 있습니다.

접근 요약 세부적으로 보기
IAM 콘솔에서 정책 요약을 살펴 보겠습니다. Alice라는 사용자는 데이터를 분석하고 재무팀에 대한 분기 보고서를 생성하는 개발자입니다. 그에게 필요한 권한을 부여하기 위해 Data_Analytics IAM 그룹에 추가했습니다.

사용자 Alice에 첨부 된 정책을 보려면 IAM 콘솔 사용자 페이지에서 사용자 이름을 선택하여 사용자 페이지로 이동합니다. 아래 스크린 샷은 Alice에게 3 가지 정책이 첨부되어 있음을 보여줍니다.

이제 Data_Analytics 정책에 정의 된 사용 권한을 검토해 봅니다. 먼저 여러 가지 보기를 비교할 수 있도록 먼저 JSON 구문을 살펴 보겠습니다.

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "autoscaling:*",
            "ec2:CancelSpotInstanceRequests",
            "ec2:CancelSpotFleetRequests",
            "ec2:CreateTags",
            "ec2:DeleteTags",
            "ec2:Describe*",
            "ec2:ModifyImageAttribute",
            "ec2:ModifyInstanceAttribute",
            "ec2:ModifySpotFleetRequest",
            "ec2:RequestSpotInstances",
            "ec2:RequestSpotFleet",
            "elasticmapreduce:*",
            "es:Describe*",
            "es:List*",
            "es:Update*",
            "es:Add*",
            "es:Create*",
            "es:Delete*",
            "es:Remove*",
            "lambda:Create*",
            "lambda:Delete*",
            "lambda:Get*",
            "lambda:InvokeFunction",
            "lambda:Update*",
            "lambda:List*"
        ],
        "Resource": "*"
    },

    {
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:PutObject",
            "s3:PutBucketPolicy"
        ],
        "Resource": [
            "arn:aws:s3:::DataTeam"
        ],
        "Condition": {
            "StringLike": {
                "s3:prefix": [
                    "Sales/*"
                ]
            }
        }
    }, 
	{
        "Effect": "Allow",
        "Action": [
            "elasticfilesystem:*"
        ],
        "Resource": [
            "arn:aws:elasticfilesystem:*:111122223333:file-system/2017sales"
        ]
    }, 
	{
        "Effect": "Allow",
        "Action": [
            "rds:*"
        ],
         "Resource": [
            "arn:aws:rds:*:111122223333:db/mySQL_Instance"
        ]
    }, 
	{
        "Effect": "Allow",
        "Action": [
            "dynamodb:*"
         ],
        "Resource": [
            "arn:aws:dynamodb:*:111122223333:table/Sales_2017Annual"
        ]
    }, 
	{
        "Effect": "Allow",
        "Action": [
            "iam:GetInstanceProfile",
            "iam:GetRole",
            "iam:GetPolicy",
            "iam:GetPolicyVersion",
            "iam:ListRoles"
        ],
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "192.0.0.8"
            }
        },
        "Resource": [
            "*"
        ]
    }
  ]
}

정책 요약을 보려면 정책 이름을 선택하여 정책 페이지로 이동하거나, 정책 이름 옆에 있는 화살표를 선택하면 Alice의 사용자 페이지에서 정책 요약이 확장됩니다. 아래 스크린샷은 Alice에 첨부 된 Data_Analytics 정책의 정책 요약을 보여줍니다.

이 정책 요약을 보면 Alice가 다양한 접근 수준을 가진 여러 서비스에 접근할 수 있음을 한 눈에 알 수 있습니다. Amazon EMR에 대한 모든 접근 권한이 있지만 IAM에 대한 제한된 목록 및 제한된 읽기 권한만 있습니다. 또한 각 서비스에 부여되는 리소스 및 조건에 대한 상위 수준의 요약을 볼 수 있습니다. 이 정책에서 Alice는 Amazon EFS의 2017sales 파일 시스템과 하나의 Amazon RDS 인스턴스에만 접근할 수 있습니다. 또한, 여러 Amazon S3 버킷 및 Amazon DynamoDB 테이블에 접근할 수 있습니다. 요청 조건 열을 보면, Alice가 특정 IP 범위에서만 IAM에 접근할 수 있습니다. 리소스 및 요청 조건에 대한 자세한 내용은Understanding Policy Summaries in the AWS Management Console 설명서를 참조하십시오.

정책 요약에서 서비스에 부여 된 특정 작업을 보려면 서비스 이름을 선택합니다. 예를 들어, Elasticsearch를 선택하면 아래 스크린 샷과 같이 접근 수준별로 정리 된 모든 작업을 볼 수 있습니다. 이 경우 Alice는 모든 Amazon ES 리소스에 접근할 수 있으며 요청(request) 조건은 가지고 있지 않습니다.

예외사항
복잡하거나 인식 할 수 없는 작업이 포함 된 정책의 경우, 정책 요약은 사람이 읽을 수 있는 단순한 테이블을 생성하지 못할 수 있습니다. 이러한 경우, 정책 요약 없이 JSON 정책을 계속 보여주게 됩니다.Deny 문을 포함하는 정책의 경우, 정책이 명시적으로 거부하는 사용 권한을 보여주는 별도의 테이블을 보여줍니다. 이 설명서에는 Allow 문과 Deny 문을 모두 포함하는 정책 요약 예제가 나와 있습니다.

AWS 계정의 정책 요약을 보려면 IAM 콘솔에 로그인하고 IAM 콘솔의 정책 페이지 또는 사용자 페이지의 Permissions 탭에서 관리되는 정책으로 이동하시기 바랍니다. 정책 요약을 통해 전체 권한 또는 사용 권한 관리 권한을 가진 사용자를 빠르게 식별하는 등의 특정 권한을 쉽게 검색 할 수 있습니다. 또한 정책을 비교하여 조건을 정의하는 정책을 결정하거나보다 안전한 보안 상태를 위해 리소스를 지정할 수 있습니다.

이 게시물에 대한 의견이나 질문이나 제안 사항이 있으면 IAM 포럼에서 문의해 주시기 바랍니다.

– Joy

이 글은 AWS Security Blog의 Move Over JSON – Policy Summaries Make Understanding IAM Policies Easier의 한국어 번역입니다.

Source: IAM 정책 요약 기능 출시! JSON 문법의 복잡한 정책을 손쉽게 이해하기

Exit mobile version