目次

目次

別アカウントが所有するS3へのアップロードそしてダウンロードを挑戦した結果

アバター画像
小田英了
アバター画像
小田英了
最終更新日2018/06/18 投稿日2018/06/18

やろうとしたこと

AWSアカウント1 から、AWSアカウント2のバケットにファイルを置き、AWSアカウント3 でファイルを取得する。

準備

環境は以下の通り。これでいけるでしょう。

  1. 共有バケットの作成: AWSアカウント2 でバケット kyouyu を作成。
  2. アクセス側の設定 :AWSアカウント1 とAWSアカウント3 で kyouyu へのアクセス許可を付与したロール作成。(記載省略)
  3. 共有バケットの設定:バケットポリシーで上記ロールのアクセスを許可。 kyouyu のバケットポリシー
    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "kyouyu-Acl",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::AWSアカウント1ID:role/kyouyuアクセス許可付与ロール",
                    "arn:aws:iam::AWSアカウント3ID:role/kyouyuアクセス許可付与ロール"
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:GetObjectAcl",
                "s3:GetObject",
                "s3:PutObjectAcl",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::kyouyu/*",
                "arn:aws:s3:::kyouyu"
            ]
        }
    ]
    }
    

できるかな

それではファイルを受け渡してみます。

  1. AWSアカウント1からファイルをアップロード
    $ aws s3 cp file1.m4a s3://kyouyu/file1.m4a --acl bucket-owner-full-control
    upload: ./file1.m4a to s3://kyoyu/file1.m4a
    
  2. AWSアカウント3からファイル をダウンロード
    $ aws s3 cp s3://kyouyu/file1.m4a file1.m4a
    A client error (403) occurred when calling the HeadObject operation: Forbidden
    Completed 1 part(s) with ... file(s) remaining
    

ダウンロードできませんでした。。。

なぜできないのか?

ファイルのオブジェクトの権限を確認してみました。

$aws s3api get-object-acl --bucket kyouyu --key file1.m4a
{
    "Owner": {
        "DisplayName": "AWSアカウント1",
        "ID": 省略
    },
    "Grants": [
        {
            "Grantee": {
                "DisplayName": "AWSアカウント1",
                "ID": 省略
            },
            "Permission": "FULL_CONTROL"
        },
        {
            "Grantee": {
                "DisplayName": "AWSアカウント2のアカウント名",
                "ID": 省略
            },
            "Permission": "FULL_CONTROL"
        }
    ]
}
  • ファイルの所有者はAWSアカウント1
  • AWSアカウント1、AWSアカウント2 ともにFULL_CONTROL権限

大丈夫なハズと思いAmazonのドキュメントを調べてみると・・・・

バケットの所有者は、自分が所有していないオブジェクトへのアクセス許可を付与できません。 http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/access-policy-alternatives-guidelines.html

  • ファイルの所有者 AWSアカウント1 ≠ バケットの所有者 AWSアカウント2
    このファイルへは、バケットポリシーで指定したAWSアカウント3へのアクセス許可を付与できません。

なお、AWSアカウント2でアップロードしたファイルは所有者が一致するので、AWSアカウント3でダウンロードできました。

わかったこと

この方法では、複数アカウント間のファイルの受け渡しはできないことがわかりました。

クロスアカウントアクセスが必要になります。 (やっとクロスアカウントの必要性が理解できました)

アバター画像

小田英了

楽曲管理システムのサポートを担当しています。
趣味:ランニング めざせサブ3.5!

目次