本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 將日誌資料匯出至 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 中建立匯出任務,您需要使用 AmazonS3ReadOnlyAccess
IAM角色和下列許可登入:
logs:CreateExportTask
logs:CancelExportTask
logs:DescribeExportTasks
logs:DescribeLogStreams
logs:DescribeLogGroups
若要提供存取權,請新增權限至您的使用者、群組或角色:
-
中的使用者和群組 AWS IAM Identity Center:
建立權限合集。請按照 AWS IAM Identity Center 使用者指南 中的 建立權限合集 說明進行操作。
-
IAM 透過身分提供者在 中管理的使用者:
建立聯合身分的角色。請遵循 IAM 使用者指南 中為第三方身分提供者 (聯合) 建立角色的指示。
-
IAM 使用者:
-
建立您的使用者可擔任的角色。請遵循 IAM 使用者指南 中為IAM使用者建立角色的指示。
-
(不建議) 將政策直接附加至使用者,或將使用者新增至使用者群組。請遵循 IAM 使用者指南 中將許可新增至使用者 (主控台) 中的指示。
-
步驟 3:設定 S3 儲存貯體的許可
依據預設,所有 S3 儲存貯體與物件皆為私有。只有資源擁有者、建立儲存貯體的帳戶,才能存取儲存貯體及其包含的任何物件。不過,資源擁有者可藉由編寫存取政策,選擇將存取許可授予其他資源或使用者。
重要
為了使匯出至 S3 儲存貯體更加安全,現在要求您指定允許將日誌資料匯出至 S3 儲存貯體的來源帳戶清單。
在下列範例中,aws:SourceAccount
金鑰IDs中的帳戶清單會是使用者可以將日誌資料匯出至 S3 儲存貯體的帳戶。aws:SourceArn
金鑰會是正在採取行動的資源。您可以將其限制為具體的日誌群組,或使用萬用字元,如本範例所示。
我們建議您也包含建立 S3 儲存貯體之帳戶的帳戶 ID,以允許在同一帳戶內匯出。
設定 S3 儲存貯體的許可
-
建立名為
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:*", ... ] } } } ] } -
使用 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
-
使用文字編輯器建立名為
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": "*" } ] } -
-
輸入以下命令:
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 } -
使用文字編輯器建立名為
bucketencryption.json
的檔案,包含下列內容。{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "{KMS Key ARN}" }, "BucketKeyEnabled": true } ] }
-
輸入下列命令,取代
bucket-name
使用您要匯出日誌的儲存貯體名稱。aws s3api put-bucket-encryption --bucket
bucket-name
--server-side-encryption-configuration file://bucketencryption.json如果命令沒有傳回錯誤,則表示該流程成功。
步驟 5:建立匯出任務
使用以下命令建立匯出任務。在您建立匯出任務後,此任務可能需花費幾秒到幾小時的時間,視匯出資料的大小而定。
使用 匯出資料至 Amazon S3 AWS CLI
-
如 步驟 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
" --from1441490400000
--to1441494000000
--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 中建立匯出任務,您需要使用 AmazonS3ReadOnlyAccess
IAM角色和某些其他許可登入。您可以建立包含其他部分必要許可的政策。
您建立的政策取決於目的地儲存貯體是否使用 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 中建立匯出任務,您必須使用AmazonS3ReadOnlyAccess
IAM角色、您剛建立IAM的政策以及下列許可登入:
logs:CreateExportTask
logs:CancelExportTask
logs:DescribeExportTasks
logs:DescribeLogStreams
logs:DescribeLogGroups
若要提供存取權,請新增權限至您的使用者、群組或角色:
-
中的使用者和群組 AWS IAM Identity Center:
建立權限合集。請按照 AWS IAM Identity Center 使用者指南 中的 建立權限合集 說明進行操作。
-
IAM 透過身分提供者在 中管理的使用者:
建立聯合身分的角色。請遵循 IAM 使用者指南 中為第三方身分提供者 (聯合) 建立角色的指示。
-
IAM 使用者:
-
建立您的使用者可擔任的角色。請遵循 IAM 使用者指南 中為IAM使用者建立角色的指示。
-
(不建議) 將政策直接附加至使用者,或將使用者新增至使用者群組。請遵循 IAM 使用者指南 中的將許可新增至使用者 (主控台) 中的指示。
-
步驟 3:設定 S3 儲存貯體的許可
依據預設,所有 S3 儲存貯體與物件皆為私有。只有資源擁有者、建立儲存貯體的帳戶,才能存取儲存貯體及其包含的任何物件。不過,資源擁有者可藉由編寫存取政策,選擇將存取許可授予其他資源或使用者。
重要
為了使匯出至 S3 儲存貯體更加安全,現在要求您指定允許將日誌資料匯出至 S3 儲存貯體的來源帳戶清單。
在下列範例中,aws:SourceAccount
金鑰IDs中的帳戶清單會是使用者可以將日誌資料匯出至 S3 儲存貯體的帳戶。aws:SourceArn
金鑰會是正在採取行動的資源。您可以將其限制為具體的日誌群組,或使用萬用字元,如本範例所示。
我們建議您也包含建立 S3 儲存貯體之帳戶的帳戶 ID,以允許在同一帳戶內匯出。
設定 S3 儲存貯體的許可
-
建立名為
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" } } } ] } -
使用 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
-
使用文字編輯器建立名為
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
" } ] } -
-
輸入以下命令:
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 } -
使用文字編輯器建立名為
bucketencryption.json
的檔案,包含下列內容。{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "{KMS Key ARN}" }, "BucketKeyEnabled": true } ] }
-
輸入下列命令,取代
bucket-name
使用您要匯出日誌的儲存貯體名稱。aws s3api put-bucket-encryption --bucket
bucket-name
--server-side-encryption-configuration file://bucketencryption.json如果命令沒有傳回錯誤,則表示該流程成功。
步驟 5:建立匯出任務
使用以下命令建立匯出任務。在您建立匯出任務後,此任務可能需花費幾秒到幾小時的時間,視匯出資料的大小而定。
使用 匯出資料至 Amazon S3 AWS CLI
-
如 步驟 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
" --from1441490400000
--to1441494000000
--destination "my-exported-logs
" --destination-prefix "export-task-output
"下列為範例輸出。
{ "taskId": "
cda45419-90ea-4db5-9833-aade86253e66
" }