

# AWS: permite que os usuários do IAM autenticados por MFA gerenciem suas próprias credenciais na página Credenciais de segurança
<a name="reference_policies_examples_aws_my-sec-creds-self-manage"></a>

Este exemplo mostra como você pode criar uma política baseada em identidade que permita que os usuários do IAM autenticados por [autenticação multifator (MFA)](id_credentials_mfa.md) gerenciem suas próprias credenciais na página **Credenciais de segurança**. Essa página do Console de gerenciamento da AWS exibe as informações de conta, como ID de conta e ID de usuário canônico. Os usuários também podem visualizar e editar as próprias senhas, chaves de acesso, dispositivos MFA e certificados X.509, chaves SSH e credenciais do Git. Esta política de exemplo inclui as permissões necessárias para visualizar e editar todas as informações na página. Ela também exige que o usuário seja configurados e autenticado usando MFA para que possa executar outras operações na AWS. Para permitir que os usuários gerenciem as próprias credenciais sem usar MFA, consulte [AWS: permite que usuários do IAM gerenciem suas próprias credenciais na página Credenciais de segurança](reference_policies_examples_aws_my-sec-creds-self-manage-no-mfa.md).

Para saber como os usuários podem acessar a página **Credenciais de segurança**, consulte [Como os usuários do IAM alteram a própria senha (console)](id_credentials_passwords_user-change-own.md#ManagingUserPwdSelf-Console).

**nota**  
Este exemplo de política não permite que os usuários redefinam uma senha ao fazer login no Console de gerenciamento da AWS pela primeira vez. Recomendamos que você não conceda permissões a novos usuários até que eles façam login. Para obter mais informações, consulte [Como faço para criar usuários do IAM com segurança?](troubleshoot.md#troubleshoot_general_securely-create-iam-users). Isso também impede que os usuários com uma senha expirada redefinam sua senha ao fazerem login. É possível permitir isso adicionando `iam:ChangePassword` e `iam:GetAccountPasswordPolicy` à instrução `DenyAllExceptListedIfNoMFA`. Porém, não recomendamos isso porque permitir que os usuários alterem a senha sem MFA pode ser um risco de segurança.
Caso pretenda usar essa política para acesso programático, será necessário chamar [https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html) para autenticar com o MFA. Para obter mais informações, consulte [Acesso seguro à API com a MFA](id_credentials_mfa_configure-api-require.md).

**O que essa política faz?**
+ A instrução `AllowViewAccountInfo` permite que o usuário visualize informações no nível da conta. Essas permissões devem estar nas suas respectivas instruções, pois não oferecem suporte ou não precisam especificar um ARN de recurso. Em vez disso, as permissões especificam `"Resource" : "*"`. Essa instrução inclui as seguintes ações que permitem que o usuário visualize informações específicas: 
  + `GetAccountPasswordPolicy`: visualizar os requisitos de senha da conta ao mudar a própria senha de usuário do IAM.
  + `ListVirtualMFADevices`: visualize detalhes sobre um dispositivo com MFA virtual habilitado para o usuário.
+ A instrução `AllowManageOwnPasswords` permite que o usuário altere a própria senha. Essa instrução também inclui a ação `GetUser`, que é necessária para visualizar a maioria das informações na página **My security credentials (Minhas credenciais de segurança)**.
+ A instrução `AllowManageOwnAccessKeys` permite que o usuário crie, atualize e exclua as próprias chaves de acesso. O usuário também pode recuperar informações sobre quando a chave de acesso foi usada pela última vez.
+ A instrução `AllowManageOwnSigningCertificates` permite que o usuário carregue, atualize e exclua os próprios certificados de assinatura.
+ A instrução `AllowManageOwnSSHPublicKeys` permite que o usuário carregue, atualize e exclua as próprias chaves públicas SSH para o CodeCommit.
+ A instrução `AllowManageOwnGitCredentials` permite que o usuário crie, atualize e exclua as próprias credenciais do Git para o CodeCommit.
+ A instrução `AllowManageOwnVirtualMFADevice` permite que o usuário crie o próprio dispositivo de MFA virtual. O ARN do recurso dessa instrução permite que o usuário crie um dispositivo de MFA com qualquer nome, mas outras instruções da política permitem apenas que o usuário anexe o dispositivo ao usuário conectado.
+ A instrução `AllowManageOwnUserMFA` permite que o usuário visualize ou gerencie o dispositivo MFA virtual, U2F ou de hardware para o próprio usuário. O recurso ARN nesta instrução permite acesso apenas ao próprio usuário do IAM do usuário. Os usuários não podem visualizar ou gerenciar o dispositivo MFA para outros usuários. 
+ A instrução `DenyAllExceptListedIfNoMFA` nega acesso a todas as ações em todos os serviços da AWS, exceto algumas ações listadas, mas ***somente se*** o usuário não estiver conectado com MFA. A instrução usa uma combinação de `"Deny"` e `"NotAction"` para negar explicitamente acesso a cada ação que não está listada. Os itens listados não são negados ou permitidos por essa instrução. No entanto, as ações são permitidas por outras instruções na política. Para obter mais informações sobre a lógica dessa instrução, consulte [NotAction com Deny](reference_policies_elements_notaction.md). Se o usuário está conectado com MFA, ocorrerá uma falha no teste de `Condition`, e a instrução não negará nenhuma ação. Neste caso, outras políticas ou instruções para o usuário determinam as permissões do usuário.

  Essa instrução garante que, quando o usuário não estiver conectado com MFA, ele só poderá executar as ações listadas. Além disso, eles poderão executar as ações listadas somente se outra instrução ou política permitir acesso a essas ações. Isso não permite que um usuário crie uma senha no login, porque a ação `iam:ChangePassword` não deve ser permitida sem autorização de MFA.

  A versão `...IfExists` do operador `Bool` garante que se a chave `aws:MultiFactorAuthPresent` estiver ausente, a condição retornará verdadeiro. Isso significa que, ao acessar uma API com credenciais de longo prazo, como uma chave de acesso, o usuário terá seu acesso negado às operações de API não relacionadas ao IAM.

Esta política não permite que os usuários visualizem a página **Users** (Usuários) no console do IAM ou usem essa página para acessar suas próprias informações de usuário. Para permitir que isso aconteça, adicione ação `iam:ListUsers` às instruções `AllowViewAccountInfo` e `DenyAllExceptListedIfNoMFA`. Ela também não permite que os usuários alterem a senha na própria página de usuário. Para permitir isso, adicione as ações `iam:GetLoginProfile` e `iam:UpdateLoginProfile` à instrução `AllowManageOwnPasswords`. Para permitir que um usuário altere a senha em sua própria página de usuário sem fazer login usando MFA, adicione a ação `iam:UpdateLoginProfile` à instrução `DenyAllExceptListedIfNoMFA`.

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

****  

```
{
    "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",
                "iam:GetAccessKeyLastUsed"
            ],
            "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"
            ],
            "Resource": "arn:aws:iam::*:mfa/*"
        },
        {
            "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:GetMFADevice",
                "iam:ListMFADevices",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice",
                "sts:GetSessionToken"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}
```

------