今回は、AWS BackupのAWS Organizations連携機能について紹介します。AWS Backupはサポート対象のさまざまなAWSリソース(EC2やRDSなど)に対して一元的にバックアップを実施し、データを保護できるサービスです。AWSのサービスごとではなく、一元的に設定を行えるため、バックアップ管理を効率化できます。
Organizationsと連携することで、以下が可能になります。
- Organizations配下のAWSアカウントでのAWS Backupの実行状況を確認可能なクロスアカウントモニタリング
- バックアップスケジュールや保持期間、対象となるAWSリソースなどを定義したバックアップポリシーを複数のAWSアカウントに適用
またあまり有名ではありませんが、AWS Backup Audit Managerと呼ばれる機能もOrganizationsと連携することが可能です。AWS Backup Audit Managerは、AWS Backupによるバックアップ状況を監視し、フレームワークに基づき評価する機能です。Organizationsと連携することで、Organizations配下のアカウントのAWS Backupのフレームワークへの準拠状況をまとめたレポート作成が可能になります。AWS BackupもAWS Backup Audit Managerも委任管理者をサポートしており、以下の構成をとることが推奨されます。
※上図ではAWS BackupとAWS Backup Audit Managerの委任管理者アカウントが別になっているように見えますが、同一アカウントを両方の委任管理者とすることが一般的です。
本稿では、AWS BackupおよびAWS Backup Audit ManagerのOrganizations連携機能の具体的な利用方法を詳しく紹介していきます。
AWS BackupのOrganizations連携機能の利用方法
初めに、AWS BackupのOrganizations連携機能の利用方法について説明します。これまで紹介してきた機能と同じく、委任管理者として別のアカウントを指定することがベストプラクティスとされているため、まずは管理アカウントにて委任管理者の設定を行います。
管理アカウントで委任管理者を設定
(1)Organizationsの画面へ遷移します。
(2)サイドメニューから「サービス」をクリックします。
(3)AWS Backupを見つけ、クリックします。
委任ポリシーを指定
これまで紹介してきたAWSサービスの場合は管理アカウントでの操作は、上述の作業だけで完了となることが多かったですが、AWS Backupの場合はさらに委任ポリシーの指定を行う必要があります。この設定を行わないと、委任管理者アカウントでバックアップポリシーの作成ができなくなってしまうためです。以下が具体的な手順です。
(1)Organizationsの画面へ遷移します。
(2)サイドメニューの「設定」をクリックし、AWS Organizationsの委任された管理者内の「委任」ボタンをクリックします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBackupPolicyOperation",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:::root"
},
"Action": [
"organizations:ListPoliciesForTarget",
"organizations:ListTargetsForPolicy",
"organizations:ListPolicies",
"organizations:DescribeEffectivePolicy",
"organizations:UpdatePolicy",
"organizations:DeletePolicy",
"organizations:DetachPolicy",
"organizations:AttachPolicy",
"organizations:CreatePolicy",
"organizations:DescribePolicy",
"organizations:DisablePolicyType",
"organizations:EnablePolicyType"
],
"Resource": [
"*"
],
"Condition": {
"StringLikeIfExists": {
"organizations:PolicyType": "BACKUP_POLICY"
}
}
},
{
"Sid": "AllowListForBackupPolicyOperation",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:::root"
},
"Action": [
"organizations:ListRoots",
"organizations:ListTagsForResource",
"organizations:DescribeAccount",
"organizations:ListAWSServiceAccessForOrganization",
"organizations:ListChildren",
"organizations:ListAccountsForParent",
"organizations:ListHandshakesForAccount",
"organizations:ListHandshakesForOrganization",
"organizations:ListAccounts",
"organizations:DescribeOrganization",
"organizations:DescribeOrganizationalUnit",
"organizations:ListParents",
"organizations:ListOrganizationalUnitsForParent"
],
"Resource": [
"*"
]
}
]
}
上記のポリシーについて、補足します。まず、SID:AllowBackupPolicyOperationのブロックでは、バックアップポリシーに関してのみ参照や作成、変更などを許可する処理となっています。これにより、その他のポリシー(例えば、サービスコントロールポリシーやリソースコントロールポリシー)の操作権限は付与せず、バックアップポリシーに限定して委任することが可能です。
続いて、SID:AllowListForBackupPolicyOperationのブロックでは、バックアップポリシーをOUやAWSアカウントに設定する際に必要な参照系の権限を付与しています。これらのアクションはorganizations:PolicyTypeキーによる制御が不可であるため、別に切り出しています。
(4)「ポリシーを作成」ボタンをクリックします。
(5)正常にポリシーが作成されたことを確認します。
これで管理アカウントでの作業は完了です。続いて、委任管理者アカウントによる作業について説明します。
委任管理者アカウントの作業
委任管理者アカウントでバックアップポリシーを作成する前に、バックアップポリシーの構成要素について説明します。下図の通り、バックアップポリシーには複数の構成要素があります。
その中でも、バックアップデータの保管先であるバックアックボールトおよびバックアップ用IAMロールに関しては、事前にメンバーアカウントに存在することが前提となっています。そのため、これら2つのリソースに関しては、別途メンバーアカウントに作成するために仕組みが必要です。
本稿では、これら2つのリソースをCloudFormation StackSetsを利用して、メンバーアカウントに作成する手順を紹介します。前提として、今回バックアップポリシーを作成する委任管理者アカウントが、すでにCloudFormation StackSetsの委任管理者アカウントとしても指定されているとします。詳細な手順は公式ドキュメントの手順を参照ください。
CloudFormation StackSetsを作成
(1)CloudFormationの画面に移動します。
(2)サイドメニューから「StackSets」をクリックし、続いて「サービスマネージド」タブをクリックし、「StackSetを作成」ボタンをクリックします
(3)「テンプレートファイルのアップロード」を選択し、下記のCloudFormationテンプレートファイルをアップロードします。そして「次へ」ボタンをクリックします。
AWSTemplateFormatVersion: "2010-09-09"
Description: Creates an AWS Backup Vault and IAM Role for AWS Backup execution with managed policies.
Parameters:
BackupVaultName:
Type: String
Description: Name of the Backup Vault.
Default: OrgBackupVault
BackupIAMRoleName:
Type: String
Description: Name of the IAM Role for Backup Service.
Default: OrgBackupRole
Resources:
# Backup Vault
BackupVault:
Type: AWS::Backup::BackupVault
Properties:
BackupVaultName: !Sub "${BackupVaultName}"
# IAM Role for AWS Backup
BackupRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub "${BackupIAMRoleName}"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service:
- backup.amazonaws.com
Action: sts:AssumeRole
Path: "/"
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup
- arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForRestores
CloudFormationテンプレートでバックアップボールトとIAMロールを作成
CloudFormationテンプレートでは、バックアップボールトとバックアップ用IAMロールを作ります。IAMロールに付与する権限はAWS Backup用に用意されているAWSマネージドポリシーを指定しています。
(1)StackSets名、パラーメータを入力し、「次へ」ボタンをクリックします。ここで指定したバックアップ用IAMロール名およびバックアップボールト名はバックアップポリシー作成時に必要となるため、控えておくようにしてください。
(2)「AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認します。」にチェックを入れ、「次へ」ボタンをクリックします。
(3)「組織単位 (OU) へのデプロイ」を選択し、バックアップポリシーを適用するOUのIDを入力します。OUのIDは前の手順で実施した管理アカウントでの委任ポリシーの設定により、Organizationsから確認できるようになっていると思います。
(4)対象となるリージョンを指定(画像では東京リージョンのみ)し、その他はデフォルト値のままで、「次へ」ボタンをクリックします。もし多数のメンバーアカウントもしくは多数のリージョンへデプロイするのであれば、同時アカウントの最大数やリージョンの同時実行の値を調整してください。
(5)内容を確認して、「送信」ボタンをクリックします。
(6)「スタックインスタンス」タブでデプロイ対象のAWSアカウントに対して処理が成功していることを確認します。
バックアップポリシーを作成
これでバックアップポリシーを作成する前提が整いましたので、次はバックアップポリシーを作成します。
(1)AWS Backupの画面に移動し、サイドメニューから「バックアップポリシー」を選択し、「バックアップポリシーを作成」ボタンをクリックします。
(2)ポリシー名等を入力し、リージョンを指定します。今回は東京リージョンを指定しました。
(3)バックアップルール名を入力し、バックアップボールトとして、StackSetsの実行時に入力したバックアップボールト名を入力します。バックアップ頻度に関しては、今回はデフォルト値のままとしました。必要に応じて変更してください。またコールドストレージへの移行もせずに、保持期間も1日としています。これは要件に応じて適宜変更してください。さらにディザスタリカバリーなどの用途として別リージョンへのコピーも可能ですが、今回は無効のままとします。この状態で「ルールを追加」ボタンをクリックします。
(4)リソース割り当て名を入力し、IAMロールとして、StackSetsの実行時に入力したバックアップ用IAMロール名を入力します。バックアップ対象となるAWSリソースを限定することも可能ですが、今回は特定のタグを付与されたAWSリソースをバックアップ対象とする設定とします。リソースタグキー「org-backup-daily」、タグ値「true」が付与されているAWSリソースをバックアップ対象とします。この状態で「割り当てを追加」ボタンをクリックします。
(5)最後に「ポリシーを作成」ボタンをクリックします。
(6)正常にポリシーが作成されたことを確認の上、「アタッチ」ボタンをクリックします。
(7)ポリシーをアタッチするOUを選択し、「アタッチ」ボタンをクリックします。
(8)ターゲットに追加されたことを確認します。
AWS BackupのOrganizations連携機能の動作確認
上記で設定は完了です。それでは実際の動作について確認していきましょう。これまでの設定で、リソースタグキー「org-backup-daily」、タグ値「true」が付与されているAWSリソースをバックアップ対象としましたので、今回はEC2インスタンスに該当タグを付与します。
バックアップポリシーを付与したOU内の複数のAWSアカウントで同様にタグを付与します。
この状態でバックアップポリシーで指定したバックアップ時間の経過を待ちます。なおAWS Backupでは厳密にバックアップ時間を指定することはできませんので、ご注意ください。
(1)委任管理者アカウントでのBackupの画面のサイドメニューから「クロスアカウントモニタリング」をクリックすると、バックアップポリシーを付与した複数のAWSアカウント内でのバックアップ状況が確認できると思います。
バックアップポリシーによる特定のルールに基づくバックアップをOrganizations配下の複数のAWSアカウントに設定ができ、その結果を一元的に把握できることを確認できました。
AWS Backup Audit ManagerのOrganizations連携機能の利用方法
続いて、AWS Backup Audit ManagerのOrganizations連携機能について説明します。その前にAWS Backup Audit Managerでできることを改めて説明します。AWS Backupフレームワークと呼ばれるバックアップに関するベストプラクティスの設定を満たしているかをチェックすることが可能です。
本稿執筆時点では11種類のコントロールでチェックが可能であり、具体的には、AWSリソースが必ずバックアップを取得する設定となっているか、バックアップの最小頻度を満たしているかなどのコントロールがあります。これにより、バックアップが特定のルールを満たして設定されているかの確認が可能となります。Organizations連携をすることで、Organizations配下の複数のAWSアカウントのバックアップ設定を評価したレポートを出力できます。
注意点が2点あります。1つはAWS Backup Audit ManagerはAWS Configが有効化されていることが前提であるということです。Organizations連携機能を使う際には、第3回を参考にして、CloudFormation StackSets等を利用し、AWS Configの有効化を行うようにしてください。
もう1つは、Organizationsで定義したバックアップポリシーによるバックアップだけではなく、各メンバーアカウントで個別に設定したバックアップもレポート対象になることです。想定より広い範囲でのレポートとなるかもしれないことは事前に把握しておいてください。
委任管理者アカウントの作業
それでは実際に設定をしていきましょう。前述の通り、事前にAWS Configの有効化は完了している前提で作業を進めます。
(1)委任管理者アカウントでBackupの画面へ移動し、サイドメニューから「フレームワーク」をクリックします。リソース追跡がオンになっていることを確認し、「フレームワークを作成」ボタンをクリックします。
(2)フレームワーク名、フレームワークの説明を入力します。「コントロールを編集」ボタンをクリックすることで、各コントロールでのパラメーターを指定できます。
(3)今回はデフォルト値のままとし、「フレームワークを作成」ボタンをクリックします。
(4)正常にフレームワークの作成が開始されたことを確認します。
(5)ステータスが完了となることを確認します。筆者の環境では15分ほど待つと、完了ステータスになりました。
(6)「詳細なコンプライアンス情報」をクリックすると、委任管理者アカウント内での準拠していないリソース数などを確認できます(メンバーアカウントの情報は確認できません) 。
(7)リソース名のリンクをクリックすると、委任管理者カウントのAWS Config Ruleのページへ遷移し、具体的な非準拠となったAWSリソースを確認できます。
上記のバックアップフレームワークの作成手順をメンバーアカウントでも実施します。数が多くなければ、手作業で実施してもよいでしょう。CloudFormationによって実施することも可能ですが、本稿執筆時点で、公式ドキュメントのサンプルテンプレートには「リソースは論理エアギャップボールト内にあります」というコントロールのデプロイが含まれていないように見えます。したがって、同一のコントロールでチェックをしたい場合は、上記の手順を手動で実施したほうがよいと思います。
メンバーアカウントでのバックアップフレームワークの作成が完了したら、以下の作業を行います。
(1)サイドメニューから「レポート」をクリックし、「レポートプランを作成」ボタンをクリックします。
(2)レポートテンプレートからコントロールコンプライアンスレポートもしくはリソースコンプライアンスレポートを選択します。コントロールコンプライアンスレポートは、バックアップフレームワークのコントロール単位のレポートで、各コントロールの非準拠数などの大雑把な情報を確認でき、リソースコンプライアンスレポートは各コントロールで非準拠となっているAWSリソースを詳細に確認できます。今回はリソースコンプライアンスレポートを選択します。
(3)レポート名を入力し、アカウントで「組織内の1つ以上のアカウント」を選択します。
(4)「OUとアカウントの追加」ボタンをクリックし、バックアップレポートの出力対象となるAWSアカウントが所属するOUを指定します。また対象となるリージョンも指定します。今回は東京リージョンのみとしています。
(5)レポート配信先となるS3バケットを指定し、「レポートプランを作成」ボタンをクリックします。
(6)レポートプランの作成が完了したことを確認し、S3バケットのアクセス許可に表示されているバケットポリシーを出力先に指定したS3バケットに付与します。
(7)レポートは24時間ごとに出力されますが、今回はすぐに確認したいため、「オンデマンドレポートを作成」ボタンをクリックします。
(8)レポートが完成するまで待機します。筆者の環境では数十秒の待ち時間でした。完成するとレポートリンクが表示されますので、クリックします。
(9)ダウンロードすると、コントロールで非準拠となっている複数のAWSアカウントのAWSリソースが一覧で表示されていることを確認できます。
課題となりやすいポイント
それでは、最後に課題となりやすいポイントについて説明します。
すでに前述の手順でも触れていますが、AWS BackupでOrganizations連携機能を利用するにあたっては、事前にバックアップボールトおよびバックアップ用IAMロールがメンバーアカウントに存在している必要があります。したがって、CloudFormation Stacksets等のメンバーアカウントへのデプロイ方式も事前に検討しておく必要があります。また、今回の手順では触れていませんが、セキュリティレベル向上のため、本番環境ではバックアップボールトに暗号化も検討することをおすすめします。
こちらも前述の手順で触れている内容ですが、AWS Backup Audit ManagerはConfigの有効化が必要となります。同じくCloudFormation Stacksets等の利用を検討ください。
まとめ
今回は、AWS BackupおよびAWS Backup Audit ManagerのOrganizations連携ステップと課題となりやすいポイントを詳しく紹介しました。本稿がOrganizations配下のAWSアカウントの運用管理のお役に立てば幸いです。