本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用将日志数据导出到 Amazon S3 Amazon CLI
在以下示例中,您使用导出任务将名为的 CloudWatch 日志日志组中的所有数据导出my-log-group到名为的 Amazon S3 存储桶my-exported-logs。此示例假定您已创建了一个名为 my-log-group 的日志组。
支持将日志数据导出到由 Amazon KMS 加密的 S3 存储桶。不支持导出到由 DSSE-KMS 加密的存储桶。
有关如何设置导出的详细信息取决于您要导出到的 Amazon S3 存储桶与要导出的日志是位于同一个账户中,还是不同的账户中。
同账户导出 (CLI)
如果 Amazon S3 存储桶与要导出的日志位于同一个账户中,请参阅本节中的说明。
创建 S3 存储桶 (CLI)
我们建议您使用专为 Logs 创建的存储 CloudWatch 桶。但是,如果您想使用现有的存储桶,则可以跳过此过程。
注意
S3 桶必须与要导出的日志数据位于同一区域。 CloudWatch 日志不支持将数据导出到其他区域的 S3 存储桶。
要创建 S3 存储桶,请使用 Amazon CLI
在命令提示符处,运行以下 create-bucket 命令,其中 LocationConstraint 是您要将日志数据导出到的区域。
aws s3api create-bucket --bucketmy-exported-logs--create-bucket-configuration LocationConstraint=us-east-2
下面是示例输出。
{ "Location": "/my-exported-logs" }
设置访问权限 (CLI)
要稍后创建导出任务,您需要使用 AmazonS3ReadOnlyAccess IAM 角色和以下权限登录:
-
logs:CreateExportTask -
logs:CancelExportTask -
logs:DescribeExportTasks -
logs:DescribeLogStreams -
logs:DescribeLogGroups
要提供访问权限,请为您的用户、组或角色添加权限:
-
通过身份提供商在 IAM 中托管的用户:
创建适用于身份联合验证的角色。按照《IAM 用户指南》中针对第三方身份提供商创建角色(联合身份验证)的说明进行操作。
-
IAM 用户:
-
创建您的用户可以担任的角色。按照《IAM 用户指南》中为 IAM 用户创建角色的说明进行操作。
-
(不推荐使用)将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》中向用户添加权限(控制台)中的说明进行操作。
-
在 S3 存储桶上设置权限 (CLI)
默认情况下,所有 S3 桶和对象都是私有的。仅资源所有者(创建了存储桶的账户)能够访问存储桶及其包含的任何对象。不过,资源所有者可以选择通过编写访问策略来向其他资源和用户授予访问权限。
重要
为了使导出到 S3 桶更加安全,我们现在要求您指定允许将日志数据导出到 S3 桶的源账户列表。
在以下示例中,aws:SourceAccount密钥 IDs 中的账户列表将是用户可以从中将日志数据导出到您的 S3 存储桶的账户。aws:SourceArn 密钥是正在进行的操作的资源。如本示例所示,您可以将其限制为特定的日志组,也可以使用通配符。
建议您还包括创建 S3 桶的账户的账户 ID,以允许在同一账户内导出。
在 S3 桶上设置权限
-
创建一个名为
policy.json的文件并添加以下访问策略,将my-exported-logs更改为您的 S3 存储桶的名称,并将Principal更改为您要将日志数据导出到的区域的端点,例如us-west-1。使用文本编辑器以创建此策略文件。请勿使用 IAM 控制台。 -
使用put-bucket-policy命令将您刚刚添加的策略设置为存储桶的访问策略。此策略允许 CloudWatch 日志将日志数据导出到您的 S3 存储桶。存储桶拥有者将对所有导出的对象拥有完全权限。
aws s3api put-bucket-policy --bucket my-exported-logs --policy file://policy.json警告
如果现有存储桶已附加了一个或多个策略,请添加该策略的 CloudWatch 日志访问权限声明。我们建议您评估生成的权限集,确保它们适合访问存储桶的用户。
(可选)导出到使用 SSE-KMS (CLI) 加密的存储桶
仅当您要导出到使用服务器端加密的 S3 存储桶时,才需要执行此过程。 Amazon KMS keys这种加密称为 SSE-KMS。
导出到使用 SSE-KMS 加密的桶
-
使用文本编辑器创建名为
key_policy.json的文件,并添加以下访问策略。添加策略时,进行以下更改:-
Region替换为日志所在区域。 -
account-ARN替换为拥有 KMS 密钥的账户的 ARN。
-
-
输入以下命令:
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 --bucketbucket-name--server-side-encryption-configuration file://bucketencryption.json如果该命令没有返回错误,则该过程成功。
创建导出任务 (CLI)
使用以下命令创建导出任务。创建后,导出任务可能需要几秒到几小时的时间才能完成,具体取决于要导出的数据大小。
要使用将数据导出到 Amazon S3 Amazon CLI
-
如 设置访问权限 (CLI) 中所述,使用足够的权限登录。
-
在命令提示符处,使用以下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" }
跨账户导出 (CLI)
如果 Amazon S3 存储桶与要导出的日志位于不同账户中,请参阅本节中的说明。
主题
创建用于跨账户导出的 S3 存储桶 (CLI)
我们建议您使用专为 Logs 创建的存储 CloudWatch 桶。但是,如果要使用现有存储桶,请跳至第 2 步。
注意
S3 桶必须与要导出的日志数据位于同一区域。 CloudWatch 日志不支持将数据导出到其他区域的 S3 存储桶。
要创建 S3 存储桶,请使用 Amazon CLI
在命令提示符处,运行以下 create-bucket 命令,其中 LocationConstraint 是您要将日志数据导出到的区域。
aws s3api create-bucket --bucketmy-exported-logs--create-bucket-configuration LocationConstraint=us-east-2
下面是示例输出。
{ "Location": "/my-exported-logs" }
设置跨账户导出 (CLI) 的访问权限
首先,您必须创建新的 IAM 策略,以使 CloudWatch 日志拥有目标 Amazon S3 存储桶的s3:PutObject权限。
要稍后创建导出任务,您需要使用 AmazonS3ReadOnlyAccess IAM 角色和某些其他权限登录。您可以创建包含其他必要权限的策略。
您创建的策略取决于目标存储桶是否使用 Amazon KMS 加密。如果它不使用 Amazon KMS 加密,请创建包含以下内容的策略。
如果目标存储桶使用 Amazon KMS 加密,请创建包含以下内容的策略。
要稍后创建导出任务,您必须使用 AmazonS3ReadOnlyAccess IAM 角色、您刚刚创建的 IAM 策略以及以下权限登录:
-
logs:CreateExportTask -
logs:CancelExportTask -
logs:DescribeExportTasks -
logs:DescribeLogStreams -
logs:DescribeLogGroups
要提供访问权限,请为您的用户、组或角色添加权限:
-
通过身份提供商在 IAM 中托管的用户:
创建适用于身份联合验证的角色。按照《IAM 用户指南》中针对第三方身份提供商创建角色(联合身份验证)的说明进行操作。
-
IAM 用户:
-
创建您的用户可以担任的角色。按照《IAM 用户指南》中为 IAM 用户创建角色的说明进行操作。
-
(不推荐使用)将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》中向用户添加权限(控制台)中的说明进行操作。
-
在 S3 存储桶上设置跨账户导出权限 (CLI)
默认情况下,所有 S3 桶和对象都是私有的。仅资源所有者(创建了存储桶的账户)能够访问存储桶及其包含的任何对象。不过,资源所有者可以选择通过编写访问策略来向其他资源和用户授予访问权限。
重要
为了使导出到 S3 桶更加安全,我们现在要求您指定允许将日志数据导出到 S3 桶的源账户列表。
在以下示例中,aws:SourceAccount密钥 IDs 中的账户列表将是用户可以从中将日志数据导出到您的 S3 存储桶的账户。aws:SourceArn 密钥是正在进行的操作的资源。如本示例所示,您可以将其限制为特定的日志组,也可以使用通配符。
建议您还包括创建 S3 桶的账户的账户 ID,以允许在同一账户内导出。
在 S3 桶上设置权限
-
创建一个名为
policy.json的文件并添加以下访问策略,将my-exported-logs更改为您的 S3 存储桶的名称,并将Principal更改为您要将日志数据导出到的区域的端点,例如us-west-1。使用文本编辑器以创建此策略文件。请勿使用 IAM 控制台。 -
使用put-bucket-policy命令将您刚刚添加的策略设置为存储桶的访问策略。此策略允许 CloudWatch 日志将日志数据导出到您的 S3 存储桶。存储桶拥有者将对所有导出的对象拥有完全权限。
aws s3api put-bucket-policy --bucket my-exported-logs --policy file://policy.json警告
如果现有存储桶已附加了一个或多个策略,请添加该策略的 CloudWatch 日志访问权限声明。我们建议您评估生成的权限集,确保它们适合访问存储桶的用户。
(可选)导出到使用 SSE-KMS 加密的存储桶以进行跨账户导出 (CLI)
仅当您要导出到使用服务器端加密的 S3 存储桶时,才需要执行此过程。 Amazon KMS keys这种加密称为 SSE-KMS。
导出到使用 SSE-KMS 加密的桶
-
使用文本编辑器创建名为
key_policy.json的文件,并添加以下访问策略。添加策略时,进行以下更改:-
Region替换为日志所在区域。 -
account-ARN替换为拥有 KMS 密钥的账户的 ARN。
-
-
输入以下命令:
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 --bucketbucket-name--server-side-encryption-configuration file://bucketencryption.json如果该命令没有返回错误,则该过程成功。
为跨账户导出 (CLI) 创建导出任务
使用以下命令创建导出任务。创建后,导出任务可能需要几秒到几小时的时间才能完成,具体取决于要导出的数据大小。
要使用将数据导出到 Amazon S3 Amazon CLI
-
如 设置访问权限 (CLI) 中所述,使用足够的权限登录。
-
在命令提示符处,使用以下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" }