😸
【TIPS】DataSyncのロギング機能はリソースベースポリシーの考慮が必要
1. はじめに
こんにちわ、Mitsuoです。
DataSyncはCloudWatch Logsと統合されており、転送処理のログをCloudWatch Logsに保管する事が出来ます。
「CloudWatch Logsあるある」と勝手に称してますが、DataSyncに関してもCloudWatch Logsにおけるリソースベースポリシーの考慮が必要です。
きめ細かく言うと、コンソールでタスクを作成した時はリソースベースポリシーが自動的に作成されますが、CLIやcloudformationを用いた時は明示的にリソースベースポリシーを定義する必要があります。
公式ドキュメントでも記載がありました。
CloudWatch ロググループに DataSync タスクログが見つからないのはなぜですか?
2. 実際に再現してみる
- 以下のコマンドを実行し、DataSync用のリソースベースポリシーが存在しない事を確認します。
aws logs describe-resource-policies --region ap-northeast-1 | grep datasync
- 次にDataSync用のテンプレートを用いてスタックを作成します。
テンプレートは別記事の【CloudFormation】DataSyncリソースをデプロイしてみたを参考ください。
- スタック作成後、DataSyncのタスクを開始するとすぐにエラーが発生します。
- そのため、実行ログが出力されていません。
- 上記の問題を解決するために以下のコマンドを実行しファイルを作成します。
リソースベースポリシーはCLIでjsonファイルを読み込ませる事が出来ます。
cat <<EOF > ./trustDataSync.json
{
"Statement": [
{
"Sid": "DataSyncLogsToCloudWatchLogs",
"Effect": "Allow",
"Action": [
"logs:PutLogEvents",
"logs:CreateLogStream"
],
"Principal": {
"Service": "datasync.amazonaws.com"
},
"Resource": "*"
}
],
"Version": "2012-10-17"
}
EOF
- 作成したjsonファイルを用いてリソースベースポリシーをCloudWatch Logsに付与するため、次のコマンドを実行します。
aws logs put-resource-policy --policy-name trustDataSync --policy-document file://trustDataSync.json --region ap-northeast-1
- コマンド実行後、問題が無ければ以下の様な出力結果が表示されます。
{
"resourcePolicy": {
"policyName": "trustDataSync",
"policyDocument": "{\n \"Statement\": [\n {\n \"Sid\": \"DataSyncLogsToCloudWatchLogs\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"logs:PutLogEvents\",\n \"logs:CreateLogStream\"\n ],\n \"Principal\": {\n \"Service\": \"datasync.amazonaws.com\"\n },\n \"Resource\": \"*\"\n }\n ],\n \"Version\": \"2012-10-17\"\n}\n",
"lastUpdatedTime": 1660363911051
}
}
- 上記の設定後、DataSyncタスクを実行すると、処理が開始されます。
- タスクの完了後、CloudWatch Logsに実行ログが出力されている事を確認出来ます。
3. まとめ
権限不足の際は、エラー内容が明示されるので比較的詰まりにくい箇所かと思いますが、コンソール利用しない場合は、注意が必要なポイントです。
他のAWSサービスと同様、CloudWatch Logsに連携する際は、リソースベースポリシーが付与されているか、必要かどうかを意識しておくと良いかと思います。
「検証時は手動でやったけど、別環境ではテンプレートを使うわー」のようなケースだと起こり得そうな事象ですので、ご注意ください。
このブログが誰かの役に立てば嬉しいです!みなさま良きお休みを。Mitsuoでした!
4. 参考資料
【CloudFormation】DataSyncリソースをデプロイしてみた
CloudWatch ロググループに DataSync タスクログが見つからないのはなぜですか?
Discussion