2016-11-10 10 views
0

私はそのバケットの中に 'ben-bucket'というバケットを持っています。私は複数のファイルを持っています。 ファイルURLごとに権限を設定できるようにします。 私はあまりよく分かっていませんが、私はバケツの中の各ファイルのURLを必要としていると仮定しています。 私のURLはこのようになりますか?amazon s3のボトムバケットに特定の権限を設定する

https://ben-bucket.s3.amazonaws.com/<file_name> 

基本的に、私はそのURLへのパブリックアクセスを設定したいと思います。どうすればいい? 私はこれを試してみましたが、それはコードが提供さ

bucket = s3.Bucket('ben-bucket').Object('db.sqlite') 
    bucket.BucketAcl('public-read') 
    print bucket_acl 

動作しません。 db.sqliteは、私のバケツのベンバケット内のファイルの1つです。コードは機能しません。

https://ben-bucket.s3.amazonaws.com/db.sqlite 

私が提供したコードでは、パブリックリードの許可が設定されていません。

答えて

3

デフォルトでは、Amazon S3のすべてのオブジェクトはプライベートです。その後、ユーザーがオブジェクトにアクセスできるようにアクセス許可を追加できます。これは、を介して行うことができます。

  • アクセス制御リストは、パス、IPアドレス、リファラーに基づいて幅広いアクセスを許可し、個々のオブジェクトに権限
  • バケットポリシーなど
  • IAM AWS資格情報を持つユーザーに許可を付与する
  • 事前署名済みのURL

あなたの全体のバケットへのパブリックアクセス権を付与したい場合は、simiplestオプションは、この(Bucket Policy Examplesから]のようバケットポリシーを作成することです:あなただけへのパブリック・アクセスを許可したい場合

{ 
    "Version":"2012-10-17", 
    "Statement":[ 
    { 
     "Sid":"AddPerm", 
     "Effect":"Allow", 
     "Principal": "*", 
     "Action":["s3:GetObject"], 
     "Resource":["arn:aws:s3:::MY-BUCKET/*"] 
    } 
    ] 
} 

{ 
    "Version":"2012-10-17", 
    "Statement":[ 
    { 
     "Sid":"AddPerm", 
     "Effect":"Allow", 
     "Principal": "*", 
     "Action":["s3:GetObject"], 
     "Resource":["arn:aws:s3:::MY-BUCKET/PATH/*"] 
    } 
    ] 
} 

はい、あなたはまた、権限を設定できます、使用内サブディレクトリバケツ個々のファイルごとにそのためのコードは次のようになります。

import boto3 
s3 = boto3.resource('s3') 
object = s3.Bucket('ben-bucket').Object('db.sqlite') 
object.Acl().put(ACL='public-read') 

参考:Boto3 S3 access controls

関連する問題