AWS S3のBackup環境構築

0

詳細

はじめまして。 私は現在、以下の要件をすべて満たす、S3環境を構築しています。

  1. 特定のIPアドレスからしか、アクセスできない
  2. 特定のIAMユーザからしか、アクセスできない 上記を満たすS3環境は構築できました。

しかし、AWS Backupサービスを用いて、定期的にBackupを取得する環境が構築できません。 具体的には、バックアッププランにおいてリソースを割り当てる際に、作成したbucketが表示されません。 解決するにあたって試みたことは以下の通りです。

  1. IAMポリシーの確認
  2. Bucketポリシーの確認
  3. リージョンが一致しているかの確認 ※各ポリシーについては、文末に記載します。

理想の状態

「特定のIPアドレスからしか、アクセスできない」 かつ 「特定のIAMユーザからしか、アクセスできない」 を満たし、更に、AWS Backupで定期的にBackupを取得するようにする。

IAMポリシー

「AmazonS3FullAccess」「AWSBackupFullAccess」を割り当てました。 また、以下の.jsonを追加でアタッチしています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::{bucket_name}",
                "arn:aws:s3:::{bucket_name}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "backup:*"
            ],
            "Resource": "*"
        }
    ]
}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::{bucket_name}t",
                "arn:aws:s3:::{bucket_name}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "backup:*"
            ],
            "Resource": "*"
        }
    ]
}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutBucketAcl",
                "s3:GetBucketLocation",
                "s3:GetBucketVersioning"
            ],
            "Resource": [
                "arn:aws:s3:::{bucket_name}",
                "arn:aws:s3:::{bucket_name}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject",
                "s3:GetBucketVersioning"
            ],
            "Resource": [
                "arn:aws:s3:::{bucket_name}",
                "arn:aws:s3:::{bucket_name}/*"
            ]
        }
    ]
}

Bucketポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::{bucket_name}",
                "arn:aws:s3:::{bucket_name}/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "aws:username": "{created_iam_user_name}"
                }
            }
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::{bucket_name}",
                "arn:aws:s3:::{bucket_name}/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:VpcSourceIp": [
                        "124.215.101.111/32",
                        "60.112.161.29/32"
                    ]
                }
            }
        }
    ]
}

===============================

In English:

Details

I am currently building an S3 environment that meets all of the following requirements.

  1. Access is only possible from a specific IP address
  2. Access is only possible from a specific IAM user I have built an S3 environment that meets the above requirements.

However, I am unable to build an environment that uses the AWS Backup service to periodically obtain backups. Specifically, when allocating resources in a backup plan, the bucket I created is not displayed. The following are the steps I have tried to resolve the issue.

  1. Check the IAM policy
  2. Check the bucket policy
  3. Check that the region matches *Please check each policies that written above " in English ".

Ideal state

Meet the requirements of "access is only possible from a specific IP address" and "access is only possible from a specific IAM user" and also use AWS Backup to periodically obtain backups.

I am sorry my bad english. Thanks.

質問済み 1年前412ビュー
2回答
1
承認された回答

時間が無くて実際には試せていないのですが、S3バケットポリシーにAWS BackupのIAMロールを許可するように設定してみてはいかがでしょうか?
具体的には以下のように「StringNotEquals」でIAMのARNを指定するような形です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::{bucket_name}",
                "arn:aws:s3:::{bucket_name}/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "aws:PrincipalArn": [
                        "AWS BackupのIAMロールのARN",
                        "IAMユーザーのARN"
                    ]
                }
            }
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::{bucket_name}",
                "arn:aws:s3:::{bucket_name}/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:VpcSourceIp": [
                        "124.215.101.111/32",
                        "60.112.161.29/32"
                    ]
                }
            }
        }
    ]
}
profile picture
エキスパート
回答済み 1年前
  • ありがとうございます。 質問よろしいでしょうか? 「AWS BackupのIAMロールのARN」というのは、AWS Backupのプランを作成しているユーザのARNという解釈でよろしいでしょうか?

  • いえ、AWS Backupのサービスロールです。 コンソールから作成すると「AWSBackupDefaultServiceRole」みたいなものが作成されていると思います。 このIAMロールがAWS Backupに紐づいていると思いますので、ARNを許可するような形です。 https://docs.aws.amazon.com/ja_jp/aws-backup/latest/devguide/iam-service-roles.html

  • S3バケットの選択自体はIAMユーザーが行っていると思うので、バックアッププランを作成しているIAMユーザーのARNも許可する必要があるかもしれません。

  • 私の環境で上記のバケットポリシー使ってみましたがダメそうでした(S3バケットが選択できませんでした) IP制限側のポリシーを削除して試すと成功したので、おそらくIP制限を付けているとダメみたいです。

1

最終的には以下のバケットポリシーでS3を選択できるようになりました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::{bucket_name}",
                "arn:aws:s3:::{bucket_name}/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "aws:PrincipalArn": [
                        "AWS BackupのIAMロールのARN",
                        "IAMユーザーのARN"
                    ]
                }
            }
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::{bucket_name}",
                "arn:aws:s3:::{bucket_name}/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": "AIDxxxxxxxxxxxxxxxxx"
                },
                "NotIpAddress": {
                    "aws:VpcSourceIp": [
                        "124.215.101.111/32",
                        "60.112.161.29/32"
                    ]
                }
            }
        }
    ]
}

「aws:userId」は以下のコマンドで確認できます。
以下のコマンドを実行する際はバックアッププランを設定するIAMユーザーで実行してください。

aws sts get-caller-identity

コマンドを実行すると以下のような結果が返ってきます。
この中の「UserId」をバケットポリシーに設定してください。

{
    "UserId": "AIDxxxxxxxxxxxxxxxxx",
    "Account": "1111111111111",
    "Arn": "arn:aws:iam::1111111111111:user/test"
}
profile picture
エキスパート
回答済み 1年前
  • ちなみに以下のブログで紹介されていますが、AWS BackupのサービスロールのUserIdも設定しないとバックアップの取得時にエラーになるようです。 https://dev.classmethod.jp/articles/tsnote-s3-bucketpolicy-ip-address-aws-backup-failed-001/

  • ありがとうございます 確認します

  • ちなみにパブリックIPでアクセス制御するのであれば以下のようにする必要があります。

                    "NotIpAddress": {
                        "aws:SourceIp": [
                            "124.215.101.111/32",
                            "60.112.161.29/32"
                        ]
                    }
    
  • ご丁寧にありがとうございます。 こちら、確認しました。 これから、諸々再構築をはじめます。 その際に、反映させていただきます。

  • こちら、結論、うまくできました。 ご協力、ありがとうございました。 感謝いたします。

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ