本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWSSupport-ContainIAMPrincipal
Description
如果發生安全事件或疑似入侵 AWS Identity and Access Management (IAM) 使用者/角色或 AWS 身分中心 (IDC) 使用者,快速隔離受影響的身分至關重要,同時保留其組態以進行調查。AWSSupport-ContainIAMPrincipal
Runbook 提供結構化、可復原的方法,以包含遭入侵的 IAM 或 IDC 身分,有效地封鎖其對 AWS 資源的存取,並防止入侵的潛在傳播。
此自動化程序可在不永久變更身分組態的情況下進行調查,並在認為適當時還原正常存取。遏制程序會維護 IAM 內的使用者或角色,或 IDC 內的使用者,同時有效地將其與所有網路活動隔離。此隔離可防止包含的身分資源與 Amazon Virtual Private Cloud 內的資源通訊,或存取網際網路資源。遏制的設計是可逆的,允許在認為適當時還原正常存取。
如何運作?
AWSSupport-ContainIAMPrincipal
Runbook 會為 IAM 使用者、角色和 Identity Center 使用者實作完整的遏制程序。在Contain
模式下執行時,它會先驗證所有輸入參數,並對指定的 Amazon S3 儲存貯體執行安全檢查。然後,它會收集目標 IAM 委託人的詳細資訊,並根據委託人類型套用適當的遏制措施。對於 IAM 使用者,它會停用存取金鑰、移除主控台存取,以及連接拒絕政策。對於 IAM 角色,它會附加拒絕政策,以撤銷在遏制之前建立之工作階段的許可。對於 Identity Center 使用者,它會移除許可集、群組成員資格,並套用拒絕政策。在整個過程中, Runbook 會將原始組態備份到 Amazon S3 儲存貯體,以便進行可能的還原。在 Restore
模式下執行時,它會嘗試使用備份組態將主體還原至其遏制前狀態。Runbook 包含預覽變更而不套用變更DryRun
的選項,並提供成功操作和失敗案例的完整報告。
重要
-
使用提升權限:此 SSM 文件會執行需要提升權限的各種操作,例如修改 IAM 和 IDC 身分政策,以及套用隔離組態。這些動作可能會導致權限提升,或影響依賴目標身分的其他工作負載。您應該檢閱授予
AutomationAssumeRole
參數所指定角色的許可,並確保這些許可適用於預期的使用案例。如需 IAM 許可的詳細資訊,請參閱下列 AWS 文件: -
工作負載無法使用風險:此 Systems Manager 文件會執行隔離動作,這可能會導致工作負載無法使用或中斷。在安全事件期間執行時,它會從指定的 IAM 和 IDC 身分撤銷 AWS API 許可,防止他們進行任何 AWS API 呼叫或動作,以限制對受影響資源的存取。這可能會影響任何依賴這些身分的應用程式或服務。
-
建立其他資源:自動化文件可能會根據執行參數,有條件地建立其他資源,例如存放在其中的 Amazon Simple Storage Service (Amazon S3) 儲存貯體和 Amazon S3 物件。這些資源會根據您的 AWS 用量產生額外費用。
-
還原風險:如果動作參數設定為
Restore
,此 SSM 文件會嘗試將 IAM 或 IDC 身分組態還原為其原始狀態。不過,還原程序可能會失敗,使 IAM 或 IDC 身分處於不一致狀態。本文件提供在發生此類失敗時手動還原的說明,但您應該準備好在還原過程中處理潛在問題。
建議您徹底檢閱 Runbook、了解其潛在影響,並在非生產環境中進行測試,然後再在您的生產環境中執行。
文件類型
自動化
擁有者
Amazon
平台
/
必要的 IAM 許可
AutomationAssumeRole
參數需要下列許可,才能成功使用 Runbook:
s3:GetBucketLocation
s3:GetBucket
s3:ListBucket
s3:GetBucketPublicAccessBlocks
s3:GetAccountPublicAccessBlocks
s3:GetBucketPolicyStatus
s3:GetBucketAcl
s3:GetObject
s3:CreateBucket
s3:PutObject
iam:GetUser
iam:GetUserPolicy
iam:GetRole
iam:ListUserPolicies
iam:ListAttachedUserPolicies
iam:ListAccessKeys
iam:ListMfaDevices
iam:ListVirtualMFADevices
iam:GetLoginProfile
iam:GetPolicy
iam:GetRolePolicy
iam:ListPolicies
iam:ListAttachedRolePolicies
iam:ListRolePolicies
iam:UpdateAccessKey
iam:CreateAccessKey
iam:DeleteLoginProfile
iam:DeleteAccessKey
iam:PutUserPolicy
iam:DeleteUserPolicy
iam:DeactivateMFADevice
iam:AttachRolePolicy
iam:AttachUserPolicy
iam:DeleteRolePolicy
iam:TagMFADevice
iam:PutRolePolicy
iam:TagPolicy
iam:TagRole
iam:TagUser
iam:UntagUser
iam:UntagRole
organizations:ListAccounts
sso:ListPermissionSetsProvisionedToAccount
sso:GetInlinePolicyForPermissionSet
sso:ListInstances
sso-directory:SearchUsers
sso:ListPermissionSets
sso:ListAccountAssignments
sso-directory:DescribeUser
identitystore:ListUsers
identitystore:ListGroups
identitystore:IsMemberInGroups
identitystore:ListGroupMemberships
secretsmanager:CreateSecret
secretsmanager:DeleteSecret
sso:DeleteAccountAssignment
sso:PutInlinePolicyToPermissionSet
sso:CreateAccountAssignment
sso:DeleteInlinePolicyFromPermissionSet
sso:TagResource
sso:UntagResource
identitystore:DeleteGroupMembership
identitystore:CreateGroupMembership
以下是授予 必要許可的 IAM 政策範例AutomationAssumeRole
:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3Permissions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetBucket", "s3:ListBucket", "s3:GetBucketPublicAccessBlocks", "s3:GetAccountPublicAccessBlocks", "s3:GetBucketPolicyStatus", "s3:GetBucketAcl", "s3:GetObject", "s3:CreateBucket", "s3:PutObject" ], "Resource": "*" }, { "Sid": "IAMPermissions", "Effect": "Allow", "Action": [ "iam:GetUser", "iam:GetUserPolicy", "iam:GetRole", "iam:ListUserPolicies", "iam:ListAttachedUserPolicies", "iam:ListAccessKeys", "iam:ListMfaDevices", "iam:ListVirtualMFADevices", "iam:GetLoginProfile", "iam:GetPolicy", "iam:GetRolePolicy", "iam:ListPolicies", "iam:ListAttachedRolePolicies", "iam:ListRolePolicies", "iam:UpdateAccessKey", "iam:CreateAccessKey", "iam:DeleteLoginProfile", "iam:DeleteAccessKey", "iam:PutUserPolicy", "iam:DeleteUserPolicy", "iam:DeactivateMFADevice", "iam:AttachRolePolicy", "iam:AttachUserPolicy", "iam:DeleteRolePolicy", "iam:TagMFADevice", "iam:PutRolePolicy", "iam:TagPolicy", "iam:TagRole", "iam:TagUser", "iam:UntagUser", "iam:UntagRole" ], "Resource": "*" }, { "Sid": "OrganizationsPermissions", "Effect": "Allow", "Action": [ "organizations:ListAccounts" ], "Resource": "*" }, { "Sid": "SSOPermissions", "Effect": "Allow", "Action": [ "sso:ListPermissionSetsProvisionedToAccount", "sso:GetInlinePolicyForPermissionSet", "sso:ListInstances", "sso-directory:SearchUsers", "sso:ListPermissionSets", "sso:ListAccountAssignments", "sso-directory:DescribeUser", "sso:DeleteAccountAssignment", "sso:PutInlinePolicyToPermissionSet", "sso:CreateAccountAssignment", "sso:DeleteInlinePolicyFromPermissionSet", "sso:TagResource", "sso:UntagResource" ], "Resource": "*" }, { "Sid": "IdentityStorePermissions", "Effect": "Allow", "Action": [ "identitystore:ListUsers", "identitystore:ListGroups", "identitystore:IsMemberInGroups", "identitystore:ListGroupMemberships", "identitystore:DeleteGroupMembership", "identitystore:CreateGroupMembership" ], "Resource": "*" }, { "Sid": "SecretsManagerPermissions", "Effect": "Allow", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:DeleteSecret" ], "Resource": "*" } ] }
指示
請依照下列步驟設定自動化:
-
在 AWS Systems Manager 主控台中導覽至 AWSSupport-ContainIAMPrincipal
。 -
選擇 Execute automation (執行自動化)。
-
針對輸入參數,輸入下列內容:
-
AutomationAssumeRole (選用):
描述:(選用) Identity AWS and Access Management (IAM) 角色的 Amazon Resource Name (ARN),允許 Systems Manager Automation 代表您執行動作。如果未指定角色,Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
類型:
AWS::IAM::Role::Arn
-
PrincipalType (必要):
描述:(必要) AWS IAM 主體類型:IAM 使用者、IAM 角色或 Identity Center 使用者。
類型:字串
允許的值:
IAM user|IAM role|Identity Center user
-
PrincipalName (必要):
描述:(必要) IAM 主體的名稱。對於 Identity Center 使用者,請提供使用者名稱。
類型:字串
允許模式:
^[a-zA-Z0-9\\.\\-_\\\\!*'()/+=,@]{1,1024}$
-
動作 (必要):
描述:(必要) 選取
Contain
以隔離目標 IAM 主體Restore
,或嘗試從先前的備份將 IAM 主體還原為其原始組態。類型:字串
允許的值:
Contain|Restore
-
DryRun (選用):
描述:(選用) 當設定為 時
true
,自動化不會對目標 IAM 主體進行任何變更,而是輸出其嘗試變更的內容,詳細說明每個步驟。預設值:true
。類型:布林值
允許的值:
true|false
-
ActivateDisabledKeys (條件式):
描述:(條件式) 如果輸入參數動作設定為 ,
Restore
且 PrincipalType 設定為 IAM 使用者,此選項會判斷此自動化是否應嘗試在停用時啟用相關聯的存取金鑰。請注意,無法驗證洩露存取金鑰的完整性。 AWS 強烈建議不要重新啟用洩露的金鑰。反之,建議您產生新的金鑰。預設值:false
。類型:布林值
允許的值:
true|false
-
BackupS3BucketName (條件式):
描述:(條件式) 動作設定為 時要備份 IAM 主體組態的 Amazon S3 儲存貯體,
Contain
或動作為 時要從中還原組態Restore
。請注意,如果指定的動作為 ,Contain
且 Runbook 無法存取 儲存貯體,或未提供 值,則會在您的帳戶中建立名為 的新儲存貯體awssupport-containiamprincipal-<random-string>
。如果 DryRun 設定為true
此參數為必要。類型:
AWS::S3::Bucket::Name
-
BackupS3KeyName (條件式):
描述:(條件式) 如果動作設定為
Restore
,這會指定自動化用來嘗試還原 IAM 主體組態的 Amazon S3 金鑰。Amazon Amazon S3 金鑰通常遵循此格式:{year}/{month}/{day}/{hour}/{minute}/{automation_execution_id}.json
。金鑰可從先前的遏制自動化執行的輸出取得。類型:字串
允許模式:
^[a-zA-Z0-9\\.\\-_\\\\!*'()/]{0,1024}$
-
BackupS3BucketAccess (條件式):
描述:(條件式) 在執行遏制動作後,允許存取備份 Amazon S3 儲存貯體的 IAM 使用者或角色 ARN。動作為 時,需要此參數
Contain
。AutomationAssumeRole,或在沒有 AutomationAssumeRole 的情況下,正在執行其內容的使用者會自動新增至清單中。類型:StringList
允許模式:
^$|^arn:(aws|aws-cn|aws-us-gov|aws-iso(-[a-z])?):iam::[0-9]{12}:(role|user)\\/[\\w+\\/=,.@-]+$
-
TagIdentifier (選用):
描述:(選用) 使用下列格式,使用您選擇的標籤來標記 IAM 主體:
Key=<EXAMPLE_KEY>,Value=<EXAMPLE_VALUE>
。此選項可讓您追蹤此 Runbook 鎖定的 IAM 主體。注意:標籤鍵和值區分大小寫。類型:字串
允許模式:
^$|^[Kk][Ee][Yy]=[\\+\\-\\=\\.\\_\\:\\/@a-zA-Z0-9]{1,128},[Vv][Aa][Ll][Uu][Ee]=[\\+\\-\\=\\.\\_\\:\\/@a-zA-Z0-9]{0,128}$
-
-
選取執行。
-
自動化會啟動。
-
文件會執行下列步驟:
-
ValidateRequiredInputs
根據
Action
指定的 驗證所需的自動化輸入參數。 -
CheckBackupS3BucketName
檢查目標 Amazon S3 儲存貯體是否可能授予
read
或write
公開存取其物件。在遏制工作流程中,如果儲存貯體不存在,則會建立新的 Amazon S3 儲存BackupS3BucketName
貯體。 -
BranchOnAction
根據指定 的值來配置自動化
Action
。 -
BranchOnPrincipalTypeAndDryRun
根據 IAM 主體 (IAM 使用者、IAM 角色或 Identity Center 使用者) 的類型,以及它是否在
DryRun
模式下執行,來配置自動化。 -
BranchOnPrincipalTypeForContain
為輸入中指定的
Contain
動作型和 IAM 主體類型 (IAM 使用者、IAM 角色或 Identity Center 使用者) 分支自動化。 -
GetIAMUser
取得目標 IAM 使用者的建立時間和使用者名稱。
-
GetIAMUserDetails
取得並儲存目標 IAM 使用者的組態,包括內嵌政策、受管政策、存取金鑰、MFA 裝置和登入設定檔。
-
UpdateS3KeyForUser
從步驟 的輸出更新自動化 'S3Key' 變數
GetIAMUserDetails
。 -
GetIAMRole
取得目標 IAM 角色的建立時間、角色名稱和路徑。
-
GetIAMRoleDetails
取得並儲存目標 IAM 角色的組態,包括內嵌政策和連接到角色的受管政策。
-
UpdateS3KeyForRole
從步驟 的輸出更新自動化 'S3Key' 變數
GetIAMRoleDetails
。 -
GetIdentityStoreId
取得與 AWS 帳戶相關聯的 AWS IAM Identity Center 執行個體 ID。
-
GetIDCUser
使用 Identity Store ID 取得目標 Identity Center 使用者的使用者 ID。
-
GatherIDCUserDetails
取得和儲存目標 Identity Center 使用者的組態,包括帳戶指派、相關聯的許可集和內嵌政策。
-
UpdateS3KeyForIDCUser
從步驟 的輸出更新自動化 'S3Key' 變數
GatherIDCUserDetails
。 -
BranchOnIdentityContain
根據 的值
DryRun
和Contain
動作的 IAM 主體類型來配置自動化。 -
BranchOnDisableAccessKeys
根據 IAM 使用者是否具有需要停用的存取金鑰,來配置自動化。
-
DisableAccessKeys
停用作用中的 IAM 使用者存取金鑰。
-
BranchOnDisableConsoleAccess
根據 IAM 使用者是否已啟用 AWS 管理主控台存取的分支。
-
DisableConsoleAccess
移除 IAM 使用者對 AWS 管理主控台的密碼型存取。
-
AttachInlineDenyPolicyToUser
將拒絕政策連接至 IAM 使用者,以撤銷舊工作階段字符的許可。
-
AttachInlineDenyPolicyToRole
將拒絕政策連接至 IAM 角色,以撤銷舊工作階段字符的許可。
-
RemovePermissionSets
移除與 Identity Center 使用者相關聯的許可集。
-
RemoveIDCUserFromIDCGroups
從 Identity Center 群組中移除 Identity Center 使用者。
-
AttachInlineDenyPolicyToPermissionSet
將拒絕政策連接至與 Identity Center 使用者相關聯的許可集。
-
BranchOnReactivateKeys
在還原程序期間,根據
ActivateDisabledKeys
參數分支自動化。 -
DetachInlineDenyPolicy
在遏制過程中移除連接到 IAM 角色的拒絕政策。
-
DetachInlineDenyPolicyFromPermissionSet
在遏制程序期間移除附加至許可集的拒絕政策。
-
ReportContain
輸出在
DryRun
設定為 時將執行之遏制動作的詳細資訊True
。 -
ReportRestore
輸出在
DryRun
設定為 時將執行之還原動作的詳細資訊True
。 -
ReportContainFailure
提供在遏制工作流程失敗情況下手動還原 IAM 主體原始組態的完整指示。
-
ReportRestoreFailure
提供詳細說明,以在還原工作流程失敗案例期間手動完成 IAM 主體原始組態的還原。
-
-
執行完成後,請檢閱輸出區段以取得執行的詳細結果:
-
ContainIAMPrincipal.Output
提供當動作設定為「包含」且 DryRun 設定為「False」時所執行之遏制動作的詳細資訊。包括備份位置、套用的拒絕政策和修改組態的相關資訊。
-
RestoreIAMPrincipal.Output
提供當動作設定為 Restore 且 DryRun 設定為 False 時所執行還原動作的詳細資訊。包括還原組態的相關資訊,以及在還原期間遇到的任何問題。
-
ReportContain.Output
輸出有關當動作設定為「包含」且 DryRun 設定為「True」時將執行之遏制動作的詳細資訊。包括目前和遏制後組態的比較。
-
ReportRestore.Output
輸出當動作設定為 Restore 且 DryRun 設定為 True 時,將執行之還原動作的詳細資訊。顯示目前的組態和要還原的原始組態。
-
ReportContainFailure.Output
提供在遏制工作流程失敗情況下手動還原 IAM 主體原始組態的完整指示。
-
ReportRestoreFailure.Output
提供詳細說明,以在還原工作流程失敗案例期間手動完成 IAM 主體原始組態的還原。
-
輸出
執行完成後,請檢閱輸出區段以取得詳細結果:
-
ContainIAMPrincipal.Output
提供當動作設定為「包含」且 DryRun 設定為「False」時所執行之遏制動作的詳細資訊。包括備份位置、套用的拒絕政策和修改組態的相關資訊。
-
RestoreIAMPrincipal.Output
提供當動作設定為 Restore 且 DryRun 設定為 False 時所執行還原動作的詳細資訊。包括還原組態的相關資訊,以及在還原期間遇到的任何問題。
-
ReportContain.Output
輸出有關當動作設定為「包含」且 DryRun 設定為「True」時將執行之遏制動作的詳細資訊。包括目前和遏制後組態的比較。
-
ReportRestore.Output
輸出當動作設定為 Restore 且 DryRun 設定為 True 時,將執行之還原動作的詳細資訊。顯示目前的組態和要還原的原始組態。
-
ReportContainFailure.Output
提供在遏制工作流程失敗情況下手動還原 IAM 主體原始組態的完整指示。
-
ReportRestoreFailure.Output
提供詳細說明,以在還原工作流程失敗案例期間手動完成 IAM 主體原始組態的還原。
參考
Systems Manager Automation