使用 將日誌資料匯出至 Amazon S3 AWS CLI - Amazon CloudWatch Logs

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

使用 將日誌資料匯出至 Amazon S3 AWS CLI

在下列範例中,您可以使用匯出任務,將所有資料從名為 的 CloudWatch Logs 日誌群組匯出my-log-group至名為 的 Amazon S3 儲存貯體my-exported-logs。此範例假設您已建立一個名為 my-log-group 的日誌群組。

AWS KMS 支援將日誌資料匯出至由 加密的 S3 儲存貯體。不支援匯出至使用 DSSE-KMS 加密的儲存貯體。

如何設定匯出作業的詳細方法,取決於您要存放匯出資料的 Amazon S3 儲存貯體是否與要匯出的日誌位於同一帳戶。

同帳戶匯出

如果 Amazon S3 儲存貯體與要匯出的日誌位於同一帳戶,請參閱本區段的說明。

步驟 1:建立 S3 儲存貯體

建議您使用專為 CloudWatch Logs 建立的儲存貯體。不過,如果您想要使用現有的儲存貯體,您可以跳到步驟 2。

注意

S3 儲存貯體必須與要匯出的日誌資料位於相同的區域中。 CloudWatch Logs 不支援將資料匯出至不同區域中的 S3 儲存貯體。

使用 建立 S3 儲存貯體 AWS CLI

在命令提示中執行以下 create-bucket 命令,其中的 LocationConstraint 是您要匯出日誌資料的區域。

aws s3api create-bucket --bucket my-exported-logs --create-bucket-configuration LocationConstraint=us-east-2

下列為範例輸出。

{ "Location": "/my-exported-logs" }

步驟 2:設置存取許可

若要在步驟 5 中建立匯出任務,您需要使用 AmazonS3ReadOnlyAccessIAM角色和下列許可登入:

  • logs:CreateExportTask

  • logs:CancelExportTask

  • logs:DescribeExportTasks

  • logs:DescribeLogStreams

  • logs:DescribeLogGroups

若要提供存取權,請新增權限至您的使用者、群組或角色:

步驟 3:設定 S3 儲存貯體的許可

依據預設,所有 S3 儲存貯體與物件皆為私有。只有資源擁有者、建立儲存貯體的帳戶,才能存取儲存貯體及其包含的任何物件。不過,資源擁有者可藉由編寫存取政策,選擇將存取許可授予其他資源或使用者。

重要

為了使匯出至 S3 儲存貯體更加安全,現在要求您指定允許將日誌資料匯出至 S3 儲存貯體的來源帳戶清單。

在下列範例中,aws:SourceAccount金鑰IDs中的帳戶清單會是使用者可以將日誌資料匯出至 S3 儲存貯體的帳戶。aws:SourceArn 金鑰會是正在採取行動的資源。您可以將其限制為具體的日誌群組,或使用萬用字元,如本範例所示。

我們建議您也包含建立 S3 儲存貯體之帳戶的帳戶 ID,以允許在同一帳戶內匯出。

設定 S3 儲存貯體的許可
  1. 建立名為 policy.json 的檔案,然後新增以下存取政策,將 my-exported-logs 變更為您的 S3 儲存貯體名稱,然後將 Principal 變更為您匯出日誌資料的區域端點,例如us-west-1 。請使用文字編輯器來建立此政策檔案。請勿使用 IAM 主控台。

    { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/*", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } } ] }
  2. 使用 put-bucket-policy命令,在儲存貯體上設定您剛新增為存取政策的政策。此政策可讓 CloudWatch Logs 將日誌資料匯出至 S3 儲存貯體。儲存貯體擁有者將擁有所有匯出物件的完整許可。

    aws s3api put-bucket-policy --bucket my-exported-logs --policy file://policy.json
    警告

    如果現有儲存貯體已連接一或多個政策,請將 CloudWatch Logs 存取的陳述式新增至該政策。我們建議您評估所產生的一組許可,以確保它們適用於將存取儲存貯體的使用者。

(選用) 步驟 4:匯出至使用 SSE- 加密的儲存貯體KMS

只有在匯出至使用伺服器端加密搭配 的 S3 儲存貯體時,才需要此步驟 AWS KMS keys。此加密稱為 SSE-KMS。

若要匯出至使用 SSE- 加密的儲存貯體KMS
  1. 使用文字編輯器建立名為 key_policy.json 的檔案,並新增下列存取政策。新增政策時,進行下列變更:

    • Replace (取代) Region 日誌的區域。

    • Replace (取代) account-ARN 使用擁有KMS金鑰ARN之帳戶的 。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Allow CWL Service Principal usage", "Effect": "Allow", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "account-ARN" }, "Action": [ "kms:GetKeyPolicy*", "kms:PutKeyPolicy*", "kms:DescribeKey*", "kms:CreateAlias*", "kms:ScheduleKeyDeletion*", "kms:Decrypt" ], "Resource": "*" } ] }
  2. 輸入以下命令:

    aws kms create-key --policy file://key_policy.json

    以下為此命令的範例輸出:

    { "KeyMetadata": { "AWSAccountId": "account_id", "KeyId": "key_id", "Arn": "arn:aws:kms:us-east-2:account_id:key/key_id", "CreationDate": "time", "Enabled": true, "Description": "", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "Origin": "AWS_KMS", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ], "MultiRegion": false }
  3. 使用文字編輯器建立名為 bucketencryption.json 的檔案,包含下列內容。

    { "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "{KMS Key ARN}" }, "BucketKeyEnabled": true } ] }
  4. 輸入下列命令,取代 bucket-name 使用您要匯出日誌的儲存貯體名稱。

    aws s3api put-bucket-encryption --bucket bucket-name --server-side-encryption-configuration file://bucketencryption.json

    如果命令沒有傳回錯誤,則表示該流程成功。

步驟 5:建立匯出任務

使用以下命令建立匯出任務。在您建立匯出任務後,此任務可能需花費幾秒到幾小時的時間,視匯出資料的大小而定。

使用 匯出資料至 Amazon S3 AWS CLI
  1. 步驟 2:設置存取許可 中所示,以足夠的許可登入。

  2. 在命令提示中,使用下列create-export-task命令來建立匯出任務。

    aws logs create-export-task --profile CWLExportUser --task-name "my-log-group-09-10-2015" --log-group-name "my-log-group" --from 1441490400000 --to 1441494000000 --destination "my-exported-logs" --destination-prefix "export-task-output"

    下列為範例輸出。

    { "taskId": "cda45419-90ea-4db5-9833-aade86253e66" }

跨帳戶匯出

如果 Amazon S3 儲存貯體與要匯出的日誌位於不同帳戶,請參閱本區段的說明。

步驟 1:建立 S3 儲存貯體

建議您使用專為 CloudWatch Logs 建立的儲存貯體。不過,如果您想要使用現有的儲存貯體,您可以跳到步驟 2。

注意

S3 儲存貯體必須與要匯出的日誌資料位於相同的區域中。 CloudWatch Logs 不支援將資料匯出至不同區域中的 S3 儲存貯體。

使用 建立 S3 儲存貯體 AWS CLI

在命令提示中執行以下 create-bucket 命令,其中的 LocationConstraint 是您要匯出日誌資料的區域。

aws s3api create-bucket --bucket my-exported-logs --create-bucket-configuration LocationConstraint=us-east-2

下列為範例輸出。

{ "Location": "/my-exported-logs" }

步驟 2:設置存取許可

首先,您必須建立新的IAM政策,讓 CloudWatch Logs 擁有目的地 Amazon S3 儲存貯體的s3:PutObject許可。

若要在步驟 5 中建立匯出任務,您需要使用 AmazonS3ReadOnlyAccessIAM角色和某些其他許可登入。您可以建立包含其他部分必要許可的政策。

您建立的政策取決於目的地儲存貯體是否使用 AWS KMS 加密。如果不使用 AWS KMS 加密,請使用下列內容建立政策。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-exported-logs/*" } ] }

如果目的地儲存貯體使用 AWS KMS 加密,請使用下列內容建立政策。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-exported-logs/*" }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "ARN_OF_KMS_KEY" } ] }

若要在步驟 5 中建立匯出任務,您必須使用AmazonS3ReadOnlyAccessIAM角色、您剛建立IAM的政策以及下列許可登入:

  • logs:CreateExportTask

  • logs:CancelExportTask

  • logs:DescribeExportTasks

  • logs:DescribeLogStreams

  • logs:DescribeLogGroups

若要提供存取權,請新增權限至您的使用者、群組或角色:

步驟 3:設定 S3 儲存貯體的許可

依據預設,所有 S3 儲存貯體與物件皆為私有。只有資源擁有者、建立儲存貯體的帳戶,才能存取儲存貯體及其包含的任何物件。不過,資源擁有者可藉由編寫存取政策,選擇將存取許可授予其他資源或使用者。

重要

為了使匯出至 S3 儲存貯體更加安全,現在要求您指定允許將日誌資料匯出至 S3 儲存貯體的來源帳戶清單。

在下列範例中,aws:SourceAccount金鑰IDs中的帳戶清單會是使用者可以將日誌資料匯出至 S3 儲存貯體的帳戶。aws:SourceArn 金鑰會是正在採取行動的資源。您可以將其限制為具體的日誌群組,或使用萬用字元,如本範例所示。

我們建議您也包含建立 S3 儲存貯體之帳戶的帳戶 ID,以允許在同一帳戶內匯出。

設定 S3 儲存貯體的許可
  1. 建立名為 policy.json 的檔案,然後新增以下存取政策,將 my-exported-logs 變更為您的 S3 儲存貯體名稱,然後將 Principal 變更為您匯出日誌資料的區域端點,例如us-west-1 。請使用文字編輯器來建立此政策檔案。請勿使用 IAM 主控台。

    { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/*", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::create_export_task_caller_account:role/role_name" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-exported-logs/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
  2. 使用 put-bucket-policy命令,在儲存貯體上設定您剛新增為存取政策的政策。此政策可讓 CloudWatch Logs 將日誌資料匯出至 S3 儲存貯體。儲存貯體擁有者將擁有所有匯出物件的完整許可。

    aws s3api put-bucket-policy --bucket my-exported-logs --policy file://policy.json
    警告

    如果現有儲存貯體已連接一或多個政策,請將 CloudWatch Logs 存取的陳述式新增至該政策。我們建議您評估所產生的一組許可,以確保它們適用於將存取儲存貯體的使用者。

(選用) 步驟 4:匯出至使用 SSE- 加密的儲存貯體KMS

只有在匯出至使用伺服器端加密搭配 的 S3 儲存貯體時,才需要此步驟 AWS KMS keys。此加密稱為 SSE-KMS。

若要匯出至使用 SSE- 加密的儲存貯體KMS
  1. 使用文字編輯器建立名為 key_policy.json 的檔案,並新增下列存取政策。新增政策時,進行下列變更:

    • Replace (取代) Region 日誌的區域。

    • Replace (取代) account-ARN 使用擁有KMS金鑰ARN之帳戶的 。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Allow CWL Service Principal usage", "Effect": "Allow", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "account-ARN" }, "Action": [ "kms:GetKeyPolicy*", "kms:PutKeyPolicy*", "kms:DescribeKey*", "kms:CreateAlias*", "kms:ScheduleKeyDeletion*", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "Enable IAM Role Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::create_export_task_caller_account:role/role_name" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "ARN_OF_KMS_KEY" } ] }
  2. 輸入以下命令:

    aws kms create-key --policy file://key_policy.json

    以下為此命令的範例輸出:

    { "KeyMetadata": { "AWSAccountId": "account_id", "KeyId": "key_id", "Arn": "arn:aws:kms:us-east-2:account_id:key/key_id", "CreationDate": "time", "Enabled": true, "Description": "", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "Origin": "AWS_KMS", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ], "MultiRegion": false }
  3. 使用文字編輯器建立名為 bucketencryption.json 的檔案,包含下列內容。

    { "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "{KMS Key ARN}" }, "BucketKeyEnabled": true } ] }
  4. 輸入下列命令,取代 bucket-name 使用您要匯出日誌的儲存貯體名稱。

    aws s3api put-bucket-encryption --bucket bucket-name --server-side-encryption-configuration file://bucketencryption.json

    如果命令沒有傳回錯誤,則表示該流程成功。

步驟 5:建立匯出任務

使用以下命令建立匯出任務。在您建立匯出任務後,此任務可能需花費幾秒到幾小時的時間,視匯出資料的大小而定。

使用 匯出資料至 Amazon S3 AWS CLI
  1. 步驟 2:設置存取許可 中所示,以足夠的許可登入。

  2. 在命令提示中,使用以下create-export-task命令來建立匯出任務。

    aws logs create-export-task --profile CWLExportUser --task-name "my-log-group-09-10-2015" --log-group-name "my-log-group" --from 1441490400000 --to 1441494000000 --destination "my-exported-logs" --destination-prefix "export-task-output"

    下列為範例輸出。

    { "taskId": "cda45419-90ea-4db5-9833-aade86253e66" }