

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

# SQL Server 稽核
<a name="Appendix.SQLServer.Options.Audit"></a>

在 Amazon RDS 中，您可以使用內建的 SQL Server 稽核機制來稽核 Microsoft SQL Server資料庫。您可以像在現場部署資料庫伺服器上一樣建立稽核與稽核規格。

RDS 會使用您提供的 IAM 角色，將完成的稽核日誌上傳到 S3 儲存貯體。如果您啟用了保留，RDS 會在設定的期間內將稽核日誌保存於資料庫執行個體上。

如需詳細資訊，請參閱 Microsoft SQL Server 文件中的 [SQL Server 稽核 (資料庫引擎)](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine)。

## 使用資料庫活動串流的 SQL Server 稽核
<a name="Appendix.SQLServer.DAS.Audit"></a>

您可以使用 RDS 的資料庫活動串流，整合 SQL Server 稽核事件與 Imperva、McAfee 和 IBM 的資料庫活動監控工具。如需詳細了解以資料庫活動串流稽核 RDS SQL Server，請參閱 [在 Microsoft SQL Server 中進行稽核](DBActivityStreams.md#DBActivityStreams.Overview.SQLServer-auditing) 

**Topics**
+ [使用資料庫活動串流的 SQL Server 稽核](#Appendix.SQLServer.DAS.Audit)
+ [對 SQL Server 稽核的支援。](#Appendix.SQLServer.Options.Audit.Support)
+ [將 SQL Server 稽核新增至資料庫執行個體選項](Appendix.SQLServer.Options.Audit.Adding.md)
+ [使用 SQL Server 稽核](Appendix.SQLServer.Options.Audit.CreateAuditsAndSpecifications.md)
+ [檢視稽核日誌](Appendix.SQLServer.Options.Audit.AuditRecords.md)
+ [將 SQL Server 稽核與多個可用區執行個體搭配使用](#Appendix.SQLServer.Options.Audit.Multi-AZ)
+ [設定 S3 儲存貯體](Appendix.SQLServer.Options.Audit.S3bucket.md)
+ [手動建立適用於 SQL Server 稽核的IAM 角色](Appendix.SQLServer.Options.Audit.IAM.md)

## 對 SQL Server 稽核的支援。
<a name="Appendix.SQLServer.Options.Audit.Support"></a>

在 Amazon RDS 中，從 SQL Server 2016 開始，SQL Server 的所有版本均支援伺服器層級稽核，企業版還支援資料庫層級稽核。從 SQL Server 2016 (13.x) SP1 開始，所有版本均支援伺服器層級和資料庫層級稽核。如需更多詳細資訊，請參閱 SQL Server 文件中的 [SQL Server 稽核 (資料庫引擎)](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine)。

RDS 支援對下列 SQL Server 稽核選項進行設定。


| 選項設定 | 有效值 | 描述 | 
| --- | --- | --- | 
| IAM\$1ROLE\$1ARN | 有效的 Amazon Resource Name (ARN)，格式為 arn:aws:iam::account-id:role/role-name。 | IAM 角色的 ARN，該角色授予對您想要儲存稽核日誌的 S3 儲存貯體的存取權。如需詳細資訊，請參閱 AWS 一般參考 中的 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam)。 | 
| S3\$1BUCKET\$1ARN | arn:aws:s3:::amzn-s3-demo-bucket 或 arn:aws:s3:::amzn-s3-demo-bucket/key-prefix 格式的有效 ARN | 您想要儲存稽核日誌的 S3 儲存貯體的 ARN。 | 
| ENABLE\$1COMPRESSION | true 或 false \$1 | 控制稽核日誌壓縮。預設會啟用壓縮 (設定為 true)。 | 
| RETENTION\$1TIME | 0 至 840 | SQL Server 稽核記錄保存於 RDS 執行個體上的保留時間 (以小時計)。預設會停用保留。 | 

# 將 SQL Server 稽核新增至資料庫執行個體選項
<a name="Appendix.SQLServer.Options.Audit.Adding"></a>

啟用 SQL Server稽核需要兩個步驟︰啟用資料庫執行個體上的選項，以及啟用 SQL Server 內的功能。將 SQL Server 稽核選項新增至資料庫執行個體的過程如下︰ 

1. 建立新的選項群組，或是複製或修改現有選項群組。

1. 新增和設定所有必要的選項。

1. 將選項群組與資料庫執行個體建立關聯。

新增 SQL Server 稽核 選項後，並不需要重新啟動資料庫執行個體。只要選項群組處於作用中狀態，您就可以建立稽核，並將稽核日誌儲存於 S3 儲存貯體。

**若要在資料庫執行個體的選項群組中新增和設定 SQL Server 稽核**

1. 選擇下列其中一項：
   + 使用現有的選項群組。
   + 建立自訂資料庫選項群組，並使用該選項群組。如需更多詳細資訊，請參閱 [建立選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 將 **SQLSERVER\$1AUDIT** 選項新增至選項群組，並進行選項設定。如需新增選項的詳細資訊，請參閱[將選項新增至選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。
   + 在 **IAM role (IAM 角色)** 中，如果您已經擁有具備所需原則的 IAM 角色，您可以選取該角色。若要建立新的 IAM 角色，請選擇 **Create a New Role (建立新角色)**。如需必要政策的資訊，請參閱 [手動建立適用於 SQL Server 稽核的IAM 角色](Appendix.SQLServer.Options.Audit.IAM.md)。
   + 在 **Select S3 destination (選擇 S3 目的地)** 中，如果您已經有想要使用的 S3 儲存貯體，請選取它。若要建立 S3 儲存貯體，請選擇 **Create a New S3 Bucket (建立新的 S3 儲存貯體)**。
   + 在 **Enable Compression (啟用壓縮)** 中，請勾選此選項，以壓縮稽核檔案。預設會啟用壓縮。若要停用壓縮，請取消勾選 **Enable Compression (啟用壓縮)**。
   + 在 **Audit log retention (稽核日誌保留)** 中，若要將稽核記錄保留在資料庫執行個體上，請選擇此選項。指定以小時計的停留時間。最長的停留時間是 35 天。

1. 將選項群組套用至新的或現有的資料庫執行個體。選擇下列其中一項：
   + 如果您建立了新的資料庫執行個體，在啟動執行個體時套用選項群組。
   + 針對現有的資料庫執行個體，可以修改執行個體，並附加新的選項群組，以套用選項群組。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

## 修改 SQL Server 稽核選項
<a name="Appendix.SQLServer.Options.Audit.Modifying"></a>

啟用 SQL Server 稽核選項之後，您可以修改設定。如需如何修改選項設定的詳細資訊，請參閱[修改選項設定](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。

## 從資料庫執行個體選項中移除 SQL Server 稽核
<a name="Appendix.SQLServer.Options.Audit.Removing"></a>

您可以停用稽核，然後刪除該選項，以關閉 SQL Server 稽核功能。

**若要移除稽核**

1. 停用 SQL Server 內的所有稽核設定。若要瞭解稽核執行到哪裡，請查詢 SQL Server 安全目錄檢視。如需詳細資訊，請參閱 SQL Server 文件中的[安全目錄檢視](https://docs.microsoft.com/sql/relational-databases/system-catalog-views/security-catalog-views-transact-sql)。

1. 從資料庫執行個體刪除 SQL Server 稽核選項 選擇下列其中一項：
   + 從資料庫執行個體使用的選項群組中刪除 SQL Server稽核選項。此變更會影響使用同一選項群組的所有資料庫執行個體。如需更多詳細資訊，請參閱 [從選項群組移除選項](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)。
   + 修改資料庫執行個體，然後選擇一個沒有 SQL Server 稽核選項的選項群組。此一變更只會影響您修改的資料庫執行個體。您可以指定預設的 (空白) 選項群組或不同的自訂選項群組。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

1. 從資料庫執行個體刪除 SQL Server 稽核選項後，不需要重新啟動執行個體。從 S3 儲存貯體移除不需要的稽核檔案。

# 使用 SQL Server 稽核
<a name="Appendix.SQLServer.Options.Audit.CreateAuditsAndSpecifications"></a>

您可以使用和控制現場部署資料庫伺服器一樣的方式，控制伺服器稽核、伺服器稽核規格和資料庫稽核規格。

## 建立稽核
<a name="Appendix.SQLServer.Options.Audit.CreateAudits"></a>

您可以使用與現場部署資料庫伺服器相同的方式建立伺服器稽核。如需如何建立伺服器稽核的資訊，請參閱 Microsoft SQL Server 文件中的 [CREATE SERVER AUDIT](https://docs.microsoft.com/sql/t-sql/statements/create-server-audit-transact-sql)。

為了避免錯誤，請遵守以下限制︰
+ 切勿超過每部執行個體所支援伺服器稽核的最大數量 ─ 50。
+ 指示 SQL Server 將資料寫到二進位檔案。
+ 伺服器稽核名稱的字首不要使用 `RDS_`。
+ 在 `FILEPATH`，請指定 `D:\rdsdbdata\SQLAudit`。
+ 在 `MAXSIZE` 中，指定介於 2 MB 和50 MB 之間的大小。
+ 不要設定 `MAX_ROLLOVER_FILES` 或 `MAX_FILES`。
+ 如果 SQL Server 無法寫入稽核記錄，請勿設定讓它關閉資料庫執行個體。

## 建立稽核規格
<a name="Appendix.SQLServer.Options.Audit.CreateSpecifications"></a>

您使用與現場部署資料庫伺服器相同的方式建立伺服器稽核規格和資料庫稽核規格。如需建立稽核規格的資訊，請參閱Microsoft SQL Server 文件中的 [CREATE SERVER AUDIT SPECIFICATION](https://docs.microsoft.com/sql/t-sql/statements/create-server-audit-specification-transact-sql) 和 [CREATE DATABASE AUDIT SPECIFICATION](https://docs.microsoft.com/sql/t-sql/statements/create-database-audit-specification-transact-sql)。

為了避免錯誤，資料庫稽核規格或伺服器稽核規格名稱中的字首請不要使用 `RDS_`。

# 檢視稽核日誌
<a name="Appendix.SQLServer.Options.Audit.AuditRecords"></a>

稽核日誌被儲存於 `D:\rdsdbdata\SQLAudit`。

SQL Server 完成稽核日誌檔案的寫入後 — 當檔案到達大小限制時 —Amazon RDS 會將檔案上傳到 S3 儲存貯體。如果啟用了保留，Amazon RDS 會將檔案移動到保留資料夾內︰`D:\rdsdbdata\SQLAudit\transmitted`。

如需設定保留的相關資訊，請參閱 [將 SQL Server 稽核新增至資料庫執行個體選項](Appendix.SQLServer.Options.Audit.Adding.md)。

稽核記錄會保存在資料庫執行個體上，直到稽核日誌檔案被上傳為止。您可以執行下列命令，以查看稽核記錄。

```
SELECT   * 
	FROM     msdb.dbo.rds_fn_get_audit_file
	             ('D:\rdsdbdata\SQLAudit\*.sqlaudit'
	             , default
	             , default )
```

您可以使用相同的命令，將篩選器變更為 `D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit`，以查看保留資料夾中的稽核記錄。

```
SELECT   * 
	FROM     msdb.dbo.rds_fn_get_audit_file
	             ('D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit'
	             , default
	             , default )
```

## 將 SQL Server 稽核與多個可用區執行個體搭配使用
<a name="Appendix.SQLServer.Options.Audit.Multi-AZ"></a>

對於多可用區執行個體，將稽核日誌檔案傳送到 Amazon S3 的程序與單一可用區執行個體類似。不過，還是有一些重要的差異。
+ 資料庫稽核規格物件會被複寫到所有節點。
+ 伺服器稽核與伺服器稽核規格不會複寫到次要節點。反之，您必須手動建立或修改它們。

若要從兩個節點擷取伺服器稽核或伺服器稽核規格︰

1. 在主要節點上建立伺服器稽核或伺服器稽核規格。

1. 容錯移轉到次要節點，同時在次要節點上建立具有相同名稱和 GUID 的伺服器稽核或伺服器稽核規格。使用 `AUDIT_GUID` 參數指定 GUID。

# 設定 S3 儲存貯體
<a name="Appendix.SQLServer.Options.Audit.S3bucket"></a>

稽核日誌檔案會自動從資料庫執行個體上傳到 S3 儲存貯體。下列限制適用於使用為稽核檔案目標的 S3 儲存貯體︰ 
+ 它必須與資料庫執行個體位於相同的 AWS 區域和 AWS 帳戶。
+ 它不可以開放給大眾使用。
+ 儲存貯體擁有者也必須是 IAM 角色擁有者。
+ 您的 IAM 角色必須具有與 S3 儲存貯體伺服器端加密相關聯的客戶自管 KMS 金鑰許可。

用來儲存資料的目標索引鍵遵循此一命名結構描述︰`amzn-s3-demo-bucket/key-prefix/instance-name/audit-name/node_file-name.ext` 

**注意**  
您以 (`S3_BUCKET_ARN`) 選項設定來設定儲存貯體名稱和金鑰前綴的值。

結構描述由下列元素組成︰
+ ***amzn-s3-demo-bucket*** – S3 儲存貯體的名稱。
+ **`key-prefix`** – 您想要使用於稽核日誌的自訂索引鍵字首。
+ **`instance-name`** – Amazon RDS 執行個體的名稱。
+ **`audit-name`** – 稽核的名稱。
+ **`node`** – 節點的識別符，該節點是稽核日誌的來源 (`node1` 或 `node2`)。單一可用區執行個體有一個節點，多可用區執行個體則有兩個複寫節點。這些節點並不是主要和次要節點，因為主要和次要角色會隨著時間而改變。反之，節點識別符只是一個簡單的標籤。
  + **`node1`** – 第一個複寫節點 (單一可用區只有一個節點)。
  + **`node2`** – 第二個複寫節點 (多可用區有兩個節點)。
+ **`file-name`** – 目標檔案名稱。檔案名稱係從 SQL Server 依現狀取得。
+ **`ext`** – 檔案的副檔名 (`zip` 或 `sqlaudit`)：
  + **`zip`** – 如果啟用了壓縮 (預設)。
  + **`sqlaudit`** – 如果停用了壓縮。

# 手動建立適用於 SQL Server 稽核的IAM 角色
<a name="Appendix.SQLServer.Options.Audit.IAM"></a>

一般而言，當您建立新的選項時， 會為您AWS 管理主控台建立 IAM 角色和 IAM 信任政策。然而，您可以手動建立新的 IAM 角色，並使用於 SQL Server 稽核，以便使用您可能有的其他要求自訂該角色。若要這麼做，請建立一個 IAM 角色，並委派許可，以便 Amazon RDS 服務可以使用 Amazon S3 儲存貯體。當您建立 IAM 角色時，您需要附加信任和許可政策。信任政策允許 Amazon RDS 擔任此角色。許可政策定義此角色可以執行的動作。如需詳細資訊，請參閱《 *AWSIdentity and Access Management 使用者指南*》中的[建立角色以將許可委派給 AWS服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

您可以使用本節的範例建立您需要的信任關係和許可政策。

以下範例說明 SQL Server Audit 的信任關係。該政策會使用*服務主體* `rds.amazonaws.com`，以允許 RDS 寫入 S3 儲存貯體。「服務委託人」**是用來將許可授予給服務的識別符。當您允許以此種方式存取 `rds.amazonaws.com` 時，就是允許 RDS 代表您執行動作。如需服務委託人的詳細資訊，請參閱 [AWS JSON 政策元素：委託人](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

**Example SQL Server Audit 的信任關係**    
****  

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

建議您在資源型信任關係中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件內容金鑰，將服務的許可限定於特定資來源。這是防止[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)最有效的方式。

您可以同時使用全域條件內容索引鍵和包含帳號 ID 的 `aws:SourceArn` 值。在此情況下，當在相同陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 裡的帳户時，兩者必須使用同樣的帳户 ID。
+ 如果您想要跨服務存取單一資源，請使用 `aws:SourceArn`。
+ 如果您想要允許該帳戶中的任何資源與跨服務使用相關聯，請使用 `aws:SourceAccount`。

在信任關係中，請務必使用 `aws:SourceArn` 全域條件內容索引鍵，其中包含存取角色的資源之完整 Amazon 資源名稱 (ARN)。針對 SQL Server Audit，請確認同時包括資料庫選項群組和資料庫執行個體，如以下範例所示。

**Example SQL Server Audit 的全域條件內容索引鍵信任關係**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "rds.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": [
                        "arn:aws:rds:Region:my_account_ID:db:db_instance_identifier",
                        "arn:aws:rds:Region:my_account_ID:og:option_group_name"
                    ]
                }
            }
        }
    ]
}
```

在以下 SQL Server Audit 的許可政策範例中，我們指定了 Amazon S3 儲存貯體的 ARN。您可以使用 ARN 識別您想要授予存取權的特定帳戶、使用者或角色。如需使用 ARN 的詳細資訊，請參閱 [ Amazon 資源名稱 (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。

**Example SQL Server Audit 的許可政策**    
****  

```
{
	    "Version":"2012-10-17",		 	 	 
	    "Statement": [
	        {
	            "Effect": "Allow",
	            "Action": "s3:ListAllMyBuckets",
	            "Resource": "*"
	        },
	        {
	            "Effect": "Allow",
	            "Action": [
	                "s3:ListBucket",
	                "s3:GetBucketACL",
	                "s3:GetBucketLocation"
	            ],
	            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
	        },
	        {
	            "Effect": "Allow",
	            "Action": [
	                "s3:PutObject",
	                "s3:ListMultipartUploadParts",
	                "s3:AbortMultipartUpload"
	            ],
	            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
	        }
	    ]
	}
```

**注意**  
驗證相同AWS帳戶同時擁有 S3 儲存貯體和 SQL Server 資料庫執行個體時，需要 `s3:ListAllMyBuckets`動作。此動作會列出帳戶中儲存貯體的名稱。  
S3 儲存貯體命名空間是全域的。如果您不小心刪除了儲存貯體，其他使用者可在不同帳戶中建立相同名稱的儲存貯體。然後 SQL Server 稽核資料將會寫入新的儲存貯體。