1

新しいフェデレーション トークンを要求する Python コードがあります。

AWS_HOST = 'sts.amazonaws.com'
AWS_URI = '/'

AWS_ID = '...'
AWS_SECRET = '...'

def amazon(content):
  URI_String=[]         
  for keyword, value in sorted(content.items()):  
    URI_String.append('%s=%s' % (keyword, urllib.quote(value)) 
  req =  '&'.join(URI_String)                                

  to_sign_req = 'GET\n%s\n%s\n%s' % (AWS_HOST, AWS_URI, req) 
  h = hmac.new(AWS_SECRET, to_sign_req, hashlib.sha256)      
  sig = base64.b64encode(h.digest())                         
  req += '&Signature=%s' % urllib.quote(sig)                 

  baseurl = 'https://sts.amazonaws.com?'                     

  apicall = baseurl + req                                    
  r = urllib.urlopen(apicall).read()                         
  return r    

そして、私はそのような準備されたコンテンツでそれを使用します:

content['Timestamp'] = dstamp.strftime('%Y-%m-%dT%H:%M:%S.000Z')
content['SignatureVersion'] = '2'
content['AWSAccessKeyId'] = AWS_ID
content['DurationSeconds'] = '3600'
content['SignatureMethod']='HmacSHA256'
content['Version']='2011-06-15'
content['Action']='GetFederationToken'
content['Name']='someFederateduserName'

そして、それはうまくいきます。しかし、ポリシー ( content['Policy']=POLICY) を追加しようとすると、POLICY =

{ 
  "Statement": [{
    "Effect": "Allow",
    "Action": "s3:PutObject",
    "Resource": "arn:aws:s3:::bucketname/foldername/*"
  }]
}

アマゾンはSignatureDoesNotMatch応答を返します。誰もそれを修正する方法を知っていますか? ポリシーをカスタマイズして連携トークンを発行したい...

4

0 に答える 0