IAM: 여러 서비스에 대한 액세스 허용·거부하기

IAM: 여러 서비스에 대한 액세스 허용·거부하기 (프로그래매틱 및 콘솔)

이 예시는 여러 서비스에 대한 전체 액세스를 허용하고 IAM에서는 제한된 자가 관리 액세스를 허용하는 자격 증명 기반 정책을 만드는 방법을 보여드려요. 또한 Amazon S3 로그 버킷 또는 Amazon EC2 i-1234567890abcdef0 인스턴스에 대한 액세스는 거부해요. 이 정책은 프로그래매틱 액세스와 콘솔 액세스 모두에 대한 권한을 정의해요.

출처: 문서

본문

예시 정책에서 이탤릭체로 표시된 자리표시자 텍스트를 본인 정보로 바꾼 뒤, create a policy 또는 edit a policy의 지침을 따라 적용하면 돼요.

경고

이 정책은 여러 서비스의 모든 액션과 리소스에 대한 전체 액세스를 허용해요. 이 정책은 신뢰할 수 있는 관리자에게만 적용해야 해요.

이 정책을 권한 경계(permissions boundary)로 사용해서 자격 증명 기반 정책이 IAM 사용자에게 부여할 수 있는 최대 권한을 정의할 수도 있어요. 자세한 내용은 Delegating responsibility to others using permissions boundaries 문서를 참고하세요. 이 정책을 사용자의 권한 경계로 사용하면 스테이트먼트들이 다음 경계를 정의해요.

AllowServices 스테이트먼트는 지정된 AWS 서비스에 대한 전체 액세스를 허용해요. 즉 사용자의 이 서비스들에서의 액션은 사용자에게 연결된 권한 정책에 의해서만 제한돼요.

AllowIAMConsoleForCredentials 스테이트먼트는 모든 IAM 사용자를 나열하는 액세스를 허용해요. 이 액세스는 AWS Management Console의 Users 페이지를 탐색하는 데 필요해요. 또한 계정의 비밀번호 요건을 볼 수 있게 해주는데, 사용자가 본인 비밀번호를 변경하는 데 필요해요.

AllowManageOwnPasswordAndAccessKeys 스테이트먼트는 사용자가 본인의 콘솔 비밀번호와 프로그래매틱 액세스 키만 관리할 수 있게 해줘요. 이는 중요한데, 다른 정책이 사용자에게 전체 IAM 액세스를 주면 그 사용자가 본인이나 다른 사용자의 권한을 바꿀 수 있기 때문이에요. 이 스테이트먼트는 그런 일을 막아줘요.

DenyS3Logs 스테이트먼트는 logs 버킷에 대한 액세스를 명시적으로 거부해요. 이 정책은 회사의 사용자 제한을 강제해요.

DenyEC2Production 스테이트먼트는 i-1234567890abcdef0 인스턴스에 대한 액세스를 명시적으로 거부해요.

이 정책은 다른 서비스나 액션에 대한 액세스를 허용하지 않아요. 이 정책을 사용자의 권한 경계로 사용하면, 사용자에게 연결된 다른 정책이 그 액션들을 허용하더라도 AWS는 그 요청을 거부해요.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Sid": "AllowServices",
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "cloudwatch:*",
                "ec2:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowIAMConsoleForCredentials",
            "Effect": "Allow",
            "Action": [
                "iam:ListUsers",
                "iam:GetAccountPasswordPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowManageOwnPasswordAndAccessKeys",
            "Effect": "Allow",
            "Action": [
                "iam:*AccessKey*",
                "iam:ChangePassword",
                "iam:GetUser",
                "iam:*LoginProfile*"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "DenyS3Logs",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::logs",
                "arn:aws:s3:::logs/*"
            ]
        },
        {
            "Sid": "DenyEC2Production",
            "Effect": "Deny",
            "Action": "ec2:*",
            "Resource": "arn:aws:ec2:*:*:instance/i-1234567890abcdef0"
        }
    ]
}

더 알아보기 (Learn more)