この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
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 <ロール名>