

# AWS: MFA 인증 IAM 사용자가 보안 인증 페이지에서 자신의 MFA 디바이스를 관리할 수 있도록 허용
<a name="reference_policies_examples_aws_my-sec-creds-self-manage-mfa-only"></a>

이 예시는 [다중 인증(MFA)](id_credentials_mfa.md)을 사용하여 인증된 IAM 사용자가 **보안 인증** 페이지에서 자신의 MFA 디바이스를 관리할 수 있도록 허용하는 자격 증명 기반 정책을 생성하는 방법을 보여줍니다. 이 AWS Management Console 페이지에는 계정 및 사용자 정보가 표시되지만, 사용자는 자신의 MFA 디바이스만 보고 편집할 수 있습니다. 사용자가 MFA를 사용하여 자신의 모든 자격 증명을 관리하도록 허용하려면 [AWS: MFA 인증 IAM 사용자가 보안 인증 페이지에서 자신의 보안 인증을 관리할 수 있도록 허용](reference_policies_examples_aws_my-sec-creds-self-manage.md) 섹션을 참조하세요.

**참고**  
이 정책을 가진 IAM 사용자가 MFA 인증을 받지 않은 경우 이 정책은 MFA를 사용하여 인증하는 데 필요한 AWS 작업을 제외한 모든 해당 작업에 대한 액세스를 거부합니다. AWS CLI 및 AWS API를 사용하려면 IAM 사용자가 먼저 AWS STS [GetSessionToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html) 작업을 사용하여 MFA 토큰을 검색한 다음 해당 토큰을 사용하여 원하는 작업을 인증해야 합니다. 리소스 기반 정책이나 기타 아이덴티티 기반 정책 등의 기타 정책은 다른 서비스의 작업을 허용할 수 있습니다. 이 정책은 IAM 사용자가 MFA 인증을 받지 않은 경우 해당 액세스를 거부합니다.

사용자가 **보안 인증** 페이지에 액세스할 수 있는 방법을 알아보려면 [IAM 사용자가 자신의 암호를 변경하는 방법(콘솔)](id_credentials_passwords_user-change-own.md#ManagingUserPwdSelf-Console) 섹션을 참조하세요.

**이 정책이 하는 일은 무엇입니까?**
+ `AllowViewAccountInfo` 문은 사용자가 사용자에 대해 활성화된 가상 MFA 디바이스에 대한 세부 정보를 볼 수 있도록 허용합니다. 이 권한은 리소스 ARN 지정을 지원하지 않으므로 자신의 문에 들어 있어야 합니다. 그 대신 `"Resource" : "*"`를 지정해야 합니다.
+ `AllowManageOwnVirtualMFADevice` 문은 사용자가 자신의 가상 MFA 디바이스를 생성할 수 있도록 허용합니다. 이 문의 리소스 ARN은 사용자가 임의의 이름으로 MFA 디바이스를 생성할 수 있도록 허용하지만 정책의 다른 문은 사용자가 현재 로그인한 사용자에게만 디바이스를 연결할 수 있도록 허용합니다.
+ `AllowManageOwnUserMFA` 문은 사용자가 자신의 가상, U2F 또는 하드웨어 MFA 디바이스를 보거나 관리할 수 있도록 허용합니다. 이 문의 리소스 ARN은 사용자 자신의 IAM 사용자에 대한 액세스만 허용합니다. 사용자는 다른 사용자의 MFA 디바이스를 보거나 관리할 수 없습니다.
+ `DenyAllExceptListedIfNoMFA` 문은 사용자가 MFA를 사용하여 로그인하지 않은 ***경우에만*** 몇 가지 나열된 작업을 제외한 모든 AWS의 모든 작업에 대한 액세스를 거부합니다. 이 문은 `"Deny"` 및 `"NotAction"`의 조합을 사용하여 나열되지 않은 모든 작업에 대한 액세스를 명시적으로 거부합니다. 나열된 항목은 이 문에 따라 거부되거나 허용되지 않습니다. 하지만 정책의 다른 문에서 작업이 허용됩니다. 이 문의 로직에 대한 자세한 내용은 [NotAction 및 Deny](reference_policies_elements_notaction.md) 섹션을 참조하세요. 사용자가 MFA를 사용하여 로그인한 경우 `Condition` 테스트가 실패하며 이 문은 어떠한 작업도 거부하지 않습니다. 이 경우 사용자에 대한 다른 정책 또는 문에 따라 사용자의 권한이 결정됩니다.

  이 문을 사용하면 MFA를 사용하여 로그인하지 않은 사용자는 나열된 작업만 수행할 수 있습니다. 또한 사용자는 다른 문 또는 정책이 해당 작업에 대한 액세스를 허용하는 경우에만 나열된 작업을 수행할 수 있습니다.

  `...IfExists` 키를 분실했을 경우 `Bool` 연산자의 `aws:MultiFactorAuthPresent` 버전은 조건이 true로 반환됩니다. 따라서 액세스 키와 같은 장기 자격 증명을 사용하여 API 작업에 액세스하는 사용자는 비 IAM API 작업에 대한 액세스가 거부됩니다.

이 정책은 사용자가 IAM 콘솔에서 **사용자** 페이지를 보거나 이 페이지를 사용하여 자신의 사용자 정보에 액세스할 수 있도록 허용합니다. 이 작업을 허용하려면 `iam:ListUsers` 작업을 `AllowViewAccountInfo` 문과 `DenyAllExceptListedIfNoMFA` 문에 추가합니다.

**주의**  
MFA 인증 없이 MFA 디바이스를 삭제할 수 있는 권한을 추가하지 마세요. 이 정책을 보유한 사용자는 스스로를 가상 MFA 디바이스로 지정하려 하고 `iam:DeleteVirtualMFADevice` 수행에 필요한 권한이 부여되지 않았다는 오류가 표시될 수 있습니다. 이 경우 `DenyAllExceptListedIfNoMFA` 문에 해당 권한을 추가하지 **마세요**. MFA를 사용하여 인증되지 않은 사용자에게 MFA 디바이스 삭제를 허용해서는 안 됩니다. 이전에 사용자에게 가상 MFA 디바이스를 할당하기 시작하고 프로세스를 취소한 경우 이 오류가 표시될 수 있습니다. 이 문제를 해결하려면 사용자 또는 다른 관리자가 AWS CLI 또는 AWS API를 사용하여 사용자의 기존 가상 MFA 디바이스를 삭제해야 합니다. 자세한 내용은 [iam:DeleteVirtualMFADevice를 수행할 권한이 없음](troubleshoot.md#troubleshoot_general_access-denied-delete-mfa) 단원을 참조하세요.

------
#### [ JSON ]

****  

```
{
    "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"}
            }
        }
    ]
}
```

------