AWS: permite que os usuários do IAM autenticados por MFA gerenciem suas próprias credenciais na página Credenciais de segurança - AWS Identity and Access Management

AWS: permite que os usuários do IAM autenticados por MFA gerenciem suas próprias credenciais na página Credenciais de seguranç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) gerenciem suas próprias credenciais na página Credenciais de segurança. Essa página do AWS Management Console 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.

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).

nota
  • Este exemplo de política não permite que os usuários redefinam uma senha ao fazer login no AWS Management Console pela primeira vez. Recomendamos que você não conceda permissões a novos usuários até que eles façam login. Para ter mais informações, consulte Como faço para criar usuários do IAM com segurança?. 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 GetSessionToken para autenticar com o MFA. Para ter mais informações, consulte Configuração de acesso à API protegido por MFA.

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. 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.

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