CloudTrail 使用 Boto 登录 DyanmoDB

如何解决CloudTrail 使用 Boto 登录 DyanmoDB

我正在编写一个 boto 脚本,该脚本将创建一个 IAM Policy 并将其属性存储在一个 Dynamodb 表中。我有一个 python 函数,它从另一个文件调用诸如 region、instance_type、ebs_volume_size、meta_template_name、start_time、end_time 等属性。在为 Cloudtrail 编写代码时,我收到了一个 error 用于 putItem 说

“调用 CreateTable 操作时发生错误(ValidationException):无效的 KeySchema:某些索引键属性没有定义”。

这是我的代码,我不确定有什么问题。

import jmespath
import boto3
import sys
import json
import time
import meta_templates
from jinja2 import Template
iam = boto3.client('iam')
sts = boto3.client('sts')
ec2 = boto3.resource('ec2')
cloudtrail = boto3.client('cloudtrail')
s3  = boto3.client('s3')
sqs = boto3.client('sqs')
lambd = boto3.client('lambda')
dynamodb = boto3.resource('dynamodb')

###########################
##### Global variables ####
###########################
region="us-east-2"
instance_type="t2.micro"
ebs_volume_size="20"
meta_template_name="ec2_policy_meta_template"
###############################

start_time_1 = input("What's the start time")
end_time1 = input("What's the end time")
def create_aws_iam_policy_template(**kwargs):
  template_data = {}
  template_data["region"] = kwargs.get('region')
  template_data["start_time"] = kwargs.get('end_time')
  template_data["end_time"] = kwargs.get('start_time')
  template_data["instance_types"] = kwargs.get('instance_type')
  template_data["ebs_volume_size"] = kwargs.get('ebs_volume_size')
  template_data["meta_template_name"] = kwargs.get('meta_template_name')

  meta_template_dict = getattr(meta_templates,template_data["meta_template_name"])
  meta_template_json = json.dumps(meta_template_dict)
  template_json = Template(meta_template_json).render(template_data)
  return template_json  


template_json = create_aws_iam_policy_template(
  region=region,instance_type=instance_type,ebs_volume_size=ebs_volume_size,meta_template_name=meta_template_name,start_time = start_time_1,end_time = end_time1
)


print(template_json)


#Create S3 Bucket for CloudTrail

# Create a bucket policy
bucket_name = 'goodbucket3'
bucket_policy = {
    "Version": "2012-10-17","Statement": [
        {
            "Effect": "Allow","Principal": {"Service": "cloudtrail.amazonaws.com"},"Action": "s3:GetBucketAcl","Resource": f"arn:aws:s3:::{bucket_name}"
        },{
            "Effect": "Allow","Action": "s3:PutObject","Resource": f"arn:aws:s3:::{bucket_name}/AWSLogs/562922379100/*","Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}}
        }
    ]
}

# Convert the policy from JSON dict to string
bucket_policy = json.dumps(bucket_policy)

# Set the new policy
s3.put_bucket_policy(Bucket='goodbucket3',Policy=bucket_policy)
result = s3.get_bucket_policy(Bucket='goodbucket3')

logs = cloudtrail.create_trail(
    Name='GoodTrail',S3BucketName='goodbucket3',)
response = cloudtrail.start_logging(
    Name= f"arn:aws:cloudtrail:us-east-1:562922379100:trail/GoodTrail"
)


table =dynamodb.create_table(
    TableName='GoodTable',KeySchema=[
            {
                'AttributeName': 'Content','KeyType': 'HASH'  # Partition key
            },{
                'AttributeName': 'Details','KeyType': 'HASH'  # Sort key
            }
        ],AttributeDefinitions=[
    {
      "AttributeName": "Content","AttributeType": "S"
    }
    ],ProvisionedThroughput={
    "ReadCapacityUnits": 1,"WriteCapacityUnits": 1
  }
)
time.sleep(20)
table = dynamodb.Table('GoodTable')
response = table.put_item(
    Item= {
        'Content': 'Volume Size','Details': f'{ebs_volume_size}',}
)
response = table.put_item(
    Item= {
        'Content': 'Instance Type','Details': f'{instance_type}',}
)
response = table.put_item(
    Item= {
        'Content': 'Region','Details': f'{region}',}
)

解决方法

来自文档 PutItem

当您添加项目时,主键属性是唯一必需的属性。属性值不能为空。

您使用 S3BucketName 作为 Partition key 声明了您的架构。

    ],KeySchema=[
    {
      "AttributeName": "S3BucketName","KeyType": "HASH"
    }
  ],

所以当你添加一个项目时,你也必须提供它。

例如:

        KeySchema=[
            {
                'AttributeName': 'year','KeyType': 'HASH'  # Partition key
            },{
                'AttributeName': 'title','KeyType': 'RANGE'  # Sort key
            }
        ]
    response = table.put_item(
       Item={
            'year': year,'title': title,'info': {
                'plot': plot,'rating': rating
            }
        }
    )

Getting Started Developing with Python and DynamoDB

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-