本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 將日誌資料匯出至 Amazon S3 AWS CLI
在以下範例中,您將使用匯出任務,從名為 my-log-group
的 CloudWatch Logs 日誌群組,將所有資料匯出至名為 my-exported-logs
的 Amazon S3 儲存貯體。此範例假設您已建立一個名為 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
的檔案,並新增下列存取政策。新增政策時,進行下列變更:-
將
Region
替換成您的日誌區域。 -
將
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
的檔案,並新增下列存取政策。新增政策時,進行下列變更:-
將
Region
替換成您的日誌區域。 -
將
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
" }