この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
Amazon S3ってバックアップを取る必要があるのかな?、と思っている方もいるはずです。
かく言う私も、Amazon S3のバックアップを取得するという考え方自体、頭にありませんでした。なぜなら、Amazon S3の高耐久性やバージョニング機能があるためかもしれません。
しかし、バケット自体削除してしまった場合はどうでしょうか。
今回の記事では、誤ってAmazon S3のバケットを削除してしまったときに備え、AWS Backupを利用したAmazon S3のバックアップ方法を紹介します。
Amazon S3のバックアップをしてみる
■AWS Backupとは
Amazon S3のバックアップは、AWS Backupを利用して取得されます。
AWS Backupとは、
AWS Backup はフルマネージド型のバックアップサービスであり、AWS のサービス、クラウド内、およびオンプレミス間で簡単に一元化およびデータ保護を自動化できます。(AWS公式ドキュメントより)
2023年4月現在で、以下のAWSリソースのバックアップに使用できます。
- Amazon Elastic Compute Cloud (Amazon EC2)
- Amazon Simple Storage Service (Amazon S3)
- Amazon Elastic Block Store (Amazon EBS)
- Amazon DynamoDB
- Amazon Relational Database Service (Amazon RDS)
- Amazon Aurora
- Amazon Elastic File System (Amazon EFS)
- FSx for Lustre
- FSx for Windows File Server
- NetApp ONTAP 向けAmazon FSx
- Amazon FSx for OpenZFS
- AWS Storage Gateway (ボリュームゲートウェイ)
- Amazon DocumentDB
- Amazon Neptune
- Amazon Redshift
- Amazon Timestream
- VMware™ on AWS
- VMware™ on AWS Outposts
- AWS CloudFormation
さらに詳しく知りたい方はこちらから
■構築の流れ
今回のAWS Backupを利用したAmazon S3のバックアップは以下の流れで作成していきます。
- IAMポリシー作成
↓ - IAMロール作成
↓ - KMS作成
↓ - AWS Backup作成
■IAMポリシー作成
Amazon S3バックアップポリシーとAmazon S3リストアポリシーを作成します。デフォルトロールも用意されていますが、S3に関する許可は記述されていません。
↓AWS IAMのコンソール画面から[ポリシー]→[ポリシーの作成]をクリックします。
↓[JSON]タブをクリックし、以下のドキュメントを貼り付けます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3BucketBackupPermissions",
"Action": [
"s3:GetInventoryConfiguration",
"s3:PutInventoryConfiguration",
"s3:ListBucketVersions",
"s3:ListBucket",
"s3:GetBucketVersioning",
"s3:GetBucketNotification",
"s3:PutBucketNotification",
"s3:GetBucketLocation",
"s3:GetBucketTagging",
"s3:GetBucketAcl"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "S3ObjectBackupPermissions",
"Action": [
"s3:GetObjectAcl",
"s3:GetObject",
"s3:GetObjectVersionTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersion"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*/*"
]
},
{
"Sid": "S3GlobalPermissions",
"Action": [
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": [
"*"
]
},
{
"Sid": "KMSBackupPermissions",
"Action": [
"kms:Decrypt",
"kms:DescribeKey"
],
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringLike": {
"kms:ViaService": "s3.*.amazonaws.com"
}
}
},
{
"Sid": "EventsPermissions",
"Action": [
"events:DescribeRule",
"events:EnableRule",
"events:PutRule",
"events:DeleteRule",
"events:PutTargets",
"events:RemoveTargets",
"events:ListTargetsByRule",
"events:DisableRule"
],
"Effect": "Allow",
"Resource": "arn:aws:events:*:*:rule/AwsBackupManagedRule*"
},
{
"Sid": "EventsMetricsGlobalPermissions",
"Action": [
"cloudwatch:GetMetricData",
"events:ListRules"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
↓貼り付けが完了したら、[次のステップ: タグ]をクリックします。
↓タグは任意で設定し、[次のステップ: 確認]をクリックします。
名前を入力し、内容に問題なければ、[ポリシーの作成]をクリックします。
saitou-backuptest-s3-policy
Amazon S3バックアップポリシー同様に、Amazon S3リストアポリシーを作成します。以下のドキュメントを利用して、IAMポリシーを作成してください。
saitou-restoretest-s3-policy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3BucketRestorePermissions",
"Action": [
"s3:CreateBucket",
"s3:ListBucketVersions",
"s3:ListBucket",
"s3:GetBucketVersioning",
"s3:GetBucketLocation",
"s3:PutBucketVersioning"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "S3ObjectRestorePermissions",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:PutObjectVersionAcl",
"s3:GetObjectVersionAcl",
"s3:GetObjectTagging",
"s3:PutObjectTagging",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:PutObject",
"s3:ListMultipartUploadParts"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*/*"
]
},
{
"Sid": "S3KMSPermissions",
"Action": [
"kms:Decrypt",
"kms:DescribeKey",
"kms:GenerateDataKey"
],
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringLike": {
"kms:ViaService": "s3.*.amazonaws.com"
}
}
}
]
}
IAMポリシー作成は以上です。
■IAMロール作成
AWS Backupがバケットをバックアップする際に利用する、IAMロールを作成します。
↓AWS IAMのコンソール画面から[ロール]→[ロールを作成]をクリックします。
↓以下の設定値を選択します。
項目 | 設定値 |
---|---|
信頼されたエンティティタイプ | AWSのサービス |
他のAWSのサービスのユースケース | AWS Backup |
↓以下の4つのIAMポリシーを追加します。
- AWSBackupServiceRolePolicyForBackup
- AWSBackupServiceRolePolicyForRestores
- saitou-backuptest-s3-policy(任意の名前)
- saitou-restoretest-s3-policy(任意の名前)
↓ロール名を入力し、内容に問題なければ[ロールを作成]をクリックします。
saitou-backuptest-s3-iamrole
↓内容に問題なければ、[ロールを作成]をクリックします。
IAMロール作成は以上です。
■KMS作成
Amazon S3をバックアップするときは、バックアップボールトに関連付けられたKMSによって暗号化されます。バックアップボールトを作成する際にKMSを選択しますので、事前に作成しておきます。
↓Key Management Serviceコンソール画面に行きます。
↓[カスタマー管理型のキー]→[キーの作成]をクリックします。
↓以下の設定値を選択し、[次へ]をクリックします。
項目 | 設定値 |
---|---|
キーのタイプ | 対称 |
キーの使用 | 暗号化および復号化 |
↓以下の設定値を入力し、作成します。
項目 | 設定値 |
---|---|
エイリアス | saitou-backuptest-s3-kms |
説明 | 任意 |
タグ | 任意 |
キー管理者 | IAMユーザー(自身) |
キーの管理者がこのキーを削除できるようにします。 | ☑ |
キーユーザー | IAMユーザー(自身) |
↓
↓
↓内容に問題なければ、[完了]をクリックします。
KMSキー作成は以上です。
■AWS Backup作成
■バックアップボールト作成
AWS Backupを利用するためには、一つ以上のバックアップボールトが必要になります。vaultには"金庫"という意味があるので、バックアップの保管庫的な意味だと思います。
↓AWS Backupコンソール画面に移動し、[バックアップボールト]→[バックアップボールトを作成]をクリックします。
↓
↓
↓設定値は以下の通りです。入力が完了したら、[バックアップボールトを作成]をクリックします。
項目 | 設定値 |
---|---|
バックアップボールト名 | saitou-backuptest-s3-backupvault |
暗号化キー | :作成したKMSを選択 |
タグ | 任意 |
■バックアッププラン作成
バックアッププランではバックアップの頻度や保持期間、などのルールを設定できます。
↓[バックアッププラン]→[バックアッププランを作成]をクリックします。
↓以下の設定値を入力してください。いくつかの設定は要件に合わせて選択しましょう。
項目 | 設定値 |
---|---|
バックアッププランのオプション | 新しいプランを立てる |
バックアッププラン名 | saitou-backuptest-s3-backupplan |
バックアップルール名 | saitou-backuptest-s3-backuprules |
バックアップボールト | saitou-backuptest-s3-backupvault |
バックアップ頻度 | 毎日 |
ポイントインタイムリカバリ(PITR)のために継続的なバックアップを有効化 | ☑ |
バックアップ期間 | バックアップ期間のデフォルトを使用 |
コールドストレージへの移行 | しない |
保持期間 | 日数(4) |
コピー先にコピー | 選択しない |
↓
↓入力が完了したら、[プランを作成]をクリックします。すぐに"リソースの割り当て"作成画面に移ります。
↓[リソース割り当て]作成に関しては、設定値は以下の通りです。
項目 | 設定値 |
---|---|
リソース割り当て名 | saitou-backuptest-s3-resources |
IAMロール | 作成したIAMロール |
リソース選択を定義 | 特定のリソースタイプを含める |
バケット名 | バックアップを取得したいバケット |
特定のリソースタイプを選択 | S3 |
選択したリソースタイプから特定のリソースIDを除外する | 選択しない |
タグを使用して選択を絞り込む | 選択しない |
↓
↓
↓[リソースの割り当て]をクリックします。
構築は以上です。
■動作確認
設定が完了しましたので、バックアップされているか確認しましょう。
バックアップの[頻度]を"毎日"に設定し、[バックアップ期間]を"デフォルト"に設定しましたので、日本時間で14時から始まります。
↓AWS Backupコンソール画面から[ジョブ]→[バックアップジョブ]をクリックします。
↓バックアップを指定したS3バケットと同じリソース名のジョブステータスが"完了"になっています。
↓バックアップしたS3のスナップショットに関しては、[バックアップボールト]→[作成したバックアップボールト]→[復旧ポイント]、
↓
↓もしくは、[保護されたリソース]→[バックアップ指定したS3バケットと同様の名前のリソースID]で確認できます。
↓
動作確認は以上です。
まとめ:AWS Backupを利用して、Amazon S3のバックアップをしてみる
Amazon S3は高耐久であり、バージョニング機能があるため、バックアップをしない場合があるかもしれません。
Amazon S3バケットはバケット自体を削除する際にも、誤って削除してしまわないように、バケットが空の状態でないと削除できません。しかし、なにが起こるかわかりませんので、Amazon S3のバックアップを検討してみてください。
"復元"に関しては、後日投稿させていただきます。
参考リンク:AWS公式ドキュメント
↓ほかの協栄情報メンバーもAWS Backupに関する記事を公開しています。ぜひ参考にしてみてください。
■AWS Backup で EC2のバックアップを実際に取得してみた。(kudou.m)
https://cloud5.jp/aws-backup-forec2/
■AWS Backup構築ハンズオン(INAMURA)
https://cloud5.jp/aws-backup/