View a markdown version of this page

AWS Security Agent 的客戶受管金鑰 - AWS 安全代理程式

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

AWS Security Agent 的客戶受管金鑰

根據預設, AWS Security Agent 會使用 AWS受管加密金鑰來加密所有靜態資料。您可以選擇使用來自 AWS Key Management Service (AWS KMS) 的客戶受管金鑰來加密資料,讓您完全控制保護 資源的加密金鑰。

AWS Security Agent 支援資源層級的客戶受管金鑰。當您建立最上層資源,例如 代理程式空間或整合時,您可以指定 KMS 金鑰來加密屬於該資源及其子資源的所有資料。例如,在建立 Agent Space 時指定客戶受管金鑰,會加密與該 Agent Space 相關聯的所有資料,包括 Agent Space 組態、滲透測試組態、任務和執行詳細資訊、安全調查結果、探索的端點和螢幕擷取畫面。您也可以提供已使用自己的客戶受管金鑰加密 AWS 的資源,例如 S3 儲存貯體、CloudWatch Logs 日誌群組或 Secrets Manager 秘密。如需必要的 KMS 許可,請參閱 必要的 KMS 許可

客戶受管金鑰的運作方式

AWS 安全代理程式使用 AWS KMS 階層 keyring,以客戶受管金鑰加密您的資料。當您在資源建立期間指定 KMS 金鑰時,服務會建立受 KMS 金鑰保護的分支金鑰,並將其存放在 Amazon DynamoDB 型金鑰存放區中。對於每個加密操作,階層式 keyring 會從作用中分支金鑰衍生唯一的包裝金鑰,這會為每個請求加密唯一的資料加密金鑰。

階層式 keyring 提供下列優點:

  • 每個資源加密範圍 – 每個頂層資源都有自己的分支金鑰,因此不同資源的資料會使用不同的金鑰加密。

  • 自動金鑰輪換 – AWS 安全代理程式會定期輪換分支金鑰。輪換後,新資料會使用新的分支金鑰版本加密,而較舊版本則會保留以解密先前加密的資料。

加密內容

AWS 安全代理程式會搭配 KMS 金鑰在所有密碼編譯操作中使用加密內容。加密內容是一組非私密的金鑰值對,可為加密操作提供額外的已驗證資料。

加密內容金鑰遵循格式 aws:securityagent:_<resource-type>_,其中 <resource-type> 是要加密的資源類型 (例如 agent-spaceintegration)。值是資源的 Amazon Resource Name (ARN)。

注意

對於整合,加密內容金鑰包含 aws-crypto-ec:字首,因此格式為 aws-crypto-ec:aws:securityagent:integration

您可以使用加密內容,將 KMS 金鑰政策縮小至特定資源類型。如需詳細資訊,請參閱必要的 KMS 許可

Default encryption (預設加密)

當您在不指定客戶受管金鑰的情況下建立資源時, AWS Security Agent 會使用基礎儲存服務 (Amazon DynamoDB 和 Amazon S3) 提供的 AWS受管加密金鑰來加密資源。預設加密不需要額外的組態。

應用程式的預設 KMS 金鑰

您可以在應用程式層級設定預設 KMS 金鑰。設定預設 KMS 金鑰時,當您在資源建立期間未明確指定 KMS 金鑰時, AWS Security Agent 會將其用作新 Agent Spaces 和整合的後援。

若要設定預設 KMS 金鑰,請在使用 CLI 或 SDK AWS 建立或更新應用程式時指定 defaultKmsKeyId 參數。主控台會在應用程式設定期間提示您指定預設 KMS 金鑰。

當您在資源建立期間明確指定 KMS 金鑰時,其優先順序會高於應用程式層級預設值。

先決條件

設定客戶受管金鑰之前,請先完成下列先決條件:

  • 在 KMS 中建立對稱加密 AWS KMS 金鑰。金鑰必須符合下列要求:

  • 設定 KMS 金鑰政策和 IAM 政策,以授予 AWS 安全代理程式所需的許可。如需詳細資訊,請參閱必要的 KMS 許可

必要的 KMS 許可

AWS 安全代理程式在兩種情況下需要 KMS 許可:

  • 在 AWS 安全代理程式中加密資料 – 當您為代理程式空間或整合指定客戶受管金鑰時,服務需要許可,才能將該金鑰用於資料上的密碼編譯操作。

  • 使用 CMK 加密 AWS 的資源 – 當您提供以客戶受管金鑰 (例如 S3 儲存貯體、CloudWatch Logs 日誌群組或 Secrets Manager 秘密) 加密 AWS 的資源時,服務需要許可,才能使用這些金鑰來存取加密的資源。

AWS 安全代理程式會根據操作,使用不同的身分存取您的 KMS 金鑰:

  • AWS 管理主控台操作 – 當管理員在 AWS 管理主控台中建立或管理資源 (例如,建立客服人員空間或更新應用程式) 時,服務會使用管理員角色來呼叫 AWS KMS。

  • Web 應用程式操作 – 當 IAM Identity Center 使用者透過 AWS Security Agent Web 應用程式存取資料時 (例如,檢視滲透測試結果或啟動滲透測試),服務會使用 AWS Security Agent 設定期間建立的應用程式角色來呼叫 AWS KMS。

  • 存取客戶提供的資源 – 當服務在滲透測試期間存取客戶提供 AWS 的資源時 (例如 S3 儲存貯體、CloudWatch Logs 日誌群組和 Secrets Manager 秘密),它會使用滲透測試服務角色來呼叫 AWS KMS。

  • 非同步工作流程 – 對於在任何使用者工作階段之外執行的背景操作 (例如,滲透測試執行、程式碼檢閱處理和分支金鑰輪換),服務會使用自己的服務主體 (securityagent.amazonaws.com) 代表您呼叫 AWS KMS。

下列各節說明每個身分的必要許可。

金鑰政策

您的 KMS 金鑰政策必須授予 AWS 安全代理程式許可,才能使用金鑰進行密碼編譯操作。所需的金鑰政策陳述式取決於您計劃加密的資源類型,以及您提供給服務的 CMK 加密 AWS 資源。

代理程式空間的金鑰政策

下列金鑰政策會授予 AWS 安全代理程式加密和解密代理程式空間資料所需的許可,包括滲透測試結果和螢幕擷取畫面。

取代政策中的下列預留位置值:

  • 111122223333 – AWS 您的帳戶 ID

  • MyRole – 您在主控台中用來管理 AWS Security Agent 的 IAM 角色

  • MyApplicationRole – 在 AWS Security Agent 設定期間建立的應用程式角色

  • us-east-1 – 您使用 AWS 安全代理程式 AWS 的區域

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowKeyMetadataValidationForApplicationAndAgentSpaces", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyRole" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "securityagent.us-east-1.amazonaws.com" } } }, { "Sid": "AllowUseOfHierarchicalKeyringForAgentSpaces", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyRole" }, "Action": [ "kms:GenerateDataKeyWithoutPlaintext", "kms:ReEncryptTo", "kms:ReEncryptFrom", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:securityagent:agent-space": "arn:aws:securityagent:us-east-1:111122223333:agent-space/*" }, "StringEquals": { "kms:ViaService": "securityagent.us-east-1.amazonaws.com" } } }, { "Sid": "AllowSynchronousDataAccessForAgentSpaces", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyApplicationRole" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:securityagent:agent-space": "arn:aws:securityagent:us-east-1:111122223333:agent-space/*" }, "StringEquals": { "kms:ViaService": "securityagent.us-east-1.amazonaws.com" } } }, { "Sid": "AllowAsynchronousDataAccessForAgentSpaces", "Effect": "Allow", "Principal": { "Service": "securityagent.amazonaws.com" }, "Action": [ "kms:GenerateDataKeyWithoutPlaintext", "kms:Decrypt", "kms:ReEncryptTo", "kms:ReEncryptFrom" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:securityagent:agent-space": "arn:aws:securityagent:us-east-1:111122223333:agent-space/*" }, "ArnLike": { "aws:SourceArn": "arn:aws:securityagent:us-east-1:111122223333:agent-space/*" } } }, { "Sid": "AllowAsynchronousDataAccessForCodeRemediation", "Effect": "Allow", "Principal": { "Service": "securityagent.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" } ] }
重要

若要輪換分支金鑰,您的 KMS 金鑰政策必須將 kms:GenerateDataKeyWithoutPlaintext、 和 kms:ReEncryptFrom許可授予 AWS Security Agent 服務主體 (securityagent.amazonaws.com)kms:ReEncryptTo,否則分支金鑰輪換將會失敗。如需所需許可的詳細資訊,請參閱輪換分支金鑰

整合的金鑰政策

下列金鑰政策會授予 AWS 安全代理程式加密和解密整合資料所需的許可,包括程式碼檢閱問題清單。

取代政策中的下列預留位置值:

  • 111122223333 – AWS 您的帳戶 ID

  • MyRole – 您在主控台中用來管理 AWS Security Agent 的 IAM 角色

  • us-east-1 – 您使用 AWS 安全代理程式 AWS 的區域

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowKeyAccessValidationForIntegrations", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyRole" }, "Action": [ "kms:GenerateDataKeyWithoutPlaintext", "kms:Decrypt", "kms:Encrypt", "kms:ReEncryptTo", "kms:ReEncryptFrom" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws-crypto-ec:aws:securityagent:integration": "arn:aws:securityagent:us-east-1:111122223333:integration/*" }, "StringEquals": { "kms:ViaService": "securityagent.us-east-1.amazonaws.com" } } }, { "Sid": "AllowKeyMetadataValidationForIntegrations", "Effect": "Allow", "Principal": { "Service": "securityagent.amazonaws.com" }, "Action": "kms:DescribeKey", "Resource": "*" }, { "Sid": "AllowAsynchronousDataAccessForIntegrations", "Effect": "Allow", "Principal": { "Service": "securityagent.amazonaws.com" }, "Action": [ "kms:GenerateDataKeyWithoutPlaintext", "kms:Decrypt", "kms:Encrypt", "kms:ReEncryptTo", "kms:ReEncryptFrom" ], "Resource": "*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:securityagent:us-east-1:111122223333:integration/*" }, "StringLike": { "kms:EncryptionContext:aws-crypto-ec:aws:securityagent:integration": "arn:aws:securityagent:us-east-1:111122223333:integration/*" } } } ] }
注意

如果您想要將相同的 KMS 金鑰用於多種資源類型,您可以將 Agent Space、整合和安全需求套件金鑰政策陳述式合併為單一金鑰政策。

安全性需求套件的金鑰政策

下列金鑰政策會授予 AWS 安全代理程式加密和解密安全需求套件資料所需的許可。安全需求套件不使用 Web 應用程式角色。此政策使用兩個存取路徑:

  • 同步路徑 – 當您呼叫 API 時,服務會使用您轉送的登入資料代表您呼叫 AWS KMS (透過 kms:ViaService條件)。

  • 非同步路徑 – 對於可使用套件的非同步操作,服務會使用自己的服務主體直接呼叫 AWS KMS。

取代政策中的下列值:

  • 111122223333 – AWS 您的帳戶 ID

  • MyRole – 您用來叫用安全需求套件操作的 IAM 角色

  • us-east-1 – 您使用 AWS 安全代理程式 AWS 的區域

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowKeyMetadataValidation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyRole" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "securityagent.us-east-1.amazonaws.com" } } }, { "Sid": "AllowUseOfHierarchicalKeyringForSecurityPacks", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyRole" }, "Action": [ "kms:GenerateDataKeyWithoutPlaintext", "kms:ReEncryptTo", "kms:ReEncryptFrom", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "securityagent.us-east-1.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:securityagent:security-requirement-pack": "arn:aws:securityagent:us-east-1:111122223333:security-requirement-pack/*" } } }, { "Sid": "AllowAsynchronousDataAccessForSecurityPacks", "Effect": "Allow", "Principal": { "Service": "securityagent.amazonaws.com" }, "Action": [ "kms:GenerateDataKeyWithoutPlaintext", "kms:Decrypt", "kms:ReEncryptTo", "kms:ReEncryptFrom" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:securityagent:security-requirement-pack": "arn:aws:securityagent:us-east-1:111122223333:security-requirement-pack/*" }, "ArnLike": { "aws:SourceArn": "arn:aws:securityagent:us-east-1:111122223333:security-requirement-pack/*" } } } ] }

此政策包含三個陳述式:

  • AllowKeyMetadataValidation – 授予 ,kms:DescribeKey讓 AWS 安全代理程式可以驗證您的客戶受管金鑰是否存在、已啟用,並在資源建立期間指定 CMK 時使用對稱加密。使用 kms:ViaService條件來確保呼叫是透過 服務發出。

  • AllowUseOfHierarchicalKeyringForSecurityPacks – 針對階層式 keyring 操作授予 kms:GenerateDataKeyWithoutPlaintext(建立新的分支金鑰)、 kms:ReEncryptTokms:ReEncryptFrom(輪換現有的分支金鑰) 以及 kms:Decrypt(擷取現有的分支金鑰)。這些操作會透過同步路徑使用您的轉送憑證,並依加密內容條件範圍限定為安全需求套件資源。

  • AllowAsynchronousDataAccessForSecurityPacks – 當沒有呼叫者登入資料可用時kms:GenerateDataKeyWithoutPlaintextkms:ReEncryptFrom將非同步操作的 kms:ReEncryptTo、、 和 kms:Decrypt授予 AWS Security Agent 服務主體。

與 Agent Spaces 金鑰政策不同,安全需求套件政策不包含 Web 應用程式角色主體。安全需求套件是使用您的管理員角色透過 AWS 管理主控台存取,而不是透過 AWS Security Agent Web 應用程式存取。所有同步操作都使用單一呼叫者角色 (透過 kms:ViaService)。

注意

如果您針對 Agent Spaces 和安全需求套件使用相同的 KMS 金鑰,您可以將兩個區段的金鑰政策陳述式合併為單一金鑰政策。

CMK 加密 AWS 資源的金鑰政策

如果您使用客戶受管金鑰加密 AWS 的資源提供給 AWS 安全代理程式,則必須更新每個資源 KMS 金鑰的金鑰政策,以授予必要的許可。這適用於下列資源:

  • S3 儲存貯體 – 如果您從使用客戶受管金鑰 (SSE-KMS) 加密的 S3 儲存貯體提供學習資源,則金鑰政策必須允許滲透測試服務角色解密物件。

  • Secrets Manager 秘密 – 如果您的滲透測試登入資料存放在使用客戶受管金鑰加密的 Secrets Manager 秘密中,則金鑰政策必須允許滲透測試服務角色解密這些秘密。如果 Web 應用程式代表您建立秘密,金鑰政策也必須允許應用程式角色加密這些秘密。

  • CloudWatch Logs 日誌群組 – 如果用於存放滲透測試執行日誌的 CloudWatch Logs 日誌群組使用客戶受管金鑰加密,金鑰政策必須允許 CloudWatch Logs 透過服務角色驗證 KMS 金鑰,並允許 CloudWatch Logs 服務主體執行密碼編譯操作。

重要

AWS 安全代理程式也可以代表您建立 CloudWatch Logs 日誌群組和 Secrets Manager 秘密。設定 KMS 金鑰政策時,也請包含這些服務建立之資源的對應陳述式。

下列金鑰政策陳述式會授予 CMK 加密資源的必要許可。僅包含適用於您組態的陳述式。如果資源使用您為客服人員空間指定的相同 KMS 金鑰,請將這些陳述式新增至該金鑰的政策。如果資源使用不同的 KMS 金鑰,請改為將這些陳述式新增至該金鑰的政策。

取代政策中的下列預留位置值:

  • 111122223333 – AWS 您的帳戶 ID

  • MyApplicationRole – 在 AWS Security Agent 設定期間建立的應用程式角色

  • MyPenTestServiceRole – 滲透測試服務角色

  • us-east-1 – 您使用 AWS 安全代理程式 AWS 的區域

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowKmsKeyAccessForCreatingSecrets", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyApplicationRole" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "StringLike": { "kms:ViaService": "secretsmanager.*.amazonaws.com", "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:us-east-1:111122223333:secret:*" } } }, { "Sid": "AllowKmsKeyDecryptionForS3Objects", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyPenTestServiceRole" }, "Action": [ "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "StringLike": { "kms:ViaService": "s3.*.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::YOUR-BUCKET-NAME*" } } }, { "Sid": "AllowKmsKeyDecryptionForSecretsManagerSecrets", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyPenTestServiceRole" }, "Action": [ "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "StringLike": { "kms:ViaService": "secretsmanager.*.amazonaws.com", "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:us-east-1:111122223333:secret:YOUR-SECRET-NAME*" } } }, { "Sid": "AllowKmsKeyValidationForCloudWatchLogsLogGroups", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/MyPenTestServiceRole" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "StringLike": { "kms:ViaService": "logs.*.amazonaws.com" } } }, { "Sid": "AllowKmsKeyAccessForCloudWatchLogsLogGroups", "Effect": "Allow", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "StringLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-east-1:111122223333:log-group:YOUR-LOG-GROUP-NAME*" } } } ] }
注意
  • 只有在您從使用客戶受管金鑰加密的 S3 儲存貯體提供學習資源時,才需要 AllowKmsKeyDecryptionForS3Objects陳述式。如需設定 SSE-KMS for S3 的詳細資訊,請參閱使用 SSE-KMS 保護資料

  • 只有當您的滲透測試登入資料存放在使用客戶受管金鑰加密的 Secrets Manager 秘密中時,才需要 AllowKmsKeyDecryptionForSecretsManagerSecrets陳述式。服務角色需要存取權,才能在滲透測試期間解密秘密。如需秘密加密的詳細資訊,請參閱 Secrets Manager 中的秘密加密和解密

  • AllowKmsKeyValidationForCloudWatchLogsLogGroups 陳述式會授予服務角色,kms:DescribeKey以便 CloudWatch Logs 在將其與日誌群組建立關聯時,可以透過服務角色驗證 KMS 金鑰。

  • 如果 Web 應用程式使用客戶受管金鑰代表您建立 Secrets Manager 秘密,則需要 AllowKmsKeyAccessForCreatingSecrets陳述式。應用程式角色需要 kms:GenerateDataKey和 ,kms:Decrypt才能使用 KMS 金鑰加密秘密。

  • AllowKmsKeyAccessForCloudWatchLogsLogGroups 陳述式會授予 CloudWatch Logs 服務主體 (logs.us-east-1.amazonaws.com) 加密和解密日誌資料所需的許可。如果 AWS Security Agent 在您未提供現有日誌群組時代表您建立日誌群組,也需要此陳述式。如需詳細資訊,請參閱使用 AWS KMS 在 CloudWatch Logs 中加密日誌資料

  • 如果多個資源共用相同的 KMS 金鑰,您可以將陳述式合併為單一金鑰政策。

管理員角色

管理員角色 (您在主控台中用來管理 AWS Security Agent 的 IAM 角色) 不需要額外的 IAM 政策。

應用程式角色

除了 KMS 金鑰政策之外,請將下列 IAM 政策連接至 AWS Security Agent 設定期間指定的應用程式角色。此政策授予角色許可,以使用您的客戶受管金鑰來加密和解密 Agent Space 資料,並在 AWS Secrets Manager 中建立秘密。

取代政策中的下列預留位置值:

  • 111122223333 – AWS 您的帳戶 ID

  • us-east-1 – 您使用 AWS Security Agent AWS 的區域

  • 中的 KMS 金鑰 ARNs Resource – KMS 金鑰ARNs

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSynchronousDataAccessForAgentSpaces", "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890cd" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333", "kms:ViaService": "securityagent.us-east-1.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:securityagent:agent-space": "arn:aws:securityagent:us-east-1:111122223333:agent-space/*" } } }, { "Sid": "AllowKmsKeyAccessForCreatingSecrets", "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890cd" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "StringLike": { "kms:ViaService": "secretsmanager.*.amazonaws.com", "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:us-east-1:111122223333:secret:*" } } } ] }
注意

應用程式角色是您指定的 IAM 角色,或主控台在 AWS Security Agent 設定期間建立的 IAM 角色。Web 應用程式會擔任此角色來擷取滲透測試執行日誌,並代表您建立 Secrets Manager 秘密。

  • 如果您設定滲透測試的身分驗證資源,並選擇直接輸入登入資料,而不是指定現有的秘密,則需要 AllowKmsKeyAccessForCreatingSecrets陳述式。Web 應用程式會代表您建立秘密,而應用程式角色需要此陳述式中的許可,才能使用為 Agent Space 指定的客戶受管金鑰來加密秘密。更新此陳述式中的 Resource ARNs,以符合用於代理程式空間的 KMS 金鑰。

服務 角色

在滲透測試期間, AWS Security Agent 會擔任滲透測試服務角色來存取您的 AWS 資源。如果其中任何資源使用客戶受管金鑰加密,您必須授予服務角色使用對應 KMS 金鑰的許可。這適用於下列資源:

  • S3 儲存貯體 – 如果您從使用客戶受管金鑰加密的 S3 儲存貯體提供學習資源 (例如 API 文件、威脅模型或原始程式碼),服務角色需要許可才能解密該儲存貯體中的物件。如需設定 SSE-KMS for S3 的詳細資訊,請參閱使用 SSE-KMS 保護資料

  • Secrets Manager 秘密 – 如果您的滲透測試登入資料存放在使用客戶受管金鑰加密的 Secrets Manager 秘密中,服務角色需要許可才能解密這些秘密。如需秘密加密的詳細資訊,請參閱 Secrets Manager 中的秘密加密和解密

  • CloudWatch Logs 日誌群組 – 如果用於存放滲透測試執行日誌的 CloudWatch Logs 日誌群組使用客戶受管金鑰 (包括由 AWS Security Agent 代表您建立的日誌群組) 加密,服務角色需要kms:DescribeKey許可才能驗證金鑰。CloudWatch Logs 服務主體會處理日誌資料的實際加密和解密,並透過金鑰政策授予這些許可 (請參閱 金鑰政策)。如需加密日誌資料的詳細資訊,請參閱使用 AWS KMS 在 CloudWatch Logs 中加密日誌資料

重要

如果您使用不同於您為客服人員空間指定的 KMS 金鑰來加密這些資源,您必須授予每個 KMS 金鑰的服務角色許可,以保護服務角色在滲透測試期間存取的資源。

將下列 IAM 政策連接至滲透測試服務角色。僅包含適用於您組態的陳述式。

取代政策中的下列預留位置值:

  • 111122223333 – AWS 您的帳戶 ID

  • us-east-1 – 您使用 AWS Security Agent AWS 的區域

  • 中的 KMS 金鑰 ARNs Resource – 用於加密每個資源的客戶受管金鑰ARNs

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowKmsAccessForEncryptedS3Buckets", "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:111122223333:key/EXAMPLE-S3-KEY-ID" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "StringLike": { "kms:ViaService": "s3.*.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::YOUR-BUCKET-NAME*" } } }, { "Sid": "AllowKmsAccessForEncryptedSecrets", "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:111122223333:key/EXAMPLE-SECRETS-KEY-ID" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "StringLike": { "kms:ViaService": "secretsmanager.*.amazonaws.com", "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:us-east-1:111122223333:secret:YOUR-SECRET-NAME*" } } }, { "Sid": "AllowKmsKeyValidationForCloudWatchLogsLogGroups", "Effect": "Allow", "Action": [ "kms:DescribeKey" ], "Resource": [ "arn:aws:kms:us-east-1:111122223333:key/EXAMPLE-CLOUDWATCH-LOGS-KEY-ID" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" }, "StringLike": { "kms:ViaService": "logs.*.amazonaws.com" } } } ] }
注意
  • 只有在您從使用客戶受管金鑰加密的 S3 儲存貯體提供學習資源時,才需要 AllowKmsAccessForEncryptedS3Buckets陳述式。更新 Resource ARN 以符合用於加密 S3 儲存貯體的 KMS 金鑰,並更新kms:EncryptionContext:aws:s3:arn值以符合您的儲存貯體名稱。

  • 只有當您的滲透測試登入資料存放在使用客戶受管金鑰加密的 Secrets Manager 秘密中時,才需要 AllowKmsAccessForEncryptedSecrets陳述式。更新 Resource ARN 以符合用於加密秘密的 KMS 金鑰,並更新kms:EncryptionContext:SecretARN值以符合秘密名稱。

  • 只有當您的 CloudWatch Logs 日誌群組使用客戶受管金鑰加密時,才需要 AllowKmsKeyValidationForCloudWatchLogsLogGroups陳述式,包括由 AWS Security Agent 代表您建立的日誌群組。更新 Resource ARN 以符合用於加密日誌群組的 KMS 金鑰。

  • 如果多個資源共用相同的 KMS 金鑰,您可以合併陳述式,並在 Resource 欄位中列出共用金鑰 ARN 一次。

使用客戶受管金鑰建立資源

您可以在設定 AWS Security Agent 或建立個別資源時指定客戶受管金鑰。KMS 金鑰會加密屬於該資源及其子資源的所有資料。

在設定期間設定預設 KMS 金鑰 (主控台)

您可以在初始 AWS 安全代理程式設定期間設定預設 KMS 金鑰。除非您指定不同的金鑰,否則此金鑰會做為新 Agent Spaces 和整合的預設值。

  1. 設定 AWS 安全代理程式頁面上,展開加密 - 選用區段。

  2. 選取自訂加密設定 (進階)

  3. 針對選擇 AWS KMS 金鑰,請從您的帳戶選取 KMS 金鑰,或輸入 KMS 金鑰 ARN。

  4. 完成其餘的設定步驟,然後選擇設定 AWS 安全代理程式。

AWS Security Agent 會驗證 KMS 金鑰,以確認其存在、已啟用並使用對稱加密。如果驗證失敗,設定不會繼續,而且您會收到錯誤訊息。

使用客戶受管金鑰建立客服人員空間 (主控台)

  1. 在 AWS 安全代理程式主控台中,導覽至代理程式空間頁面。

  2. 選擇建立客服人員空間

  3. 輸入代理程式空間的名稱和選用描述。

  4. 展開 Advanced (進階) 區段。

  5. 資料加密下,選擇下列其中一項:

    • 使用應用程式預設金鑰 – 使用 AWS Security Agent 設定期間設定的預設 KMS 金鑰。如果已設定預設金鑰,則預設會選取此選項。

    • 使用不同的金鑰 – 為此客服人員空間指定不同的 KMS 金鑰。選取自訂加密設定 (進階),然後針對選擇 AWS KMS 金鑰,從您的帳戶選取 KMS 金鑰或輸入 ARN。

  6. 選擇建立

建立與客戶受管金鑰的整合 (主控台)

  1. 在 AWS Security Agent 主控台中,導覽至整合頁面。

  2. 選擇新增整合,然後選取您的提供者 (例如 GitHub)。

  3. 完成步驟 1:安裝並授權提供者應用程式。

  4. 步驟 2:註冊詳細資訊中,輸入註冊名稱並設定提供者設定。

  5. 資料加密區段中,選取自訂加密設定 (進階)

  6. 針對選擇 AWS KMS 金鑰,請從您的帳戶選取 KMS 金鑰,或輸入 KMS 金鑰 ARN。

  7. 選擇連線

使用客戶受管金鑰 (AWS CLI 或 SDK) 建立資源

若要使用 CLI 或 SDK AWS 指定客戶受管金鑰:

  • 呼叫 CreateApplication 為您的應用程式設定預設 KMS 金鑰時,請包含 defaultKmsKeyId 參數。在沒有明確 KMS 金鑰的情況下建立 Agent Spaces 或整合時,此金鑰會用作備用金鑰。

  • 呼叫 CreateAgentSpaceCreateIntegration 以加密特定資源時,請包含 kmsKeyId 參數。這優先於應用程式層級預設值。

如需參數詳細資訊,請參閱 AWS Security Agent API 參考

如果您未指定 KMS 金鑰,則如果已設定 KMS 金鑰, AWS Security Agent 會使用應用程式層級的預設 KMS 金鑰。否則,資源會使用 AWS受管金鑰加密。

金鑰輪換

AWS Security Agent 會定期自動輪換分支金鑰。分支金鑰輪換會建立新的分支金鑰作用中版本,同時保留所有先前的版本。輪換後:

  • 新資料會使用新的分支金鑰版本加密。

  • 先前加密的資料仍然可以使用較舊的分支金鑰版本來解密。

  • 不需要資料重新加密。

分支金鑰輪換與 KMS 金鑰輪換不同。您可以為客戶受管金鑰獨立啟用自動 KMS 金鑰輪換。如需詳細資訊,請參閱 Key Management Service 開發人員指南 AWS 中的輪換 KMS 金鑰

在分支金鑰輪換之後,有一段短暫的期間,上一個分支金鑰的快取複本仍可用於新的加密操作。此時段由內部快取time-to-live(TTL) 決定,不會影響您資料的安全性。

考量事項

搭配 AWS Security Agent 使用客戶受管金鑰時,請記住下列事項:

  • 客戶受管金鑰僅適用於新資源。在您設定客戶受管金鑰之前建立的現有資源會繼續使用 AWS受管加密。現有資料不會遷移。

  • 客戶受管金鑰會在建立時指定。您可以在建立資源時指定 KMS 金鑰。您無法新增或變更現有資源的 KMS 金鑰。

  • 支援多個 KMS 金鑰。您可以針對不同的資源使用不同的 KMS 金鑰。例如,您可以將一個金鑰用於生產 Agent Spaces,將另一個金鑰用於開發 Agent Spaces。

  • 停用或刪除 KMS 金鑰會使資料無法存取。如果您停用或排程刪除 KMS 金鑰, AWS Security Agent 無法解密該金鑰下加密的資料。受影響的資源會變成無法存取,直到金鑰重新啟用為止。永久刪除 KMS 金鑰可防止存取在該金鑰下加密的所有資料。

  • 金鑰政策許可是必要的。如果您從 KMS 金鑰政策中移除必要的許可, AWS Security Agent 無法存取加密的資料。確保金鑰政策授予管理員角色 (用於在 AWS 主控台中管理服務)、應用程式角色 (由 Web 應用程式使用)、滲透測試服務角色 (由客服人員擔任以執行滲透測試) 和 AWS Security Agent 服務主體的許可,如中所述必要的 KMS 許可

  • AWS 適用 KMS 配額。針對 KMS 金鑰的加密操作會計入 AWS KMS 請求配額。在正常使用情況下,階層式 keyring 架構會透過分支金鑰快取將 KMS 呼叫降至最低。如需詳細資訊,請參閱 AWS Key Management Service 開發人員指南中的請求配額