この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
どーもsutoです。
以前投稿したブログでAWS Backup設定をCloudformation(CFn)で作ったのですが、これを利用してとある新規AWSアカウントで使用した結果、バックアップが動作しなかったためトラシューした内容を残しておきます。
結論としては”リソースの割り当てに付与するIAMロールが存在してなかった”という正直初歩的なことだったのですが、エラーログに現れない事象だったのでブログに書いておこうと思いました。
事象
CFnスタックでは”CREATE_COMPLETE”且つAWS Backupの各リソースも問題なく正常に作成されたのですが、なぜかバックアップジョブが動いていませんでした。
作成したテンプレートは自分のAWSアカウントで検証して正常に動いていたのですが、AWSアカウントを新規作成されたお客様の環境でバックアップジョブが開始されずCloudTrailにもログがまったく吐き出されていませんでした。
ジョブ関連のエラーがない上そもそもジョブの開始すらないのならば
- リソースの割り当て設定で対象リソースの該当がない(タグ付の値が間違っている)
- バックアッププランの設定内容に誤りがある(時刻設定など)
- リソースの割り当て設定にてアタッチしたIAMロールに何かしら問題がある
となる。上2つは自分のアカウントでは正常動作する理由が説明できないので、IAMロールに当たりをつけて一覧を覗いて見ると
あ〜存在しないRoleアタッチしていたらそりゃ動作しませんよね。それにしてもこのような場合CloudTrail側に権限に関するエラーが出たりするのかなと思っていましたが何もログは出ないんですね。またCFnのスタック実行時のイベントでもエラーでロールバックされないという。
自分のAWSアカウントでは検証などでいろいろやっていたので気づかなかったです。またAWS Backupのコンソール画面で手動作成した場合は出会うことのない事象ですね。(リソースの割り当てを設定する際にデフォルトIAMロールを自動で作ってくれますから)
解決策
あまりロールを作られていないまっさらなAWS環境で利用することも多いので、以下にIAMロールもまとめて新規作成するテンプレートに修正しました。
AWSTemplateFormatVersion: '2010-09-09'
Description: AWS Backup Setting
Parameters:
MyBackupName:
Description: Backup plan name
Type: String
Default: ''
Cron:
Description: type the cron.
Type: String
Default: cron(0 19 * * ? *)
TagKey:
Description: TagKey for backup
Type: String
Default: ''
TagValue:
Description: TagValue for backup
Type: String
Default: ''
Resources:
BackupVault:
Type: "AWS::Backup::BackupVault"
Properties:
BackupVaultName: !Sub ${MyBackupName}-vault
BackupPlan:
Type: AWS::Backup::BackupPlan
Properties:
BackupPlan:
BackupPlanName: !Ref MyBackupName
BackupPlanRule:
- RuleName: !Sub ${MyBackupName}-rule
TargetBackupVault: !Ref BackupVault
ScheduleExpression: !Ref Cron
CompletionWindowMinutes: 720
StartWindowMinutes: 60
Lifecycle:
DeleteAfterDays: 14
BackupSelection:
Type: AWS::Backup::BackupSelection
Properties:
BackupPlanId: !Ref BackupPlan
BackupSelection:
SelectionName: !Ref MyBackupName
IamRoleArn: !GetAtt BackupIAMrole.Arn
ListOfTags:
- ConditionType: "STRINGEQUALS"
ConditionKey: !Ref TagKey
ConditionValue: !Ref TagValue
BackupIAMrole:
Type: AWS::IAM::Role
Properties:
RoleName: AWSBackupDefaultServiceRole
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action: sts:AssumeRole
Principal:
Service: backup.amazonaws.com
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup
- arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForRestores
Path: "/service-role/"
まとめ
自作のAWS Backup設定を自動構築するCFnテンプレートのトラシューでした。存在しないIAMロールを指定してもスタック作成時にエラーは出ず、構築後のジョブが動かないにもかかわらずCloudTrailにもログが記録されなかったので小一時間ほど悩みました。
1つ1つ、作成リソースと関連リソースを調べて行った結果発見できたのでとりあえず謎のまま放置せずに済んで安心しました。今思えば正直くだらないミスですが、気付きにくそうなものだなと感じたためここに残しておこうと思います。