AWS: MFA 인증받은 IAM 사용자가 보안 자격 증명(Security credentials) 페이지에서 본인 MFA 디바이스 관리하기

AWS: MFA 인증받은 IAM 사용자가 보안 자격 증명(Security credentials) 페이지에서 본인 MFA 디바이스 관리하기

이 예시는 다중 인증(MFA)으로 인증한 IAM 사용자가 Security credentials 페이지에서 본인 MFA 디바이스를 관리하도록 허용하는 자격 증명 기반 정책을 만드는 방법을 보여드려요. 이 콘솔 페이지에는 계정과 사용자 정보가 표시되지만, 사용자는 본인의 MFA 디바이스만 보고 편집할 수 있어요.

MFA를 포함해 본인의 모든 자격 증명을 관리하게 하려면 AWS: Allows MFA-authenticated IAM users to manage their own credentials 문서를 참고하세요.

출처: 문서

본문

참고 사항

이 정책을 가진 IAM 사용자가 MFA로 인증되지 않았다면, 이 정책은 MFA 인증에 필요한 액션을 제외한 모든 AWS 액션에 대한 액세스를 거부해요. AWS CLI와 AWS API를 사용하려면 IAM 사용자가 먼저 AWS STS GetSessionToken 작업으로 MFA 토큰을 받아야 하고, 그 토큰으로 원하는 작업을 인증해야 해요. 리소스 기반 정책이나 다른 자격 증명 기반 정책 같은 다른 정책이 다른 서비스의 액션을 허용할 수 있지만, IAM 사용자가 MFA로 인증되지 않았다면 이 정책이 그 액세스를 거부해요.

이 정책이 하는 일

AllowViewAccountInfo 스테이트먼트는 사용자에게 활성화된 가상 MFA 디바이스에 대한 상세 정보를 볼 수 있게 해줘요. 이 권한은 리소스 ARN 지정을 지원하지 않아 별도의 스테이트먼트로 분리하며, "Resource" : "*"를 지정해야 해요.

AllowManageOwnVirtualMFADevice 스테이트먼트는 본인 가상 MFA 디바이스를 생성할 수 있게 해줘요. 이 스테이트먼트의 리소스 ARN은 어떤 이름으로든 MFA 디바이스를 만들 수 있게 하지만, 정책의 다른 스테이트먼트들은 현재 로그인한 사용자에게만 디바이스를 연결하도록 허용해요.

AllowManageOwnUserMFA 스테이트먼트는 본인 사용자의 가상·U2F·하드웨어 MFA 디바이스를 보거나 관리할 수 있게 해줘요. 이 스테이트먼트의 리소스 ARN은 사용자 본인의 IAM 사용자에게만 액세스를 허용해요. 다른 사용자의 MFA 디바이스는 보거나 관리할 수 없어요.

DenyAllExceptListedIfNoMFA 스테이트먼트는 사용자가 MFA로 로그인하지 않은 경우, 나열된 몇 개 액션을 제외한 모든 AWS 서비스의 모든 액션에 대한 액세스를 거부해요. 이 스테이트먼트는 "Deny"와 "NotAction"을 조합해 나열되지 않은 모든 액션에 대한 액세스를 명시적으로 거부해요. 나열된 항목은 이 스테이트먼트로 거부되거나 허용되지 않지만, 다른 스테이트먼트에서 허용돼요. 이 논리에 대한 자세한 내용은 NotAction with Deny 문서를 참고하세요.

만약 사용자가 MFA로 로그인했다면 Condition 테스트가 실패해서 이 스테이트먼트는 어떤 액션도 거부하지 않아요. 이 경우 사용자에 대한 다른 정책이나 스테이트먼트가 사용자 권한을 결정해요. Bool 연산자의 ...IfExists 버전은 aws:MultiFactorAuthPresent 키가 없으면 조건이 true를 반환하게 해줘요. 즉 액세스 키 같은 장기 자격 증명으로 API 작업에 접근하는 사용자는 IAM 외의 API 작업에 대한 액세스가 거부돼요.

이 정책은 IAM 콘솔의 Users 페이지를 보거나 그 페이지에서 본인 사용자 정보에 접근하는 것을 허용하지 않아요. 이 기능을 허용하려면 iam:ListUsers 액션을 AllowViewAccountInfo 스테이트먼트와 DenyAllExceptListedIfNoMFA 스테이트먼트에 추가하면 돼요.

경고

MFA 인증 없이 MFA 디바이스를 삭제하는 권한을 추가하지 마세요. 이 정책을 가진 사용자가 본인에게 가상 MFA 디바이스를 할당하려다 iam:DeleteVirtualMFADevice를 수행할 권한이 없다는 오류를 받을 수 있어요. 이런 경우 그 권한을 DenyAllExceptListedIfNoMFA 스테이트먼트에 추가하지 마세요. MFA로 인증되지 않은 사용자는 절대 본인 MFA 디바이스를 삭제할 수 없어야 해요. 사용자가 이전에 가상 MFA 디바이스를 할당을 시작했다가 과정을 취소한 경우 이 오류를 볼 수 있어요. 이 문제를 해결하려면 관리자가 AWS CLI나 AWS API를 사용해 사용자의 기존 가상 MFA 디바이스를 삭제해야 해요. 자세한 내용은 I am not authorized to perform: iam:DeleteVirtualMFADevice 문서를 참고하세요.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Sid": "AllowViewAccountInfo",
            "Effect": "Allow",
            "Action": "iam:ListVirtualMFADevices",
            "Resource": "*"
        },
        {
            "Sid": "AllowManageOwnVirtualMFADevice",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice"
            ],
            "Resource": "arn:aws:iam::*:mfa/*"
        },
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:GetMFADevice",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "DenyAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:CreateVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice",
                "sts:GetSessionToken"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}
            }
        }
    ]
}

더 알아보기 (Learn more)