[アップデート] Amazon EFS でアカウント間のレプリケーションができるようになりました
こんにちは、AWS事業本部 コンサルティング部の荒平(@0Air)です。
Amazon EFS がクロスアカウントレプリケーションをサポートしました!
これにより、EFS単体でファイルデータの複製を別アカウントの任意のリージョンへ行うことができるようになり、コンプライアンス要件やセキュリティ分離を容易に満たせるようになります。災害復旧 (DR) 戦略にも有効とドキュメントでは紹介されています。
このアップデートは、EFSが利用可能なすべてのAWSリージョンで利用でき、新規ファイルシステムだけでなく既存のファイルシステムでも利用可能です。
やってみる
大まかな流れは以下の通りです。ここではソース(複製元)アカウントをアカウントA、デスティネーション(宛先)アカウントをアカウントBとします。
- アカウントA・B、それぞれにEFSを作成し、ファイルシステムのARNを確認
- クロスアカウントレプリケーション用のIAMロールを作成
- ファイルシステムのポリシーを追加する
- アカウントBのファイルシステムの上書き保護を無効にする
- クロスアカウントレプリケーションを構成
1. 各アカウントにEFSの準備
特殊なことはしないため作成画面は割愛しますが、各アカウントにファイルシステムを作成します。
ここでアカウントA(複製元)のファイルシステムは新規か既存を問いません。アカウントB(宛先)に作成するファイルシステムは、アカウントAのファイルシステムの内容が複製されるため、新規作成が望ましいでしょう。
ここでアカウントAとBのファイルシステムのARNをそれぞれ控えます。IDやDNS名ではないため注意。
2. クロスアカウントレプリケーション用のIAMロール作成
まず、IAMロールにアタッチするためのポリシーを作成します。検証ではポリシー名をcross-account-efs-replication-policy
としました。
サンプルのJSONです。
ファイルシステムは2箇所書き換えが必要で、前者がアカウントB(宛先)、後者がアカウントA(複製元)になります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticfilesystem:DescribeFileSystems",
"elasticfilesystem:CreateReplicationConfiguration",
"elasticfilesystem:DescribeReplicationConfigurations",
"elasticfilesystem:DeleteReplicationConfiguration",
"elasticfilesystem:ReplicationWrite"
],
"Resource": "arn:aws:elasticfilesystem:ap-northeast-1:000000000000:file-system/fs-08xxxxxxxxxxxxxxx"
},
{
"Effect": "Allow",
"Action": [
"elasticfilesystem:ReplicationRead",
"elasticfilesystem:DescribeFileSystems"
],
"Resource": "arn:aws:elasticfilesystem:ap-northeast-1:000000000000:file-system/fs-00xxxxxxxxxxxxxxx"
}
]
}
IAMロールを作成します。カスタム信頼ポリシーから、以下のように記載します。
JSONはこちらです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "elasticfilesystem.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
先ほど作成したIAMロールを紐づけて、保存します。
作成したIAMロールのARNをコピーしておきます。
3. ファイルシステムにポリシーを追加
アカウント間でレプリケーションの設定・削除をする権限を与えておく必要があります。
まず、アカウントA(複製元)EFSのファイルシステムポリシーを変更します。
ファイルシステムポリシータブから、「編集」をクリックし、次のJSONを貼り付けます。
AWSのアカウントIDはアカウントB(宛先)を指定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Permission to delete the replication by the destination account",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::0000000000000:root"
},
"Action": "elasticfilesystem:DeleteReplicationConfiguration",
"Resource": "*"
}
]
}
次に、アカウントB(宛先)EFSのファイルシステムポリシーを変更します。
AWSのアカウントIDはアカウントA(複製元)を指定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Permissions for source account calls",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::0000000000000:root"
},
"Action": [
"elasticfilesystem:DescribeFileSystems",
"elasticfilesystem:CreateReplicationConfiguration",
"elasticfilesystem:DescribeReplicationConfigurations",
"elasticfilesystem:DeleteReplicationConfiguration",
"elasticfilesystem:ReplicationWrite"
]
}
]
}
4. ファイルシステムの上書き保護を無効化
次に、アカウントB(宛先)EFSの上書き保護を解除します。この設定はデフォルトで保護が有効になっています。
「編集」ボタンから、設定を開きます。
レプリケーションの上書き保護を無効にし、変更を保存します。
レプリケーションの上書き保護が無効化されました。
あまりないとは思いますが、もしレプリケーションを停止して上書きされたくない場合はこの設定を思い出しましょう。
5. クロスアカウントレプリケーションを構成
アカウントA(複製元)EFSにレプリケーションの設定をします。
「既存のファイルシステムにレプリケート」を選択し、アカウントB(宛先)EFSのARN、手順2で作ったIAMロールのARNを入力します。
「レプリケーションを作成」をクリックし、数分待つとファイルシステム間でデータが複製されます。
無事に同期が完了し、テストファイルが確認できました。
ちなみに、アカウントB(宛先)EFSは読み取り専用という表記が出現し、書き込みはできなくなります。
おわりに
EFSのクロスアカウントレプリケーションを試してみました。
手順は多いように見えますが、すぐに設定できてお手軽でした。
社内共有用のアプリケーションやマスターイメージなど、大容量の同じデータを組織中に重複して持つのは課金が勿体ないため、「貸出用のアカウントにもEFSを共有したいけど、書き込まれたくない・・・!」といったシーンで、お手軽なセキュリティ強化やコスト最適化に繋がりそうです。
このエントリが誰かの助けになれば幸いです。
それでは、AWS事業本部 コンサルティング部の荒平(@0Air)がお送りしました!