

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为存储桶配置 S3 恶意软件防护


要让 S3 恶意软件防护扫描以及（可选）向 S3 对象添加标签，您可以使用具有必要权限的服务角色代表您执行恶意软件扫描操作。有关使用服务角色启用 S3 恶意软件防护的更多信息，请参阅[服务访问权限](https://docs.amazonaws.cn//guardduty/latest/ug/enable-malware-protection-s3-bucket.html#service-access-s3-malware-protection)。此角色不同于[GuardDuty 恶意软件防护服务相关角色](https://docs.amazonaws.cn//guardduty/latest/ug/using-service-linked-roles.html)。

如果您更喜欢使用 IAM 角色，则可以附加一个包含扫描所需权限的 IAM 角色，并且（可选）向 S3 对象添加标签。 GuardDuty 然后担任此 IAM 角色代表您执行这些操作。在为您的 Amazon S3 存储桶启用此防护计划时，您将需要此 IAM 角色名称。

如果您使用的是 IAM 角色，则每次想要保护 Amazon S3 存储桶时，都必须执行本节中列出的两个步骤。

要启用 S3 恶意软件防护，您需要 S3 存储桶名称、对象前缀（如果要将防护重点放在特定前缀上）以及具有所需权限的 IAM 角色名称等详细信息。

无论您是单独开始使用 S3 恶意软件防护，还是将其作为 GuardDuty 服务的一部分启用，步骤都保持不变。

**主题**

1. [创建或更新 IAM 角色策略](malware-protection-s3-iam-policy-prerequisite.md)

1. [为存储桶启用 S3 恶意软件防护](enable-malware-protection-s3-bucket.md) 

1. [对 IAM 角色权限错误进行问题排查](troubleshoot-malware-protection-s3-iam-role-permissions-error.md)

# 为存储桶启用 S3 恶意软件防护
为存储桶启用 S3 恶意软件防护威胁检测

本节介绍了有关如何为自己账户中的存储桶启用 S3 恶意软件防护的详细步骤。在继续之前，请查看以下考虑事项：
+ 使用 GuardDuty 控制台启用此保护计划时，它包括在 “**服务访问权限**” 部分下创建新角色或使用现有角色的步骤。
+ 使用 GuardDuty API 或 CLI 启用此保护计划时，必须[创建或更新 IAM 角色策略](malware-protection-s3-iam-policy-prerequisite.md)先继续操作。
+ 无论您如何启用此防护计划，您都必须具备所需的[创建恶意软件防护计划资源的权限](#malware-protection-s3-permissions-prerequisite)。

**考虑 Amazon S3 存储桶节流**  
S3 节流可能会限制数据传输到您的 Amazon S3 存储桶或从您的 Amazon S3 存储桶中传输数据的速率。这可能会延迟对新上传对象的恶意软件扫描。  
如果您预计 S3 存储桶会收到大量 `GET` 和 `PUT` 请求，请考虑实施措施防止节流。有关如何执行此操作的信息，请参阅《Amazon Athena 用户指南》**中的[防止 Amazon S3 节流](https://docs.amazonaws.cn/athena/latest/ug/performance-tuning-s3-throttling.html)。

**Topics**

## 创建恶意软件防护计划资源的权限


当您为 Amazon S3 存储桶启用 S3 恶意软件防护时， GuardDuty 会创建一个用作存储段保护计划标识符的恶意软件保护计划资源。如果您尚未使用 [Amazon 托管策略:AmazonGuardDutyFullAccess\$1v2（推荐）](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGuardDutyFullAccess-v2)，则必须添加以下权限才能创建此资源：
+ `guardDuty:CreateMalwareProtectionPlan`
+  `iam:PassRole` 

您可以使用以下自定义策略示例，并将替换为*placeholder values*适合您账户的值：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::111122223333:role/role-name",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "malware-protection-plan.guardduty.amazonaws.com"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "guardduty:CreateMalwareProtectionPlan"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 使用 GuardDuty 控制台为 S3 启用恶意软件防护


以下各节提供了您将在 GuardDuty 控制台中体验到的 step-by-step演练。

**使用 GuardDuty 控制台为 S3 启用恶意软件防护**

### 输入 S3 存储桶详细信息


按照以下步骤提供 Amazon S3 存储桶的详细信息：

1. 登录 Amazon Web Services 管理控制台 并打开 GuardDuty 控制台，网址为[https://console.aws.amazon.com/guardduty/](https://console.amazonaws.cn/guardduty/)。

1. 使用页面右上角的 Amazon Web Services 区域 选择器，选择要为 S3 启用恶意软件防护的区域。

1. 在导航窗格中，选择 **S3 恶意软件防护**。

1. 在**受保护的存储桶**部分中，选择**启用**，从而为属于您自己 Amazon Web Services 账户的 S3 存储桶启用 S3 恶意软件防护。

1. 在**输入 S3 存储桶详细信息**下，输入 **Amazon S3 存储桶**的名称。此外也可以选择**浏览 S3** 来选择 S3 存储桶。

   S3 存储桶和为 S3 启用恶意软件防护的 Amazon Web Services 账户 位置必须相同。 Amazon Web Services 区域 例如，假设您的账户属于 `us-east-1` 区域，则您的 Amazon S3 存储桶所在的区域也必须为 `us-east-1`。

1. 在**前缀**下，您可以选择**此 S3 存储桶中的所有对象**或**以特定前缀开头的对象**。
   + 如果您想 GuardDuty 扫描选定**存储桶中所有新上传的对象**，请选择 S3 存储桶中的所有对象。
   + 如果要扫描属于特定前缀的新上传对象，请选择**以特定前缀开头的对象**。此选项有助您将恶意软件扫描的范围仅集中在选定的对象前缀上。有关使用前缀的更多信息，请参阅《Amazon S3 用户指南》中的[使用文件夹在 Amazon S3 控制台中整理对象](https://docs.amazonaws.cn/AmazonS3/latest/userguide/using-folders.html)**。

     选择**添加前缀**，然后输入前缀。您最多可以添加 5 个前缀。

### 为已扫描对象启用标记


此为**可选**步骤。当您在对象上传到存储桶之前启用标记选项时，在完成扫描后， GuardDuty将添加一个预定义的标签，键为`GuardDutyMalwareScanStatus`，值为扫描结果。为发挥 S3 恶意软件防护的最佳效用，我们建议在扫描结束后再启用向 S3 对象添加标签的选项。使用此功能会产生标准的 S3 对象标记成本。有关更多信息，请参阅 [S3 恶意软件防护的定价和使用成本](pricing-malware-protection-for-s3-guardduty.md)。

**为什么应启用标记？**  
+ 启用标记是了解恶意软件扫描结果的诸多方法之一。有关 S3 恶意软件扫描结果的信息，请参阅[在 S3 恶意软件防护中监控 S3 对象扫描](monitoring-malware-protection-s3-scans-gdu.md)。
+ 在包含可能恶意对象的 S3 存储桶上设置基于标签的访问控制（TBAC）策略。有关注意事项以及如何实现基于标签的访问控制（TBAC），请参阅[将基于标签的访问控制（TBAC）与 S3 恶意软件防护结合使用](tag-based-access-s3-malware-protection.md)。

** GuardDuty 向 S3 对象添加标签的注意事项：**
+ 默认情况下，您最多可以将 10 个标签关联到一个对象。有关更多信息，请参阅《Amazon S3 用户指南》中的[使用标签对存储进行分类](https://docs.amazonaws.cn/AmazonS3/latest/userguide/object-tagging.html)**。

  如果所有 10 个标签都已在使用中，则 GuardDuty 无法将预定义的标签添加到扫描的对象。 GuardDuty 还会将扫描结果发布到您的默认 EventBridge 事件总线。有关更多信息，请参阅 [使用 Amazon 监控 S3 对象扫描 EventBridge](monitor-with-eventbridge-s3-malware-protection.md)。
+ 当所选的 IAM 角色不包括标记 S3 对象的权限时，即使为受保护的存储桶启用了标记， GuardDuty 也无法向扫描的 S3 对象添加标签。 GuardDuty 有关标记所需 IAM 角色权限的更多信息，请参阅[创建或更新 IAM 角色策略](malware-protection-s3-iam-policy-prerequisite.md)。

  GuardDuty 还会将扫描结果发布到您的默认 EventBridge 事件总线。有关更多信息，请参阅 [使用 Amazon 监控 S3 对象扫描 EventBridge](monitor-with-eventbridge-s3-malware-protection.md)。

**在**标记已扫描对象**下选择一个选项**
+ 如果** GuardDuty 要**为扫描的 S3 对象添加标签，请选择**标记对象**。
+ 如果您**不 GuardDuty 想**为扫描的 S3 对象添加标签，请选择**不标记对象**。

### 服务访问


按照以下步骤选择一个现有的服务角色或创建一个新的服务角色，该服务角色应具有代表您执行恶意软件扫描操作的必要权限。这些操作可能包括扫描新上传的 S3 对象以及（可选）向这些对象添加标签。有关该角色将拥有的权限的信息，请参阅[创建或更新 IAM 角色策略](malware-protection-s3-iam-policy-prerequisite.md)。

在**服务访问权限**部分中，您可以执行以下操作之一：

1. **创建并使用新的服务角色**：您可以创建并使用具有执行恶意软件扫描所需权限的新服务角色。

   在**角色名称**下，您可以选择使用预先填充的名称， GuardDuty 也可以输入您选择的有意义的名称来标识角色。例如 `GuardDutyS3MalwareScanRole`。角色名称的长度必须为 1 到 64 个字符。有效字符为 a-z、A-Z、0-9 以及“\$1=,.@-\$1”。

1. **使用现有的服务角色**：您可以从**服务角色名称**列表中选择一个现有的服务角色。

   1. 您可以在**策略模板**下查看 S3 存储桶的策略。务必要在**输入 S3 存储桶详细信息**部分中输入或选择一个 S3 存储桶。

   1. 在**服务角色名称**下，从服务角色列表中选择一个服务角色。

您可以根据自己的需求对该策略进行更改。有关如何创建或更新 IAM 角色的更多详细信息，请参阅[创建或更新 IAM 角色策略](https://docs.amazonaws.cn//guardduty/latest/ug/malware-protection-s3-iam-policy-prerequisite.html)。

有关 IAM 角色权限的问题，请参阅[对 IAM 角色权限错误进行问题排查](troubleshoot-malware-protection-s3-iam-role-permissions-error.md)。

### （可选）标记恶意软件防护计划 ID


这是一个可选步骤，有助您向将为 S3 存储桶资源创建的恶意软件防护计划资源添加标签。

每个标签都由两个部分组成：标签键和可选的标签值。有关标记及其优势的更多信息，请参阅为资源[添加标签。 Amazon](https://docs.amazonaws.cn/tag-editor/latest/userguide/tagging.html)

**向恶意软件防护计划资源添加标签**

1. 输入标签**键**和可选的标签**值**。标签键和标签值都区分大小写。有关标签键和标签值名称的信息，请参阅 [Tag naming limits and requirements](https://docs.amazonaws.cn/tag-editor/latest/userguide/tagging.html#tag-conventions)。

1. 要向恶意软件防护计划资源添加其他标签，请选择**添加新标签**并重复上一步的操作。您最多可以为每个 资源添加 50 个标签。

1. 请选择**启用**。

## 使用 API/CLI 启用 S3 恶意软件防护


本节包括您希望在您的 Amazon 环境中以编程方式为 S3 启用恶意软件防护的步骤。这将需要您在 [创建或更新 IAM 角色策略](malware-protection-s3-iam-policy-prerequisite.md) 步骤中创建的 IAM 角色的 Amazon 资源名称（ARN）。

**使用 API/CLI 以编程方式启用 S3 恶意软件防护**
+ **通过使用 API**

  运行，[CreateMalwareProtectionPlan](https://docs.amazonaws.cn/guardduty/latest/APIReference/API_CreateMalwareProtectionPlan.html)为属于您自己账户的存储桶启用 S3 的恶意软件防护。
+ **通过使用 Amazon CLI**

  根据您希望如何为 S3 启用恶意软件防护，以下列表提供了特定用例的 Amazon CLI 示例命令。运行这些命令时，将*placeholder examples shown in red*、替换为适合您账户的值。

**Amazon CLI 命令示例**
  + 使用以下 Amazon CLI 命令为未标记已扫描的 S3 对象的存储桶启用 S3 恶意软件防护：

    ```
    aws guardduty create-malware-protection-plan --role "arn:aws:iam::111122223333:role/role-name" --protected-resource "S3Bucket"={"BucketName"="amzn-s3-demo-bucket1"}
    ```
  + 使用以下 Amazon CLI 命令为具有特定对象前缀且未标记已扫描的 S3 对象的存储桶启用恶意软件防护：

    ```
    aws guardduty create-malware-protection-plan --role "arn:aws:iam::111122223333:role/role-name" --protected-resource '{"S3Bucket":{"BucketName":"amzn-s3-demo-bucket1", "ObjectPrefixes": ["Object1","Object1"]}}'
    ```
  + 使用以下 Amazon CLI 命令为启用了已扫描 S3 对象标记的存储桶启用 S3 的恶意软件防护：

    ```
    aws guardduty create-malware-protection-plan --role "arn:aws:iam::111122223333:role/role-name" --protected-resource "S3Bucket"={"BucketName"="amzn-s3-demo-bucket1"} --actions "Tagging"={"Status"="ENABLED"}
    ```

  成功运行这些命令后，将会生成一个唯一的恶意软件防护计划 ID。要执行诸如更新或禁用存储桶防护计划之类的操作，您需要此恶意软件防护计划 ID。

有关 IAM 角色权限的问题，请参阅[对 IAM 角色权限错误进行问题排查](troubleshoot-malware-protection-s3-iam-role-permissions-error.md)。

# 创建或更新 IAM 角色策略
IAM 角色权限

要让 S3 恶意软件防护扫描以及（可选）向 S3 对象添加标签，您可以使用具有必要权限的服务角色代表您执行恶意软件扫描操作。有关使用服务角色启用 S3 恶意软件防护的更多信息，请参阅[服务访问权限](https://docs.amazonaws.cn//guardduty/latest/ug/enable-malware-protection-s3-bucket.html#service-access-s3-malware-protection)。此角色不同于[GuardDuty 恶意软件防护服务相关角色](https://docs.amazonaws.cn//guardduty/latest/ug/using-service-linked-roles.html)。

如果您倾向于使用 IAM 角色，则可以附加一个包含扫描所需权限的 IAM 角色，并（可选）向 S3 对象添加标签。您必须创建一个 IAM 角色或更新现有角色来包含这些权限。由于您启用 S3 恶意软件防护的每个 Amazon S3 存储桶都需要这些权限，因此您需要对要保护的每个 Amazon S3 存储桶执行此步骤。

以下列表说明了某些权限如何帮助您代表您 GuardDuty 执行恶意软件扫描：
+ 允许 Amazon EventBridge 操作创建和管理 EventBridge 托管规则，以便 S3 恶意软件防护可以监听您的 S3 对象通知。

  有关更多信息，请参阅《[亚马逊* EventBridge 用户指南》中的亚马逊 EventBridge *托管规则](https://docs.amazonaws.cn/eventbridge/latest/userguide/eb-rules.html#eb-rules-managed)。
+ 允许 Amazon S3 和 EventBridge 操作向发送此 EventBridge 存储桶中所有事件的通知

  有关更多信息，请参阅 [Amazon S3 用户指南 EventBridge中的启用](https://docs.amazonaws.cn/AmazonS3/latest/userguide/enable-event-notifications-eventbridge.html)*亚马逊*。
+ 允许访问上传的 S3 对象，并向已扫描的 S3 对象添加预定义标签 `GuardDutyMalwareScanStatus` 的 Amazon S3 操作。使用对象前缀时，请仅在目标前缀上添加 `s3:prefix` 条件。这样可以 GuardDuty 防止访问存储桶中的所有 S3 对象。
+ 在扫描使用支持的 DSSE-KMS 和 SSE-KMS 加密的存储桶并将测试对象放入该存储桶前，允许访问该对象的 KMS 密钥操作。

**注意**  
每次为账户中的存储桶启用 S3 恶意软件防护时，都需要执行此步骤。如果您已有一个 IAM 角色，则可以更新该现有角色的策略，以包含其他 Amazon S3 存储桶资源的详细信息。[添加 IAM 策略权限](#attach-iam-policy-s3-malware-protection) 主题提供了有关如何执行此操作的示例。

使用以下策略创建或更新 IAM 角色。

**Topics**
+ [

## 添加 IAM 策略权限
](#attach-iam-policy-s3-malware-protection)
+ [

## 添加信任关系策略
](#add-iam-trust-policy-s3-malware-protection)

## 添加 IAM 策略权限


您可以选择更新现有 IAM 角色的内联策略，也可以创建新的 IAM 角色。有关相关操作步骤的信息，请参阅《IAM 用户指南》中的[创建 IAM 角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-user.html)或[修改角色权限策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy)**。

向您首选的 IAM 角色添加以下权限模板。将以下占位符值替换为与您的账户相关的相应值：
+ 对于*amzn-s3-demo-bucket*，请替换为您的 Amazon S3 存储桶名称。

  要对多个 S3 存储桶资源使用相同的 IAM 角色，请更新现有策略，如以下示例所演示：

  ```
                      ...
                      ...
                      "Resource": [
                          "arn:aws:s3:::amzn-s3-demo-bucket/*",
                          "arn:aws:s3:::amzn-s3-demo-bucket2/*"
                      ],
                      ...
                      ...
  ```

  在添加与 S3 存储桶关联的新 ARN 之前，请务必添加逗号 (,)。无论您在策略模板中的任何位置引用 S3 存储桶 `Resource`，都要执行此操作。
+ 对于*111122223333*，请用您的 Amazon Web Services 账户 身份证替换。
+ 对于*us-east-1*，请替换为你的 Amazon Web Services 区域。
+ 将 *APKAEIBAERJR2EXAMPLE* 替换为客户托管密钥 ID。如果您的 S3 存储桶是使用 Amazon KMS 密钥加密的，那么如果您在为存储桶配置恶意软件防护时选择 “[创建新角色](https://docs.amazonaws.cn//guardduty/latest/ug/enable-malware-protection-s3-bucket.html)” 选项，我们会添加相关权限。

  ```
  "Resource": "arn:aws:kms:us-east-1:111122223333:key/*"
  ```

**IAM 角色策略模板**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "AllowManagedRuleToSendS3EventsToGuardDuty",
            "Effect": "Allow",
            "Action": [
                "events:PutRule",
                "events:DeleteRule",
                "events:PutTargets",
                "events:RemoveTargets"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:111122223333:rule/DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3*"
            ],
            "Condition": {
                "StringLike": {
                    "events:ManagedBy": "malware-protection-plan.guardduty.amazonaws.com"
                }
            }
        },
        {
            "Sid": "AllowGuardDutyToMonitorEventBridgeManagedRule",
            "Effect": "Allow",
            "Action": [
                "events:DescribeRule",
                "events:ListTargetsByRule"
            ],
            "Resource": [
                "arn:aws:events:us-east-1:111122223333:rule/DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3*"
            ]
        },
        {
            "Sid": "AllowPostScanTag",
            "Effect": "Allow",
            "Action": [
                "s3:PutObjectTagging",
                "s3:GetObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "AllowEnableS3EventBridgeEvents",
            "Effect": "Allow",
            "Action": [
                "s3:PutBucketNotification",
                "s3:GetBucketNotification"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Sid": "AllowPutValidationObject",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/malware-protection-resource-validation-object"
            ]
        },
        {
            "Sid": "AllowCheckBucketOwnership",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
           "Sid": "AllowMalwareScan",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "AllowDecryptForMalwareScan",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/APKAEIBAERJR2EXAMPLE",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": "s3.us-east-1.amazonaws.com"
                }
            }
        }
    ]
}
```

------

## 添加信任关系策略


将以下信任策略附加到您的 IAM 角色。有关相关操作步骤的信息，请参阅[修改角色信任策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "malware-protection-plan.guardduty.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

# 对 IAM 角色权限错误进行问题排查


为 S3 启用恶意软件防护时， GuardDuty 会检查您的 IAM 服务角色是否具有验证 Amazon S3 存储桶所有权的必要权限。如果这些权限缺失或配置错误，您可能会收到以下消息：

```
"message": "The request was rejected because provided IAM role does not have the required permissions to validate S3 bucket ownership."
"type": "InvalidInputException"
```

以下场景可帮助您对此错误进行问题排查：

**缺少 IAM 角色权限**  
+ IAM 角色必须具有所需权限才能允许 S3 恶意软件防护代入该角色。
+ GuardDuty 使用`"s3:ListBucket"`权限验证存储桶所有权。您使用的 IAM 角色必须具有此权限。
有关权限的信息，请参阅[创建或更新 IAM 角色策略](malware-protection-s3-iam-policy-prerequisite.md)。

**IAM 角色可用性**  
+ 创建新的 IAM 角色时，请等待几分钟让更改达到最终一致性，然后再启用 S3 恶意软件防护。如果在创建角色后立即尝试启用防护计划，验证可能会失败。
+ 对于基础设施即代码 (IaC) 部署， GuardDuty 建议声明资源依赖关系，以确保 IAM 角色达到最终一致性。

  有关如何执行此操作的示例模板，请参阅[GuardDuty GitHub存储库](https://github.com/aws-samples/guardduty-malware-protection/tree/main/cdk)。

**跨区域启用**  
确保您的 Amazon S3 存储桶位于您为 S3 启用恶意软件防护的同一区域 GuardDuty。