AWS CLI を使用してログデータを Amazon S3 にエクスポートする
次の例では、エクスポートタスクを使用して、すべてのデータを 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 バケットへのデータのエクスポートをサポートしていません。
AWS CLI を使用して S3 バケットを作成するには
コマンドプロンプトで、次の 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 (successor to AWS Single Sign-On) のユーザーとグループ:
アクセス許可セットを作成します。「AWS IAM Identity Center (successor to AWS Single Sign-On) ユーザーガイド」の「シークレットの作成と管理」の手順に従ってください。
-
ID プロバイダーを通じて IAM で管理されているユーザー:
ID フェデレーションのロールを作成する。詳細については、「IAM ユーザーガイド」の「サードパーティー ID プロバイダー (フェデレーション) 用のロールの作成」を参照してください。
-
IAM ユーザー:
-
ユーザーが設定できるロールを作成します。手順については、「IAM ユーザーガイド」の「IAM ユーザー用ロールの作成」を参照してください。
-
(非推奨) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。「IAM ユーザーガイド」の「ユーザー (コンソール) へのアクセス許可の追加」の指示に従います。
-
ステップ 3: S3 バケットのアクセス許可を設定する
すべての S3 バケットとオブジェクトは、デフォルト状態でプライベートに設定されます。バケットを作成したアカウント (リソース所有者) のみが、バケットとそれに含まれるオブジェクトにアクセスできます。ただし、リソース所有者は、アクセスポリシーを記述することで他のリソースおよびユーザーにアクセス権限を付与することができます。
重要
S3 バケットへのエクスポートをより安全にするために、ログデータを S3 バケットにエクスポートできるソースアカウントのリストの指定が必要になりました。
次の例では、aws:SourceAccount
キー内のアカウント ID のリストは、ユーザーがログデータを 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
警告
バケットにアタッチされているポリシーがすでに 1 つ以上ある場合は、そのポリシーに CloudWatch Logs アクセスのステートメントを追加します。バケットにアクセスするユーザーに適したアクセス許可であることを確認するために、アクセス許可の結果セットを評価することをお勧めします。
(オプション) ステップ 4: SSE-KMS で暗号化されたバケットへのエクスポート
このステップは、AWS KMS keys によるサーバー側の暗号化を使用する S3 バケットに対し、エクスポートを行う場合にのみ必要です。この暗号化は 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: エクスポートタスクを作成する
次の コマンドを使用してエクスポートタスクを作成します。作成すると、エクスポートするデータのサイズに応じて、エクスポートタスクに数秒から数時間かかる可能性があります。
AWS CLI を使用してデータを Amazon S3 にエクスポートする
-
ステップ 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 バケットへのデータのエクスポートをサポートしていません。
AWS CLI を使用して S3 バケットを作成するには
コマンドプロンプトで、次の 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 (successor to AWS Single Sign-On) のユーザーとグループ:
アクセス許可セットを作成します。「AWS IAM Identity Center (successor to AWS Single Sign-On) ユーザーガイド」の「シークレットの作成と管理」の手順に従ってください。
-
ID プロバイダーを通じて IAM で管理されているユーザー:
ID フェデレーションのロールを作成する。詳細については、「IAM ユーザーガイド」の「サードパーティー ID プロバイダー (フェデレーション) 用のロールの作成」を参照してください。
-
IAM ユーザー:
-
ユーザーが設定できるロールを作成します。手順については、「IAM ユーザーガイド」の「IAM ユーザー用ロールの作成」を参照してください。
-
(非推奨) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。「IAM ユーザーガイド」の「ユーザー (コンソール) へのアクセス許可の追加」の指示に従います。
-
ステップ 3: S3 バケットのアクセス許可を設定する
すべての S3 バケットとオブジェクトは、デフォルト状態でプライベートに設定されます。バケットを作成したアカウント (リソース所有者) のみが、バケットとそれに含まれるオブジェクトにアクセスできます。ただし、リソース所有者は、アクセスポリシーを記述することで他のリソースおよびユーザーにアクセス権限を付与することができます。
重要
S3 バケットへのエクスポートをより安全にするために、ログデータを S3 バケットにエクスポートできるソースアカウントのリストの指定が必要になりました。
次の例では、aws:SourceAccount
キー内のアカウント ID のリストは、ユーザーがログデータを 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
警告
バケットにアタッチされているポリシーがすでに 1 つ以上ある場合は、そのポリシーに CloudWatch Logs アクセスのステートメントを追加します。バケットにアクセスするユーザーに適したアクセス許可であることを確認するために、アクセス許可の結果セットを評価することをお勧めします。
(オプション) ステップ 4: SSE-KMS で暗号化されたバケットへのエクスポート
このステップは、AWS KMS keys によるサーバー側の暗号化を使用する S3 バケットに対し、エクスポートを行う場合にのみ必要です。この暗号化は 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: エクスポートタスクを作成する
次の コマンドを使用してエクスポートタスクを作成します。作成すると、エクスポートするデータのサイズに応じて、エクスポートタスクに数秒から数時間かかる可能性があります。
AWS CLI を使用してデータを Amazon S3 にエクスポートする
-
ステップ 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
" }