3

次と同等の方法を実行するにはどうすればよいですか。

s3cmd setacl --acl-grant=read:82b82d14a8d011e09d86001cc029a3688cdd635ea8d011e0b499001cc029a3689052a4f4a8d011e0bd25001cc029a368 s3://somebucket/some/path/to/file

Rubyで?(できれば「aws-s3」gemを使用して)

===編集===

Sorenが以下に示唆しているように、これに似たものが機能するはずです。

grant = AWS::S3::ACL::Grant.new
grant.permission = 'READ'
grantee = AWS::S3::ACL::Grantee.new
grantee.id = '82b82d14a8d011e09d86001cc029a3688cdd635ea8d011e0b499001cc029a3689052a4f4a8d011e0bd25001cc029a368'
grant.grantee = grantee
acl = AWS::S3::S3Object.acl('some/path/to/file', 'somebucket')
acl.grants << grant
AWS::S3::S3Object.acl 'some/path/to/file', 'somebucket', acl 

ただし、それは機能しません。次のエラーが発生します。

提供されたXMLは整形式ではなかったか、公開されたスキーマに対して検証されませんでした(AWS :: S3 :: MalformedACLError)

これを機能させる方法はありますか?

4

4 に答える 4

1

私自身も同じバグに遭遇しました。これを回避するには、最初にオブジェクトのポリシーを取得してから変更し、変更したACLをオブジェクトに適用し直す必要があるようです。

私が見る1つの違いは、CanonicalUserになるように型を明示的に定義していないことです。もう1つの問題は、ACLを読み取っているオブジェクトが許可を与えていないことです(READ_ACP許可がありません)。

policy = AWS::S3::S3Object.acl('object_in_somebucket', 'somebucket')
grantee = AWS::S3::ACL::Grantee.new
grantee.type = 'CanonicalUser'
grantee.id = '82b82d14a8d011e09d86001cc029a3688cdd635ea8d011e0b499001cc029a3689052a4f4a8d011e0bd25001cc029a368'

grant = AWS::S3::ACL::Grant.new
grant.permission = 'READ'
grant.grantee = grantee
policy.grants << grant
AWS::S3::S3Object.acl('object_in_somebucket', 'somebucket', policy)
于 2012-06-02T06:39:04.917 に答える
1

'aws-s3' gemで動作させることはできませんが、'rightscale_aws'gemでは動作します。

require 'right_aws'

s3     = RightAws::S3.new(access_key, secret_key, {:logger => Logger.new('/dev/null')})
bucket =  s3.bucket('somebucket')

bucket.put 'some/path/to/file', open('/tmp/myfile')
access_id = '82b82d14a8d011e09d86001cc029a3688cdd635ea8d011e0b499001cc029a3689052a4f4a8d011e0bd25001cc029a368'
key = bucket.key('some/path/to/file')
RightAws::S3::Grantee.new(key, access_id, ['READ'], :apply)
于 2011-07-08T10:06:05.187 に答える
1

私はまったく同じエラーに苦労しました、ドキュメントはこの点で非常に貧弱です、あなたはGranteeクラスのドキュメントを見る必要があります

被付与者IDを設定するには、以下を指定する必要があります。

grantee.type = "CanonicalUser"
grantee.name = "aName"
grantee.id = '82b82d14a8d011e09d86001cc029a3688cdd635ea8d011e0b499001cc029a3689052a4f4a8d011e0bd25001cc029a368'

これにより、不正な形式のXMLエラーが解決されます

これがお役に立てば幸い、ヴィンセント

于 2012-03-08T06:59:10.747 に答える
-1

Rubyの実装(ここにhttp://amazon.rubyforge.org/ http://amazon.rubyforge.org/doc/があります)が機能するはずです。

于 2011-07-07T19:50:34.420 に答える