AWS:允許經過 MFA 驗證的 IAM 使用者在 My Security Credentials (我的安全憑證) 頁面上管理其憑證。 - AWS Identity and Access Management

AWS:允許經過 MFA 驗證的 IAM 使用者在 My Security Credentials (我的安全憑證) 頁面上管理其憑證。

此範例會示範如何建立身分型政策,允許使用多重要素驗證 (MFA) 進行身分驗證的 IAM 使用者在 My Security Credentials (我的安全憑證) 頁面上管理自己的憑證。此 AWS Management Console 頁面會顯示如帳戶 ID 和正式使用者 ID 的帳戶資訊。使用者也可以檢視和編輯其密碼、存取金鑰、MFA 裝置、X.509 憑證及 SSH 金鑰和 Git 憑證。此政策範例包括檢視和編輯頁面上所有資訊所需的許可。在 AWS 中進行任何其他操作之前,使用者也需要使用 MFA 設定和驗證。若要允許使用者在不使用 MFA 的情況下管理自己的憑證,請參閱AWS:允許 IAM 使用者在 My Security Credentials (我的安全憑證) 頁面上管理其憑證

若要了解使用者如何存取 My Security Credentials (我的安全憑證) 頁面,請參閱 IAM 使用者如何變更他們自己的密碼 (主控台)

注意
  • 本範例政策不允許使用者在首次登入 AWS Management Console 時重設密碼。在新使用者登入之前,建議您不要將許可授予給他們。如需更多詳細資訊,請參閱 如何安全地建立 IAM 使用者?。這也可防止密碼到期的使用者在登入期間重設密碼。您可以透過將 iam:ChangePasswordiam:GetAccountPasswordPolicy 新增至 DenyAllExceptListedIfNoMFA 陳述式,來允許這項作業。不過,我們不建議您這麼做,因為若允許使用者在不使用 MFA 的情況下變更密碼,則會帶來安全性風險。

  • 如果您打算使用此政策進行程式設計存取,則必須叫用 GetSessionToken 以使用 MFA 進行驗證。如需更多詳細資訊,請參閱 設定受 MFA 保護的 API 存取

此政策的功能為何?

  • AllowViewAccountInfo 陳述式允許使用者檢視帳戶層級資訊。這些許可必須位於自己的陳述式中,因為它們不支援或不需要指定資源 ARN。而是許可指定 "Resource" : "*"。此陳述式包括下列動作,可讓使用者檢視特定的資訊:

    • GetAccountPasswordPolicy – 檢視帳戶密碼需求,同時變更自己的 IAM 使用者密碼。

    • ListVirtualMFADevices – 檢視為使用者啟用之虛擬 MFA 裝置的詳細資訊。

  • AllowManageOwnPasswords 陳述式可讓使用者變更自己的密碼。此陳述式也包括檢視 My Security Credentials (我的安全憑證) 頁面上大部分資訊所需的 GetUser 動作。

  • AllowManageOwnAccessKeys 陳述式可讓使用者建立、更新及刪除自己的存取金鑰。使用者也能擷取關於指定之存取金鑰最後一次使用時間的資訊。

  • AllowManageOwnSigningCertificates 陳述式可讓使用者上傳、更新及刪除自己的簽章憑證。

  • AllowManageOwnSSHPublicKeys 陳述式允許使用者上傳、更新及刪除自己用於 CodeCommit 的 SSH 公有金鑰。

  • AllowManageOwnGitCredentials 陳述式可讓使用者建立、更新及刪除自己用於 CodeCommit 的 Git 憑證。

  • AllowManageOwnVirtualMFADevice 陳述式可讓使用者建立自己的虛擬 MFA 裝置。此陳述式中的資源 ARN 允許使用者以任何名稱建立 MFA 裝置,但政策中的其他陳述式僅允許使用者連接裝置到目前登入的使用者。

  • AllowManageOwnUserMFA 陳述式可讓使用者檢視或管理其使用者的虛擬、U2F 或硬體 MFA 裝置。此陳述式中的資源 ARN 僅允許存取使用者自己的 IAM 使用者。使用者不能檢視或管理其他使用者的 MFA 裝置。

  • 除了一些列出的動作以外,DenyAllExceptListedIfNoMFA 陳述式會拒絕存取所有 AWS 服務中的每個動作,但只有使用者未使用 MFA 登入時。陳述式使用 "Deny""NotAction" 的組合,來明確拒絕存取未列出的每項動作。此陳述式不會拒絕或允許列出的項目。然而,政策中的其他陳述式會允許多項動作。如需有關此陳述式邏輯的詳細資訊,請參閱使用拒絕 (Deny) 的 NotAction。如果使用者使用 MFA 登入,則不會通過 Condition 測試,且此陳述式不會拒絕任何動作。在此情況下,使用者的其他政策或陳述式決定使用者的許可。

    此陳述式確保在使用者未使用 MFA 登入時,他們只能執行列出的動作。此外,只有在另一條陳述式或政策允許存取這些動作時,他們才能執行列出的動作。這不允許使用者在登入時建立密碼,因為在未進行 MFA 身分驗證的情況下,並不允許 iam:ChangePassword 動作。

    ...IfExists 運算子的 Bool 版本會確認,如果 aws:MultiFactorAuthPresent 索引鍵遺失,條件將返回 true。這就表示,拒絕使用長期憑證 (如存取金鑰) 存取 API 的使用者存取為非 IAM API 操作。

此政策不允許使用者檢視 IAM 主控台中的 Users (使用者) 頁面,或使用該頁面存取自己的使用者資訊。若要允許此操作,請將 iam:ListUsers 動作加入到 AllowViewAccountInfo 陳述式和 DenyAllExceptListedIfNoMFA 陳述式。它也不允許使用者在自己的使用者頁面上變更密碼。若要允許此操作,請將 iam:GetLoginProfileiam:UpdateLoginProfile 動作加入 AllowManageOwnPasswords 陳述式。若也要允許使用者在未使用 MFA 登入的情況下,在自己的使用者頁面上變更其密碼,請將 iam:UpdateLoginProfile 動作加入 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" } } } ] }