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

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

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

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

で暗号化された S3 バケットへのログデータのエクスポート AWS KMS がサポートされています。DSSE-KMS で暗号化されたバケットへのエクスポートはサポートされていません。

エクスポートの設定方法の詳細は、エクスポート先の Amazon S3 バケットがエクスポート対象のログと同じアカウントにあるか、別のアカウントにあるかによって異なります。

同一アカウントのエクスポート (CLI)

Amazon S3 バケットがエクスポート対象のログと同じアカウントにある場合は、このセクションの手順を使用してください。

S3 バケットを作成する (CLI)

CloudWatch Logs 専用に作成したバケットを使用することをお勧めします。ただし、既存のバケットを使用する場合は、この手順をスキップできます。

注記

S3 バケットは、エクスポートするログデータと同じリージョンに存在している必要があります。CloudWatch Logs は、別のリージョンの S3 バケットへのデータのエクスポートをサポートしていません。

を使用して S3 バケットを作成するには AWS CLI

コマンドプロンプトで、次の create-bucket コマンドを実行します。ここで、LocationConstraint はログデータをエクスポートするリージョンです。

aws s3api create-bucket --bucket amzn-s3-demo-bucket --create-bucket-configuration LocationConstraint=us-east-2

以下は出力の例です。

{ "Location": "/amzn-s3-demo-bucket" }

アクセス許可を設定する (CLI)

後でエクスポートタスクを作成するには、IAM AmazonS3ReadOnlyAccess ロールと次のアクセス許可を使用してサインオンする必要があります。

  • logs:CreateExportTask

  • logs:CancelExportTask

  • logs:DescribeExportTasks

  • logs:DescribeLogStreams

  • logs:DescribeLogGroups

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

S3 バケットに対するアクセス許可の設定 (CLI)

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

重要

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

次の例では、aws:SourceAccount キー内のアカウント ID のリストにあるのは、ユーザーがログデータを S3 バケットにエクスポートできるアカウントです。aws:SourceArn キーは、アクションが実行される対象のリソースです。これを特定のロググループに制限することも、この例のようにワイルドカードを使用することもできます。

S3 バケットが作成されたアカウントのアカウント ID も含めることで、エクスポートを同じアカウント内で行えるようにすることをお勧めします。

S3 バケットでアクセス許可を設定するには
  1. policy.json という名前のファイルを作成し、次のアクセスポリシーを追加します。このとき、amzn-s3-demo-bucket を S3 バケットの名前に変更し、Principal をログデータのエクスポート先のリージョンのエンドポイント (us-east-1 など) に変更します。テキストエディタを使用してこのポリシーファイルを作成します。IAM コンソールを使用しないでください。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowGetBucketAcl", "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Condition": { "StringEquals": { "aws:SourceAccount": [ "123456789012", "111122223333" ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:us-east-1:123456789012:log-group:*", "arn:aws:logs:us-east-1:111122223333:log-group:*" ] } } }, { "Sid": "AllowPutObject", "Action": "s3:PutObject", "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": [ "123456789012", "111122223333" ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:us-east-1:123456789012:log-group:*", "arn:aws:logs:us-east-1:111122223333:log-group:*" ] } } } ] }
  2. put-bucket-policy コマンドを使用して、バケットでアクセスポリシーとして先ほど追加したポリシーを設定します。このポリシーにより、CloudWatch Logs は S3 バケットにログデータをエクスポートできるようになります。バケット所有者には、エクスポートされたすべてのオブジェクトに対する完全なアクセス権限があります。

    aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json
    警告

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

(オプション) SSE-KMS で暗号化された送信先 Amazon S3 バケットへのエクスポート (CLI)

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

SSE-KMS で暗号化されたバケットにエクスポートするには
  1. テキストエディタを使用して key_policy.json という名前のファイルを作成し、以下のアクセスポリシーを追加します。ポリシーを追加する際、以下の点を変更します。

    • Region を、実際のログのリージョンに置き換えます。

    • account-ARN を、KMS キーを所有するアカウントの ARN に置き換えます。

    JSON
    { "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-ARN: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. 次のコマンドを入力し、amzn-s3-demo-bucket を、ログをエクスポートするバケットの名前に置き換えます。

    aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration file://bucketencryption.json

    コマンドがエラーを返さなければ、このプロセスは成功しています。

エクスポートタスクを作成する (CLI)

次の コマンドを使用してエクスポートタスクを作成します。作成すると、エクスポートするデータのサイズに応じて、エクスポートタスクに数秒から数時間かかる可能性があります。

を使用して Amazon S3 にデータをエクスポートするには AWS CLI
  1. アクセス許可を設定する (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" --from 1441490400000 --to 1441494000000 --destination "amzn-s3-demo-bucket" --destination-prefix "export-task-output"

    以下は出力の例です。

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

クロスアカウントエクスポート (CLI)

Amazon S3 バケットがエクスポート対象のログとは別のアカウントにある場合は、このセクションの手順を使用してください。

クロスアカウントエクスポート用の S3 バケットを作成する (CLI)

CloudWatch Logs 専用に作成したバケットを使用することをお勧めします。ただし、既存のバケットを使用する場合は、ステップ 2 に進むことができます。

注記

S3 バケットは、エクスポートするログデータと同じリージョンに存在している必要があります。CloudWatch Logs は、別のリージョンの S3 バケットへのデータのエクスポートをサポートしていません。

を使用して S3 バケットを作成するには AWS CLI

コマンドプロンプトで、次の create-bucket コマンドを実行します。ここで、LocationConstraint はログデータをエクスポートするリージョンです。

aws s3api create-bucket --bucket amzn-s3-demo-bucket --create-bucket-configuration LocationConstraint=us-east-2

以下は出力の例です。

{ "Location": "/amzn-s3-demo-bucket" }

クロスアカウントエクスポートのアクセス許可を設定する (CLI)

まず、新しい IAM ポリシーを作成して、CloudWatch Logs が送信先アカウントの宛先 Amazon S3 バケットへの s3:PutObject アクションを有効にする必要があります。

s3:PutObject アクションに加えて、ポリシーに含まれる追加のアクションは、送信先バケットが AWS KMS 暗号化を使用しているか、S3 オブジェクト所有権設定を使用して ACLs が有効になっているかによって異なります。

  • KMS 暗号化を使用している場合は、キーリソースの kms:GenerateDataKey および kms:Decrypt アクションを追加します。

  • バケットで ACL が有効化されている場合、バケットリソースに s3:PutObjectAcl アクションを追加します。

次のポリシーで、 を送信先 S3 バケットの名前amzn-s3-demo-bucketに変更します。

作成するポリシーは、宛先バケットが  AWS KMS  暗号化を使用するかどうかによって異なります。 AWS KMS 暗号化を使用しない場合は、次の内容のポリシーを作成します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }

送信先バケットが AWS KMS 暗号化を使用している場合は、次の内容のポリシーを作成します。

JSON
{ "Version":"2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

送信先バケットで ACLsは、上記のポリシーで s3:PutObjectAcl を s3:PutObject Action ブロックに追加します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }

エクスポートタスクを作成するには、 AmazonS3ReadOnlyAccess管理ポリシーがアタッチされた IAM ロール、上記で作成された IAM ポリシー、および次のアクセス許可を使用してサインインする必要があります。

  • logs:CreateExportTask

  • logs:CancelExportTask

  • logs:DescribeExportTasks

  • logs:DescribeLogStreams

  • logs:DescribeLogGroups

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

クロスアカウントエクスポート用に S3 バケットにアクセス許可を設定する (CLI)

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

重要

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

次の例では、aws:SourceAccount キー内のアカウント ID のリストにあるのは、ユーザーがログデータを S3 バケットにエクスポートできるアカウントです。aws:SourceArn キーは、アクションが実行される対象のリソースです。これを特定のロググループに制限することも、この例のようにワイルドカードを使用することもできます。

S3 バケットが作成されたアカウントのアカウント ID も含めることで、エクスポートを同じアカウント内で行えるようにすることをお勧めします。

S3 バケットでアクセス許可を設定するには
  1. という名前のファイルを作成し、送信先 S3 バケットの名前amzn-s3-demo-bucketを などのログデータをエクスポートするリージョンのエンドポイントに変更Principalして、次のアクセスポリシーpolicy.jsonを追加しますus-west-1。テキストエディタを使用してこのポリシーファイルを作成します。IAM コンソールを使用しないでください。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Condition": { "StringEquals": { "aws:SourceAccount": [ "123456789012", "111122223333" ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:us-east-1:123456789012:log-group:*", "arn:aws:logs:us-east-1:111122223333:log-group:*" ] } } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": [ "123456789012", "111122223333" ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:us-east-1:123456789012:log-group:*", "arn:aws:logs:us-east-1:111122223333:log-group:*" ] } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/role_name" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::>amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
  2. put-bucket-policy コマンドを使用して、バケットでアクセスポリシーとして先ほど追加したポリシーを設定します。このポリシーにより、CloudWatch Logs は S3 バケットにログデータをエクスポートできるようになります。バケット所有者には、エクスポートされたすべてのオブジェクトに対する完全なアクセス権限があります。

    aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json
    警告

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

(オプション) クロスアカウントエクスポート (CLI) のために SSE-KMS で暗号化された送信先 Amazon S3 バケットへのエクスポート

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

SSE-KMS で暗号化されたバケットにエクスポートするには
  1. テキストエディタを使用して key_policy.json という名前のファイルを作成し、以下のアクセスポリシーを追加します。ポリシーを追加する際、以下の点を変更します。

    • us-east-1 をログのリージョンに置き換えます。

    • account-ARN を、KMS キーを所有するアカウントの ARN に置き換えます。

    • 123456789012 を KMS キーを所有するアカウント番号に置き換えます。

    • key_id と kms-key ID。

    • role_name は、エクスポートタスクの作成に使用されるロールです。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowCWLServicePrincipalUsage", "Effect": "Allow", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "EnableIAMUserPermissions", "Effect": "Allow", "Principal": { "AWS": "account-ARN" }, "Action": [ "kms:GetKeyPolicy*", "kms:PutKeyPolicy*", "kms:DescribeKey*", "kms:CreateAlias*", "kms:ScheduleKeyDeletion*", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "EnableIAMRolePermissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/role_name" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }
  2. 次のコマンドを入力します。

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

    以下は、このコマンドに対する出力例です。

    { "KeyMetadata": { "AWSAccountId": "account_id", "KeyId": "key_id", "Arn": "arn:aws:kms:us-east-1:123456789012: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. amzn-s3-demo-bucket を、ログをエクスポートするバケットの名前に置き換えて、次のコマンドを入力します。

    aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration file://bucketencryption.json

    コマンドがエラーを返さなければ、このプロセスは成功しています。

クロスアカウントエクスポートのエクスポートタスクを作成する (CLI)

次の コマンドを使用してエクスポートタスクを作成します。作成すると、エクスポートするデータのサイズに応じて、エクスポートタスクに数秒から数時間かかる可能性があります。

を使用して Amazon S3 にデータをエクスポートするには AWS CLI
  1. アクセス許可を設定する (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" --from 1441490400000 --to 1441494000000 --destination "amzn-s3-demo-bucket" --destination-prefix "export-task-output"

    以下は出力の例です。

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