

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

# 傳送至 Amazon S3 的日誌
<a name="AWS-logs-infrastructure-S3"></a>

當您將日誌設定為傳送至 Amazon S3 時， 會視需要 AWS 建立或變更與接收日誌的 S3 儲存貯體相關聯的資源政策。

直接發佈至 Amazon S3 的日誌會發佈至您指定的現有儲存貯體。在指定的儲存貯體中，每五分鐘會建立一或多個日誌檔案。

當您第一次將日誌傳送到 Amazon S3 儲存貯體時，傳送日誌的服務會記錄儲存貯體的擁有者，以確保日誌僅傳送到屬於此帳戶的儲存貯體。因此，若要變更 Amazon S3 儲存貯體擁有者，您必須在原始服務中重新建立或更新日誌訂閱。

**注意**  
CloudFront 使用的許可模型與其他將付費日誌傳送至 S3 的 服務不同。如需詳細資訊，請參閱[設定標準記錄和存取日誌檔案所需的許可](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#AccessLogsBucketAndFileOwnership)。  
此外，如果您針對 CloudFront 存取日誌和另一個日誌來源使用相同的 S3 儲存貯體，在 CloudFront 的儲存貯體上啟用 ACL 也會將許可授予使用此儲存貯體的所有其他日誌來源。

**重要**  
如果您要將日誌傳送至 Amazon S3 儲存貯體，且儲存貯體政策包含 `NotAction`或 `NotPrincipal`元素，則自動將日誌交付許可新增至儲存貯體，並建立日誌訂閱將會失敗。若要成功建立日誌訂閱，您需要手動將日誌交付許可新增至儲存貯體政策，然後建立日誌訂閱。如需詳細資訊，請參閱本節中的指示。  
如果儲存貯體使用客戶受管 AWS KMS 金鑰進行伺服器端加密，您還必須為客戶受管金鑰新增金鑰政策。如需詳細資訊，請參閱[Amazon S3 儲存貯體伺服器端加密](#AWS-logs-SSE-KMS-S3)。  
如果目的地儲存貯體已啟用 SSE-KMS 和儲存貯體金鑰，則連接的客戶受管 KMS 金鑰政策不再適用於所有請求。如需詳細資訊，請參閱[使用 Amazon S3 儲存貯體金鑰降低 SSE-KMS 的成本](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)。  
如果您使用付費日誌和 S3 加密搭配客戶受 AWS KMS 管金鑰，則必須在設定儲存貯體時使用完整 AWS KMS 金鑰 ARN，而非金鑰 ID。如需詳細資訊，請參閱 [ put-bucket-encryption](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-encryption.html)。

**使用者許可**

您必須以具有下列許可的帳戶登入，才能第一次設定將任何這些類型的日誌傳送到 Amazon S3。
+ `logs:CreateLogDelivery`
+ `S3:GetBucketPolicy`
+ `S3:PutBucketPolicy`

如果任何這些類型的日誌已傳送到某個 Amazon S3 儲存貯體，則若要設定將另一種類型的日誌傳送到同一個儲存貯體，您只需要有 `logs:CreateLogDelivery` 許可。

**S3 儲存貯體資源政策**

日誌送往的 S3 儲存貯體必須具有包含特定許可的資源政策。如果儲存貯體目前沒有資源政策，且設定記錄的使用者具有儲存貯體的 `S3:GetBucketPolicy` 和 `S3:PutBucketPolicy` 許可，則當您開始將日誌傳送至 Amazon S3 時， AWS 會自動建立下列政策。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "AWSLogDeliveryWrite20150319",
    "Statement": [
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": [
                        "{{0123456789}}"
                    ]
                },
                "ArnLike": {
                    "aws:SourceArn": [
                        "arn:aws:logs:{{us-east-1}}:{{111122223333}}:*"
                    ]
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/AWSLogs/{{account-ID}}/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceAccount": [
                        "{{0123456789}}"
                    ]
                },
                "ArnLike": {
                    "aws:SourceArn": [
                        "arn:aws:logs:{{us-east-1}}:{{111122223333}}:*"
                    ]
                }
            }
        }
    ]
}
```

------

在先前的政策中，對於 `aws:SourceAccount`，指定要將日誌交付至此儲存貯體的帳戶 IDS 清單。對於 `aws:SourceArn`，指定產生日誌之資源的 ARN 清單，格式為 `arn:aws:logs:{{source-region}}:{{source-account-id}}:*`。

如果儲存貯體具有資源政策，但該政策未包含前一個政策中出現的陳述式，且設定記錄的使用者具有儲存貯體的 `S3:GetBucketPolicy` 和 `S3:PutBucketPolicy` 許可，則該陳述式會附加至儲存貯體的資源政策。

**注意**  
在某些情況下， AWS CloudTrail 如果 `s3:ListBucket`許可尚未授予 ，您可能會在 中看到`AccessDenied`錯誤`delivery.logs.amazonaws.com`。若要避免 CloudTrail 日誌中出現這些錯誤，您必須將 `s3:ListBucket` 許可授予 `delivery.logs.amazonaws.com`，且必須包含與先前儲存貯體政策中設定的 `s3:GetBucketAcl` 許可一起顯示的 `Condition` 參數。為簡化此操作而不用建立一個新的 `Statement`，你可以直接將 `AWSLogDeliveryAclCheck` 更新為 `“Action”: [“s3:GetBucketAcl”, “s3:ListBucket”]`

## Amazon S3 儲存貯體伺服器端加密
<a name="AWS-logs-SSE-KMS-S3"></a>

您可以啟用伺服器端加密搭配 Amazon S3 S3-managed金鑰 (SSE-S3) 或使用存放在 AWS Key Management Service (SSE-KMS) 中的 AWS KMS 金鑰進行伺服器端加密，以保護 Amazon S3 儲存貯體中的資料。如需詳細資訊，請參閱[使用伺服器端加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)。

如果您選擇 SSE-S3，則不需要其他組態。Amazon S3 會處理加密金鑰。

**警告**  
如果您選擇 SSE-KMS，您必須使用客戶受管金鑰，因為此案例不支援使用 AWS 受管金鑰。如果您使用 AWS 受管金鑰設定加密，日誌將以無法讀取的格式交付。

當您使用客戶受管 AWS KMS 金鑰時，您可以在啟用儲存貯體加密時指定客戶受管金鑰的 Amazon Resource Name (ARN)。您必須將以下內容新增至客戶受管金鑰的金鑰政策 (而不是 S3 儲存貯體的儲存貯體政策)，以便日誌傳遞帳戶可以寫入您的 S3 儲存貯體。

如果您選擇 SSE-KMS，則必須使用客戶受管金鑰，因為此情況不支援使用 AWS 受管金鑰。當您使用客戶受管 AWS KMS 金鑰時，您可以在啟用儲存貯體加密時指定客戶受管金鑰的 Amazon Resource Name (ARN)。您必須將以下內容新增至客戶受管金鑰的金鑰政策 (而不是 S3 儲存貯體的儲存貯體政策)，以便日誌傳遞帳戶可以寫入您的 S3 儲存貯體。

```
{
    "Sid": "Allow Logs Delivery to use the key", 
    "Effect": "Allow", 
    "Principal": {
        "Service": [ "delivery.logs.amazonaws.com" ] 
    }, 
    "Action": [ 
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:SourceAccount": ["{{0123456789}}"]
        },
        "ArnLike": {
            "aws:SourceArn": ["arn:aws:logs:{{us-east-1}}:{{0123456789}}:*"]
        }
        }
}
```

對於 `aws:SourceAccount`，指定要將日誌交付至此儲存貯體的帳戶 IDS 清單。對於 `aws:SourceArn`，指定產生日誌之資源的 ARN 清單，格式為 `arn:aws:logs:{{source-region}}:{{source-account-id}}:*`。