🙆‍♀️

S3バケットのアカウント間共有

2024/09/04に公開

バケットを共有する方法はいくつかあるが、バケットポリシーを使って、特定のAWSアカウントに対してバケットを共有する方法についてのまとめ。

S3バケットのアカウント間共有とオーナーアクセスの注意点

Amazon S3を使ってデータを管理していると、他のAWSアカウントとバケットを共有したい場面が出てきます。その際、よく使われるのがバケットポリシーです。他のアカウントにアクセス権を与えることで、複数のアカウントでデータを扱うことができます。

ただ、「バケットのオーナーである自分のアカウントは、何もしなくてもアクセスできるよね?」と考えるかもしれません。実際のところ、S3では少し違った注意が必要です。バケットポリシーを設定すると、アクセスの管理がそのポリシーによって制御されるので、自分のアカウントが誤ってアクセスできなくなることもあります。

オーナーアカウントのアクセスは自動ではない?

S3バケットのオーナーである自分のアカウントは、基本的にそのバケットへのフルアクセス権を持っています。ただ、バケットポリシーを追加すると、そのポリシーが優先されるため、オーナーアカウントが意図せずアクセスできなくなる可能性があります。ポリシーは、オーナーだから自動的にアクセスを許可するわけではないので、しっかり設定しておくことが大事です。

オーナーアカウントにも明示的にアクセス許可を!

他のアカウントにバケットへのアクセスを許可する際は、オーナーアカウント(自分のアカウント)にも明示的にアクセス権を与えることが推奨されます。以下のようにバケットポリシーに自分のアカウントIDを追加することで、アクセス権を確保しましょう。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::your-bucket-name",
        "arn:aws:s3:::your-bucket-name/*"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::987654321098:root"
      },
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}

123456789012はオーナーアカウント、987654321098は共有したいアカウト。

上記のように、Principalに自分のAWSアカウントIDを指定し、適切なアクション(例:s3:*)を許可することで、オーナーアカウントからのアクセスを維持します。

まとめ

S3のバケットを他のアカウントと共有する際、オーナーアカウントはデフォルトでアクセスできると思いがちですが、バケットポリシーを設定した場合は注意が必要です。他のアカウントにアクセスを許可する際は、自分のアカウントにも明示的に権限を設定しておくと、後々のトラブルを避けることができます。

バケットの共有設定は少し複雑に感じるかもしれませんが、一度理解すれば非常に柔軟で便利です。ぜひ、今回のポイントを参考に、安心してS3バケットを使いこなしてみてください!

Discussion