を使用して Amazon S3 にログデータをエクスポートする AWS CLI - Amazon CloudWatch Logs

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

を使用して Amazon S3 にログデータをエクスポートする AWS CLI

次の例では、エクスポートタスクを使用して、 という名前の CloudWatch Logs ロググループから という名前の Amazon S3 バケットmy-log-groupにすべてのデータをエクスポートしますmy-exported-logs。この例では、「my-log-group」というロググループを作成済みであることを前提としています。

によって暗号化された S3 バケットへのログデータのエクスポート AWS KMS がサポートされています。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

アクセス権限を付与するには、ユーザー、グループ、またはロールにアクセス許可を追加します。

ステップ 3: S3 バケットのアクセス許可を設定する

すべての S3 バケットとオブジェクトは、デフォルト状態でプライベートに設定されます。バケットを作成したアカウント (リソース所有者) のみが、バケットとそれに含まれるオブジェクトにアクセスできます。ただし、リソース所有者は、アクセスポリシーを記述することで他のリソースおよびユーザーにアクセス権限を付与することができます。

重要

S3 バケットへのエクスポートをより安全にするために、ログデータを S3 バケットにエクスポートできるソースアカウントのリストの指定が必要になりました。

次の例では、aws:SourceAccount キー内のアカウント ID のリストは、ユーザーがログデータを 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 ログはログデータを S3 バケットにエクスポートできます。バケット所有者には、エクスポートされたすべてのオブジェクトに対する完全なアクセス権限があります。

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

    既存のバケットにすでに 1 つ以上のポリシーがアタッチされている場合は、そのポリシーへの CloudWatch ログアクセスのステートメントを追加します。バケットにアクセスするユーザーに適したアクセス許可であることを確認するために、アクセス許可の結果セットを評価することをお勧めします。

(オプション) ステップ 4: SSE-KMS で暗号化されたバケットへのエクスポート

このステップは、 でサーバー側の暗号化を使用する S3 バケットにエクスポートする場合にのみ必要です AWS KMS keys。この暗号化は SSE−KMS と呼ばれます。

SSE-KMS で暗号化されたバケットにエクスポートするには
  1. テキストエディタを使用して 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": "*" } ] }
  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 ログが送信先 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

アクセス権限を付与するには、ユーザー、グループ、またはロールにアクセス許可を追加します。

ステップ 3: S3 バケットのアクセス許可を設定する

すべての S3 バケットとオブジェクトは、デフォルト状態でプライベートに設定されます。バケットを作成したアカウント (リソース所有者) のみが、バケットとそれに含まれるオブジェクトにアクセスできます。ただし、リソース所有者は、アクセスポリシーを記述することで他のリソースおよびユーザーにアクセス権限を付与することができます。

重要

S3 バケットへのエクスポートをより安全にするために、ログデータを S3 バケットにエクスポートできるソースアカウントのリストの指定が必要になりました。

次の例では、aws:SourceAccount キー内のアカウント ID のリストは、ユーザーがログデータを 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 ログはログデータを S3 バケットにエクスポートできます。バケット所有者には、エクスポートされたすべてのオブジェクトに対する完全なアクセス権限があります。

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

    既存のバケットにすでに 1 つ以上のポリシーがアタッチされている場合は、そのポリシーへの CloudWatch ログアクセスのステートメントを追加します。バケットにアクセスするユーザーに適したアクセス許可であることを確認するために、アクセス許可の結果セットを評価することをお勧めします。

(オプション) ステップ 4: SSE-KMS で暗号化されたバケットへのエクスポート

このステップは、 でサーバー側の暗号化を使用する S3 バケットにエクスポートする場合にのみ必要です AWS KMS keys。この暗号化は SSE−KMS と呼ばれます。

SSE-KMS で暗号化されたバケットにエクスポートするには
  1. テキストエディタを使用して 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" } ] }
  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" }