Infra/AWS IAM 유저생성 & MFA 설정

jinholee·2023년 8월 7일

aws

목록 보기
1/1

AWS IAM 유저를 생성하고 MFA 설정하기

AWS를 이용 할 때는 루트 계정을 사용 하게 되면 모든 리소스의 권한을 가지고 있고

루트 계정의 활동을 추적하는게 어렵기 때문에 IAM유저를 생성해서 사용하는것이 좋다.

IAM유저에는 보안상 MFA를 적용하면 콘솔 또는 CLI, API 접근시 OTP를 이용하여 인증을 거친뒤

리소스에 접근할 수 있게되기 때문에 보안적으로 안전하며 AWS의 모범적인 IAM 보안 방법이다.

또한 IAM 유저의 비밀번호도 주기적으로 변경 하는것이 좋다.

Force_MFA 정책 생성

정책 Json 참고 : https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_examples_aws_my-sec-creds-self-manage.html

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowChangePassword",
            "Effect": "Allow",
            "Action": [
                "iam:ChangePassword"
            ],
            "Resource": [
                "arn:aws:iam::*:user/${aws:username}"
            ]
        },
        {
            "Sid": "AllowGetAccountPasswordPolicy",
            "Effect": "Allow",
            "Action": [
                "iam:GetAccountPasswordPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowViewAccountInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetAccountPasswordPolicy",
                "iam:GetAccountSummary",
                "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",
                "iam:ChangePassword",
                "iam:GetAccountPasswordPolicy",
                "sts:GetSessionToken"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}코드를 입력하세요

IAM 유저 생성



IAM 유저에 강제 MFA적용 후 생성

새로만든 IAM 유저로 콘솔 로그인 후 IAM 대시보드

아직 MFA가 미적용 되어 리소스들의 권한이 다 막혀있음

빨간 네모로 표시된 곳을 클릭하여 MFA설정


Google Authenticator앱 또는 다른 앱을 설치하여 QR 코드 인식 후 MFA코드1을 입력후 시간이 지난뒤 연달아 나오는 MFA코드 2를 입력하면 끝


여기 까지는 IAM 유저 생성과 강제 MFA정책 적용

비밀번호 정책 설정하기

여기에 비밀번호 정책도 설정하여 주기적으로 비밀번호를 변경한다면 보안적으로 더 안전해지게 된다.

IAM 대시보드 > 계정설정 > 암호정책 편집

MFA를 적용하면 보안적으로 좋긴 하지만

AWS CLI 사용시 MFA인증을 통하여 임시자격을 발급받아 AWS리소스에 접근가능

profile
muchthink

1개의 댓글

comment-user-thumbnail
2023년 8월 7일

좋은 글 감사합니다.

답글 달기