IP 制限をかけているバケットに対して AWS Backup で復元ポイントを作成する方法について
困っていた内容
S3 のバケットポリシーで IP 制限をかけると、AWS Backup のジョブが失敗する。 どのようなポリシーにすればいいでしょうか。
どう対応すればいいの?
この場合、"aws:ViaAWSService": "false" を使えばいいように見えますが、AWS Backup からのアクセスはサービスロールからのアクセスになるようです。
そのため以下ドキュメントの通り、値は "false" を返し、これでは避けることができません。
AWS グローバル条件コンテキストキー - AWS Identity and Access Management
サービスが IAM プリンシパルの認証情報を使用し、プリンシパルに代わってリクエストを実行すると、リクエストコンテキストキーは true を返します。
サービスがサービスロールまたはサービスリンクロールを使用してプリンシパルに代わって呼び出しを行う場合、コンテキストキーは false を返します。
リクエストコンテキストキーは、プリンシパルが直接呼び出しを行ったときも false を返します。
この場合、AWSBackup に使用するサービスロールである「AWSBackupDefaultServiceRole」以外のアクセスを制限することで、
特定 IP アドレス以外からのアクセス制限をかけつつ AWSBackup を利用することができます。
実際に適用するバケットポリシーの例は以下の様な形になります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::バケット名", "arn:aws:s3:::バケット名/*" ], "Condition": { "StringNotLike": { "aws:userid": "IAM ロール ID:*" }, "NotIpAddress": { "aws:SourceIp": [ "xxx.xxx.xxx.xxx/32", "xxx.xxx.xxx.xxx/32", "xxx.xxx.xxx.xxx/32" ] } } } ] }
この際は対象のロールを IAM ロール ID で指定しますが、こちらはマネジメントコンソールから確認することができません。
そのため、AWSCLI のコマンド等で確認してください。
例) $ aws iam get-role --role-name <ロール名>