2017-08-03 16 views
0

RedshiftからS3へのデータをiam_roleを使用してアンロードしようとしています。アンロードコマンドは、Redshiftクラスタと同じアカウントが所有するS3バケットにデータをアンロードしている限り正常に動作します。Redshift Clusterに別のアカウントのS3バケットへのアクセスを許可する

しかし、別のアカウントのS3バケットにデータをアンロードしようとすると、動作しません。しかし、私はいつもS3ServiceException:Access Denied,Status 403,Error AccessDenied,Rid

は誰もが前にこれを行っている得る

:私はこれらのチュートリアルで説明したアプローチを試してみましたか?

答えて

1

私はそれを動作させました。は、ここに私がやったことだ:(テスト用)AmazonS3FullAccessポリシー赤方偏移にデータをロードアカウントA

  • アマゾンの赤方偏移クラスタを立ち上げ
  • を持つアカウントAでIAM役割を作成し

    • クラスタ
    • テスト1:アカウントAでバケットにアンロード - 成功
    • 試験2:アンロードアカウントBにバケットに -
    • 失敗は、アカウントBにバケットにバケットポリシーを追加した(下記参照)
    • 試験3:アンロードバケットにアカウントB - 成功!

    これは私が使用したバケットポリシーです:

    { 
        "Id": "Policy11", 
        "Version": "2012-10-17", 
        "Statement": [ 
        { 
         "Sid": "PermitRoleAccess", 
         "Action": "s3:*", 
         "Effect": "Allow", 
         "Resource": [ 
         "arn:aws:s3:::my-bucket", 
         "arn:aws:s3:::my-bucket/*" 
         ], 
         "Principal": { 
         "AWS": [ 
          "arn:aws:iam::123456789012:role/Redshift-loader" 
         ] 
         } 
        } 
        ] 
    } 
    

    Redshift-loader役割はすでに私の赤方偏移のクラスタに関連付けられました。このポリシーは、このS3バケットへのアクセス(別のAWSアカウントに存在する)を許可します。

  • +0

    うわー!私はあなたが10分のようにすべてをしたとは信じられません。 –

    +1

    「Action」の代わりに「s3:*」「Action」:「s3:PutObject」を除いて同じことをしていました。あなたの答えを見た後、私はその役割に一つずつ権限を追加し始めました。最後に、 '' Action ":[" s3:PutObject "、" s3:List * "]'で働いていました。明らかに、Redshiftには、アイテムが既にバケット内に存在するかどうかを確認するための権限が必要です。あなたの答えに感謝します。 –

    関連する問題