본문 바로가기

IT Study/AWS

AWS MFA 강제 보안 정책 설정 방법

AWS Console 접속의 보안을 강화하기 위해서 사용하는 MFA 옵션이 있다.

 

보안 정책을 통해서 모든 사용자들이 MFA를 필수적으로 사용하도록 할 수 있으며,

관리자가 아니라 각 사용자들이 직접 MFA 설정을 진행하도록 설정할 수 있다.

 

AWS에서 제공하는 가이드를 아래 링크와 같이 제공하고 있다.

IAM 자습서: 사용자가 자신의 자격 증명 및 MFA 설정을 관리하도록 허용 - AWS Identity and Access Management (amazon.com)

 

IAM 자습서: 사용자가 자신의 자격 증명 및 MFA 설정을 관리하도록 허용 - AWS Identity and Access Managemen

IAM 자습서: 사용자가 자신의 자격 증명 및 MFA 설정을 관리하도록 허용 사용자가 My security credentials(내 보안 자격 증명) 페이지에서 자신의 다중 인증(MFA) 디바이스와 보안 인증을 스스로 관리하도

docs.aws.amazon.com

AWS: MFA 인증 IAM 사용자가 내 보안 자격 증명(My security credentials) 페이지에서 자신의 보안 인증을 관리할 수 있도록 허용 - AWS Identity and Access Management (amazon.com)

 

AWS: MFA 인증 IAM 사용자가 내 보안 자격 증명(My security credentials) 페이지에서 자신의 보안 인증을

AWS: MFA 인증 IAM 사용자가 내 보안 자격 증명(My security credentials) 페이지에서 자신의 보안 인증을 관리할 수 있도록 허용 이 예제는 다중 인증(MFA)을 사용하여 인증된 IAM 사용자가 My security credentials

docs.aws.amazon.com

 

하지만, 해당 가이드를 통해 설정하게 된다면 최초 사용자가 비밀번호 변경이 필요한 경우 비밀번호를 변경하지 못하고 Error가 발생하게 되는 경우가 발생한다.

MFA 설정 전에는 비밀 번호를 변경할 수 없게 되어 교착상태(?)와 같은 상황으로 빠져버리게 된다.

 

이러한 점을 보완하기 위해서 아래와 같이 정책을 구성하여 MFA 설정 전에도 비밀번호를 변경할 수 있도록 설정해 주는 것을 추천한다.

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowViewAccountInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetAccountPasswordPolicy",
                "iam:ListVirtualMFADevices"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowManageOwnPasswords",
            "Effect": "Allow",
            "Action": [
                "iam:ChangePassword",
                "iam:GetUser"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnAccessKeys",
            "Effect": "Allow",
            "Action": [
                "iam:CreateAccessKey",
                "iam:DeleteAccessKey",
                "iam:ListAccessKeys",
                "iam:UpdateAccessKey"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnSigningCertificates",
            "Effect": "Allow",
            "Action": [
                "iam:DeleteSigningCertificate",
                "iam:ListSigningCertificates",
                "iam:UpdateSigningCertificate",
                "iam:UploadSigningCertificate"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnSSHPublicKeys",
            "Effect": "Allow",
            "Action": [
                "iam:DeleteSSHPublicKey",
                "iam:GetSSHPublicKey",
                "iam:ListSSHPublicKeys",
                "iam:UpdateSSHPublicKey",
                "iam:UploadSSHPublicKey"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnGitCredentials",
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceSpecificCredential",
                "iam:DeleteServiceSpecificCredential",
                "iam:ListServiceSpecificCredentials",
                "iam:ResetServiceSpecificCredential",
                "iam:UpdateServiceSpecificCredential"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnVirtualMFADevice",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice"
            ],
            "Resource": "arn:aws:iam::*:mfa/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "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"
                }
            }
        }
    ]
}

'IT Study > AWS' 카테고리의 다른 글

AWS IAM - 사용자, 그룹, 역할, 정책  (0) 2023.05.31
AWS 사용자 IP로 접근 제한하기  (0) 2023.03.17
AWS EC2 - Placement groups (배치 그룹)  (0) 2023.03.15