

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

# GuardDuty Backup 的恶意软件防护：IAM 角色权限
<a name="malware-protection-backup-iam-permissions"></a>

## 为恶意软件扫描提供了客户角色
<a name="malware-protection-backup-customer-role"></a>

GuardDuty 恶意软件保护期望在 Backup 资源（即快照、AMI 和 EBS/EC2/S 3 个恢复点）上启动扫描时提供客户角色（扫描者角色）。此角色提供对这些特定资源执行扫描所需的权限。 GuardDuty 可以在中找到该角色的权限策略和信任策略[该角色的权限和信任策略](#malware-protection-backup-permissions-trust-policy)。以下部分描述了为什么需要这些权限。

## 有关权限的详细信息
<a name="malware-protection-backup-permission-details"></a>
+ `ModifySnapshotAttribute`-允许 GuardDuty 恶意软件防护服务帐户访问未加密和客户托管的密钥加密快照。
+ `CreateGrant`-允许 GuardDuty 恶意软件防护从为 GuardDuty 服务帐户提供访问权限的客户托管密钥加密快照中创建和访问客户托管密钥加密的 EBS 卷。
+ `RetireGrant`-允许 GuardDuty 恶意软件防护停用在客户托管密钥上创建的用于读取加密快照的授权
+ `ReEncryptTo`和 `ReEncryptFrom`-EBS 要求允许 GuardDuty 访问使用客户托管密钥加密的快照并使用这些快照创建加密卷。尽管客户可能会将共享期间 ReEncryption 的快照视为密钥过渡，但从客户的角度来看，快照在创建后仍然不可变。
+ `ListSnapshotBlocks`和 `GetSnapshotBlock`-EBS Direc APIs t 用于访问 AWS 托管密钥加密快照的快照块。之所以这样做，是因为无法跨账户访问 AWS 托管密钥加密的快照。
+ `Decrypt`-允许解密在增量扫描过程中使用 EBS Direc APIs t 下载到内存中的客户托管密钥加密的基本快照。
+ `ListChangedBlocks`-增量快照扫描中使用 EBS Direct API 来获取两个快照之间已更改的区块列表。
+ `DescribeKey`-允许 GuardDuty 恶意软件防护确定客户账户中 AWS 托管密钥的 KeyID。
+ `DescribeImages`-允许描述 AMI 以获取属于该 AMI 的快照列表。
+ `DescribeRecoveryPoint`-允许服务获取恢复点详细信息并验证恢复点的资源类型。
+ `CreateBackupAccessPoint`，`DescribeBackupAccessPoint`，`DeleteBackupAccessPoint`-允许服务创建、描述和删除访问恢复点所需的接入点。
+ `kms:Decrypt`-允许服务在 S3 恢复点扫描期间访问 S3 恢复点中的对象。

## 保护角色
<a name="malware-protection-backup-securing-role"></a>

必须为该角色配置信任 GuardDuty 恶意软件防护服务主体的信任策略。这样可以确保除 GuardDuty 服务以外的任何委托人均不能担任此角色。此外，我们鼓励您将政策范围缩小到特定资源，而不是`*`。这包括快照 ID 和密钥 ID。这样做可以确保该角色仅提供对这些特定资源的访问权限。

**重要**  
由于权限不足，不正确的配置可能会导致扫描失败。

## GuardDuty 恶意软件防护如何在 AWS KMS 中使用授权
<a name="malware-protection-backup-kms-grants"></a>

GuardDuty 恶意软件防护需要[授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)才能使用您的 KMS 密钥。

当您开始扫描加密快照或由加密快照组成的 EC2 AMI 时， GuardDuty 恶意软件防护会通过向 AWS KMS 发送[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)请求来代表您创建授权。这些授权允许 GuardDuty 访问您账户中的特定密钥。

GuardDuty 恶意软件防护需要获得授权，才能使用您的客户托管密钥进行以下内部操作：
+ 向发送[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)请求 AWS 以获取有关对称客户托管密钥的详细信息，提交给恶意软件扫描的资源使用该密钥进行加密。
+ 使用 [CreateVolume](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html)API 从加密快照创建 EBS 卷，并使用相同的密钥对该卷进行加密。
+ 在增量扫描期间，通过 [GetSnapshotBlock](https://docs.aws.amazon.com/ebs/latest/APIReference/API_GetSnapshotBlock.html)API 访问快照上的快照块。
+ 向 AWS KMS 发送[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)请求以解密加密的数据密钥，以便可以在扫描期间使用这些密钥读取快照上的数据。

您可以随时撤销已创建的授权，或删除该服务对客户托管密钥的访问权限。如果这样做，将 GuardDuty 无法访问由客户托管密钥加密的任何数据，这会影响依赖该数据的操作。

## GuardDuty 恶意软件保护加密上下文
<a name="malware-protection-backup-encryption-context"></a>

[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)是一组可选的键值对，包含有关数据的其他上下文信息。

当您在加密数据的请求中包含加密上下文时， AWS KMS; 会将加密上下文绑定到加密数据。要解密数据，您必须在请求中包含相同的加密上下文。

GuardDuty 恶意软件防护使用两种加密环境之一。

**加密上下文 1：**密钥是`aws:guardduty:id`。

```
"encryptionContext": {
    "aws:guardduty:id": "snap-11112222333344"
}
```

此加密上下文与授权操作一起使用： CreateGrant、Decrypt、、 GenerateDataKeyWithoutPlaintext、 ReEncryptTo、 RetireGrant。 DescribeKey

使用此加密上下文和授权操作在当前资源上创建了一个授权。

**加密上下文 2：**密钥是 `aws:ebs:id`

```
"encryptionContext": {
    "aws:ebs:id": "snap-11112222333344"
}
```

此加密上下文用于授权操作： ReEncryptFrom、解密、、 RetireGrant。 DescribeKey

使用这些加密上下文和授权操作创建了三个授权。一个在目标快照上执行`ReEncryptFrom`授权操作。目标快照上的第二个带有`Decrypt, RetireGrant, DescribeKey`操作的快照。第三个位于基本快照上，其授予操作与第二个赠款相同。

## 该角色的权限和信任策略
<a name="malware-protection-backup-permissions-trust-policy"></a>

**权限策略**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "ebs:ListSnapshotBlocks",
                "ebs:ListChangedBlocks",
                "ebs:GetSnapshotBlock"
            ],
            "Resource": "arn:aws:ec2:*::snapshot/*"
        },
        {
            "Sid": "CreateGrantPermissions",
            "Effect": "Allow",
            "Action": "kms:CreateGrant",
            "Resource": "arn:aws:kms:*:*:key/*",
            "Condition": {
                "ForAnyValue:StringLike": {
                    "kms:EncryptionContext:aws:guardduty:id": "snap-*",
                    "kms:ViaService": [
                        "guardduty.*.amazonaws.com",
                        "backup.*.amazonaws.com"
                    ]
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": [
                        "Decrypt",
                        "CreateGrant",
                        "GenerateDataKeyWithoutPlaintext",
                        "ReEncryptFrom",
                        "ReEncryptTo",
                        "RetireGrant",
                        "DescribeKey"
                    ]
                },
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        },
        {
            "Sid": "CreateGrantPermissionsForReEncryptAndDirectAPIs",
            "Effect": "Allow",
            "Action": "kms:CreateGrant",
            "Resource": "arn:aws:kms:*:*:key/*",
            "Condition": {
                "ForAnyValue:StringLike": {
                    "kms:EncryptionContext:aws:ebs:id": "snap-*",
                    "kms:ViaService": [
                        "guardduty.*.amazonaws.com",
                        "backup.*.amazonaws.com"
                    ]
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": [
                        "Decrypt",
                        "ReEncryptTo",
                        "ReEncryptFrom",
                        "RetireGrant",
                        "DescribeKey"
                    ]
                },
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeImages",
                "ec2:DescribeSnapshots"
            ],
            "Resource": "*"
        },
        {
            "Sid": "ShareSnapshotPermission",
            "Effect": "Allow",
            "Action": [
                "ec2:ModifySnapshotAttribute"
            ],
            "Resource": "arn:aws:ec2:*:*:snapshot/*"
        },
        {
            "Sid": "ShareSnapshotKMSPermission",
            "Effect": "Allow",
            "Action": [
                "kms:ReEncryptTo",
                "kms:ReEncryptFrom"
            ],
            "Resource": "arn:aws:kms:*:*:key/*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": "ec2.*.amazonaws.com"
                }
            }
        },
        {
            "Sid": "DescribeKeyPermission",
            "Effect": "Allow",
            "Action": "kms:DescribeKey",
            "Resource": "arn:aws:kms:*:*:key/*"
        },
        {
            "Sid": "DescribeRecoveryPointPermission",
            "Effect": "Allow",
            "Action": [
                "backup:DescribeRecoveryPoint"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CreateBackupAccessPointPermissions",
            "Effect" : "Allow",
            "Action" : [
                "backup:CreateBackupAccessPoint"  
            ],
            "Resource": "arn:aws:backup:*:*:recovery-point:*"
        },
        {
            "Sid": "ReadAndDeleteBackupAccessPointPermissions",
            "Effect" : "Allow",
            "Action" : [
                "backup:DescribeBackupAccessPoint",
                "backup:DeleteBackupAccessPoint"     
            ],
            "Resource": "*"
        },
        {
            "Sid": "KMSKeyPermissionsForInstantAccess",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:*:*:key/*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": "backup.*.amazonaws.com"
                }
            }
        }
    ]
}
```

**信任政策**

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