ラベル s3 の投稿を表示しています。 すべての投稿を表示
ラベル s3 の投稿を表示しています。 すべての投稿を表示

2013年7月20日土曜日

Cyberduck から S3 へアップロード時のパーミッション

Cyberduck から S3 へファイルをアップロードした際に、自動的に Everyone へ閲覧許可が設定されてしまい、Bucket Policies でアクセス制限をコントロールしたい場合に、不便に感じていました。

例えば Bucket Policies で、特定のIPアドレスからのみアクセスを許可していても、ファイルに Everyone の閲覧許可がされていると、そちらが優先されてしまいます。

アップロード時のパーミッション設定が、Cyberduck の環境設定には見つからなかったのですが、ドキュメントに説明がありました。
$ defaults write ch.sudo.cyberduck s3.bucket.acl.default private

上記の設定をすることで、Everyone への閲覧許可が自動的に設定されなくなります。

2012年9月9日日曜日

Amazon S3 上の Web サイトへのアクセス制限

Amazon S3 上のバケットは、Web サイトとして設定することができます。

Hosting Websites on Amazon S3

また、Bucket Policies を使用することで、アクセスの制限をすることも可能です。例えば、特定のIPアドレスからのみアクセスを許可・拒否したい場合は、以下のように設定します。

Example Cases for Amazon S3 Bucket Policies
{
    "Version": "2008-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition" : {
                "IpAddress" : {
                    "aws:SourceIp": "192.168.143.0/24"
                },
                "NotIpAddress" : {
                    "aws:SourceIp": "192.168.143.188/32"
                }
            }
        }
    ]
}
この例では、192.168.143.* からのアクセスを許可しますが、例外として 192.168.143.188 からの アクセスは拒否されます。

各要素の説明は、Element Descriptions に記載されています。

2012年8月5日日曜日

boto を使って Amazon S3 へのアップロード

boto を使って S3 へアップロードする時、東京リージョンなど、US Standard 以外のリージョンのバケットへのアップロードが失敗するという事象に遭遇しました。エラー内容は Broken pipe 。
>>> from boto.s3.connection import S3Connection
>>> conn = S3Connection()
>>> bucket = conn.get_bucket('mybucket')
>>> k = Key(bucket)
>>> k.set_contents_from_filename('myfile')
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
...
    857             raise BotoServerError(response.status, response.reason, body)
    858         elif e:
--> 859             raise e
    860         else:
    861             msg = 'Please report this exception as a Boto Issue!'

error: [Errno 32] Broken pipe
しかも、50KBぐらいのファイルだと問題ないのに、500KBくらいになるとダメ。東京リージョンのサーバから実行してるから、US の方が距離的に遠いし、時間がかかってタイムアウトとは考えにくい。しかも、500KBってそんなに大きいサイズではないし。 

同じ事象で困っている人がいて、以下のページが参考になりました。

 broken pipe error, non US-Standard region

解決方法としては、Connection を作成する時に、host を指定すること。
>>> from boto.s3.connection import S3Connection
>>> conn = S3Connection(host='s3-ap-northeast-1.amazonaws.com')

指定するエンドポイントは、ここから参照できます。

Amazon Web Services Glossary - Regions and Endpoints