

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

# 備份的 GuardDuty 惡意軟體保護：IAM 角色許可
<a name="malware-protection-backup-iam-permissions"></a>

## 提供惡意軟體掃描的客戶角色
<a name="malware-protection-backup-customer-role"></a>

GuardDuty 惡意軟體防護預期在備份資源上啟動掃描時，會提供客戶角色 （掃描程式角色），即快照、AMIs 和 EBS/EC2/S3 復原點。此角色提供 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 Direct APIs用於存取 AWS 受管金鑰加密快照的快照區塊。這樣做是因為無法以其他方式跨帳戶存取 AWS 受管金鑰加密快照。
+ `Decrypt` - 允許解密使用 EBS Direct APIs 作為增量掃描的一部分下載到記憶體時加密的客戶受管金鑰基本快照。
+ `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 惡意軟體防護會透過傳送 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 請求至 AWS KMS 來代表您建立授權。這些授權可讓 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 存取快照上的快照區塊。
+ 將[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)請求傳送至 AWS KMS 以解密加密的資料金鑰，以便在掃描期間用來讀取快照上的資料。

您可以隨時撤銷已建立的授予，或移除服務對客戶受管金鑰的存取權。如果您這麼做，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、Decrypt、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"
    }
  ]
}
```