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

AWS: MFA 인증 IAM 사용자가 내 보안 자격 증명(My Security Credentials) 페이지에서 자신의 자격 증명을 관리할 수 있도록 허용합니다.

이 예제에서는 다음과 같은 정책을 생성할 수 있는 방법을 보여 줍니다.에서는 Multi-Factor Authentication(MFA)을 사용하여 인증된 IAM 사용자가 My Security Credentials(내 보안 자격 증명) 페이지에서 자신의 자격 증명을 관리할 수 있도록 허용합니다. 이 AWS Management 콘솔 페이지에는 계정 ID 및 정식 사용자 ID와 같은 계정 정보가 표시됩니다. 또한 사용자는 자신의 암호, 액세스 키, MFA 디바이스, X.509 인증서, SSH 키 및 Git 자격 증명을 보고 편집할 수 있습니다. 이 예제 정책에는 페이지에 있는 모든 정보를 보고 편집하는 데 필요한 권한이 포함되어 있습니다. 또한 사용자가 AWS에서 다른 작업을 수행하기 전에 MFA 사용을 설정하고 인증해야 합니다. 사용자가 MFA를 사용하지 않고 자신의 자격 증명을 관리하도록 허용하려면 AWS: IAM 사용자가 내 보안 자격 증명(My Security Credentials) 페이지에서 자신의 자격 증명을 관리할 수 있도록 허용합니다. 단원을 참조하십시오.

사용자가 My Security Credentials(내 보안 자격 증명) 페이지에 액세스할 수 있는 방법을 알아보려면 IAM 사용자가 자신의 암호를 변경하는 방법(콘솔) 단원을 참조하십시오.

참고

이 정책 예제에서는 사용자가 로그인과 암호 재설정을 한 번에 할 수 없습니다. 새 사용자와 암호가 만료된 사용자는 이 작업을 시도할 수 있습니다. iam:ChangePasswordiam:GetAccountPasswordPolicyDenyAllExceptListedIfNoMFA 문에 추가하여 이를 허용할 수 있습니다. 그러나 IAM에서 이 방식은 권장하지 않습니다. 사용자가 MFA 없이 암호를 변경하도록 허용하면 보안 위험이 발생할 수 있습니다.

이 정책이 하는 일은 무엇입니까?

  • AllowViewAccountInfo 문은 사용자가 계정 수중 정보를 볼 수 있도록 허용합니다. 이러한 권한은 리소스 ARN을 지원하지 않거나 리소스 ARN을 지정하는 데 필요하지 않기 때문에 자신의 문에 포함되어 있어야 합니다. 권한 대신 "Resource" : "*"를 지정합니다. 이 문에는 사용자가 특정 정보를 볼 수 있도록 허용하는 다음 작업이 포함되어 있습니다.

    • GetAccountSummary – 계정 ID 및 계정 정식 사용자 ID를 봅니다.

    • GetAccountPasswordPolicy – 자신의 IAM 사용자 암호를 변경하는 동안 계정 암호 요구 사항을 봅니다.

    • ListVirtualMFADevices – 사용자에 대해 활성화된 가상 MFA 디바이스에 대한 세부 정보를 봅니다.

  • AllowManageOwnPasswords 문은 사용자가 자신의 암호를 변경할 수 있도록 허용합니다. 또한 이 문에는 My Security Credentials(내 보안 자격 증명) 페이지에 있는 대부분의 정보를 보는 데 필요한 GetUser 작업도 포함되어 있습니다.

  • AllowManageOwnAccessKeys 문은 사용자가 자신의 액세스 키를 생성, 업데이트 및 삭제할 수 있도록 허용합니다.

  • AllowManageOwnSigningCertificates 문은 사용자가 자신의 서명 인증서를 업로드, 업데이트 및 삭제할 수 있도록 허용합니다.

  • AllowManageOwnSSHPublicKeys 문은 사용자가 CodeCommit에 대한 자신의 SSH 퍼블릭 키를 업로드, 업데이트 및 삭제할 수 있도록 허용합니다.

  • AllowManageOwnGitCredentials 문은 사용자가 CodeCommit에 대한 자신의 Git 자격 증명을 생성, 업데이트 및 삭제할 수 있도록 허용합니다.

  • AllowManageOwnVirtualMFADevice 문은 사용자가 에 대한 자신의 가상 MFA 디바이스를 생성하고 삭제할 수 있도록 허용합니다. 이 문의 리소스 ARN은 현재 로그인한 사용자와 동일한 이름의 MFA 디바이스에만 액세스를 허용합니다. 사용자는 자신의 것이 아닌 다른 가상 MFA 디바이스를 생성하거나 삭제할 수 없습니다.

  • AllowManageOwnUserMFA 문은 사용자가 자신의 사용자에 대해 가상, U2F 또는 하드웨어 MFA 디바이스를 보거나 관리할 수 있도록 허용합니다. 이 문의 리소스 ARN은 사용자 자신의 IAM 사용자에 대한 액세스만 허용합니다. 사용자는 다른 사용자의 MFA 디바이스를 보거나 관리할 수 없습니다.

  • DenyAllExceptListedIfNoMFA 문은 사용자가 MFA를 사용하여 로그인하지 않은 경우에만 몇 가지 나열된 작업을 제외한 모든 AWS의 모든 작업에 대한 액세스를 거부합니다. 이 문은 "Deny""NotAction"의 조합을 사용하여 나열되지 않은 모든 작업에 대한 액세스를 명시적으로 거부합니다. 나열된 항목은 이 문에 따라 거부되거나 허용되지 않습니다. 하지만 정책의 다른 문에서 작업이 허용됩니다. 이 문의 로직에 대한 자세한 내용은 NotAction 및 Deny 단원을 참조하십시오. 사용자가 MFA를 사용하여 로그인한 경우 Condition 테스트가 실패하며 이 문은 어떠한 작업도 거부하지 않습니다. 이 경우 사용자에 대한 다른 정책 또는 문에 따라 사용자의 권한이 결정됩니다.

    이 문을 사용하면 MFA를 사용하여 로그인하지 않은 사용자는 나열된 작업만 수행할 수 있습니다. 또한 사용자는 다른 문 또는 정책이 해당 작업에 대한 액세스를 허용하는 경우에만 나열된 작업을 수행할 수 있습니다. MFA 권한 부여가 없으면 iam:ChangePassword 작업이 허용되지 않기 때문에 사용자는 로그인 시 암호를 생성할 수 없습니다.

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

이 정책은 사용자가 IAM 콘솔에서 Users(사용자) 페이지를 보거나 이 페이지를 사용하여 자신의 사용자 정보에 액세스할 수 있도록 허용합니다. 이 작업을 허용하려면 iam:ListUsers 작업을 AllowViewAccountInfo 문과 DenyAllExceptListedIfNoMFA 문에 추가합니다. 또한 이 문은 사용자가 자신의 사용자 페이지에서 암호를 변경하도록 허용하지 않습니다. 이 작업을 허용하려면 iam:CreateLoginProfile, iam:DeleteLoginProfile, iam:GetLoginProfileiam:UpdateLoginProfile 작업을 AllowManageOwnPasswords 문에 추가합니다. 또한 사용자가 MFA를 사용하여 로그인하지 않고 자신의 사용자 페이지에서 자신의 암호를 변경할 수 있도록 허용하려면 iam:CreateLoginProfile 작업을 DenyAllExceptListedIfNoMFA 문에 추가합니다.

{ "Version": "2012-10-17", "Statement": [ { "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", "sts:GetSessionToken" ], "Resource": "*", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } } ] }