簡體   English   中英

通過lambda / boto3進行s3策略更新-列表索引超出范圍錯誤

[英]s3 policy update through lambda/boto3 - list index out of range error

我需要更新S3存儲桶策略(獲取當前資源ARN並附加新的資源ARN)。 這是代碼片段:

import os
import boto3
import pprint
import json
import sys

s3 = boto3.resource('s3')
buckets = ["test090909"]
for s3b in buckets:
        print("processing bucket" + s3b)
        bucket = s3.Bucket(s3b)
        policy = bucket.Policy()
        p =  json.loads(policy.policy)  
        print(p)                        # Good until here
        stmt = p["Statement"][1]
        print(stmt)

p的輸出如下所示,直到此為止一切都很好,但是如果我想獲取Resource節,則它應該是stmt = p["Statement"][1]因為這是字典,列表索引為1,但是我收到了一個錯誤IndexError: list index out of range但是如果我執行stmt = p["Statement"][0]它將返回所有內容。 我相信我相信的string / json項目做錯了什么。

{
  u'Version': u'2012-10-17',
  u'Id': u'Policy1544682557303',
  u'Statement': [
    {
      u'Action': u's3:DeleteBucket',
      u'Principal': {
        u'Service': u'config.amazonaws.com'
      },
      u'Resource': [
        u'arn:aws:s3:::test090909',
        u'arn:aws:s3:::test090909/AWSLogs/111111111111/Config/*'
      ],
      u'Effect': u'Allow',
      u'Sid': u'Stmt1544682555302'
    }
  ]
}

它應該是“ stmt = p [“ Statement”] [1]“,因為這是字典,列表索引為1,但是我收到一個錯誤“ IndexError:列表索引超出范圍”,但是如果我執行“ stmt = p [”語句“] [0]”返回所有內容

這是不正確的。 給定json輸出, p["Statement"][1]不存在,因此引發了超出范圍的錯誤。 p["Statement"]僅包含一項。 用您的話說, p["Statement"][0]返回“一切”,因為它實際上包含了所有內容。 它包含一個Item列表,其中一個是arn資源列表。

你去了:

>>print(p["Statement"][0])
[ { u'Action': u's3:DeleteBucket', u'Principal': { u'Service': u'config.amazonaws.com' }, u'Resource': [ u'arn:aws:s3:::test090909', u'arn:aws:s3:::test090909/AWSLogs/111111111111/Config/*' ], u'Effect': u'Allow', u'Sid': u'Stmt1544682555302' } ]

>>print(p["Statement"][0]["Resource"])
[ u'arn:aws:s3:::test090909', u'arn:aws:s3:::test090909/AWSLogs/111111111111/Config/*' ]

然后,如果要訪問特定資源之一:

>>print(p["Statement"][0]["Resource"][0])
arn:aws:s3:::test090909

>>print(p["Statement"][0]["Resource"][1])
arn:aws:s3:::test090909/AWSLogs/111111111111/Config/*

編碼愉快!

Python索引從0開始,因此p["Statement"][0]將返回該列表中的第一項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM