AWS:允許 MFA 驗證的 IAM 使用者在安全登入資料頁面上管理自己的登入資料 - AWS Identity and Access Management

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS:允許 MFA 驗證的 IAM 使用者在安全登入資料頁面上管理自己的登入資料

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

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

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

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

此政策的功能為何?

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

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

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

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

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

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

  • AllowManageOwnSSHPublicKeys語句允許用戶上傳,更新和刪除自己的 SSH 公鑰 CodeCommit。

  • AllowManageOwnGitCredentials語句允許用戶創建,更新和刪除自己的 Git 憑據 CodeCommit。

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

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

  • DenyAllExceptListedIfNoMFA聲明拒絕訪問所有 AWS 服務中的每個操作,除了一些列出的操作,前提是用戶未使用 MFA 登錄。陳述式使用 "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: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" } } } ] }