Python 3.x 获取访问密钥年龄AWS Boto3

Python 3.x 获取访问密钥年龄AWS Boto3,python-3.x,amazon-web-services,boto3,amazon-iam,Python 3.x,Amazon Web Services,Boto3,Amazon Iam,我试图找到一种方法,通过使用Python3.6和Boto3的aws lambda函数让用户访问密钥年龄。我的问题是,如果存在用于此目的的api调用,我似乎找不到合适的api调用。我能找到的最接近的两个是列出访问密钥,我可以用它来查找密钥的创建日期。和get\u access\u key\u last\u used,它可以告诉我上次使用密钥的日期。然而,我似乎找不到任何一个或其他人简单地给出访问密钥年龄,如AWS IAM console用户视图中所示。是否存在一种简单获取访问密钥年龄的方法?没有直

我试图找到一种方法,通过使用Python3.6和Boto3的aws lambda函数让用户访问密钥年龄。我的问题是,如果存在用于此目的的api调用,我似乎找不到合适的api调用。我能找到的最接近的两个是
列出访问密钥
,我可以用它来查找密钥的创建日期。和
get\u access\u key\u last\u used
,它可以告诉我上次使用密钥的日期。然而,我似乎找不到任何一个或其他人简单地给出访问密钥年龄,如AWS IAM console用户视图中所示。是否存在一种简单获取访问密钥年龄的方法?

没有直接的方法。您可以使用以下代码段来实现您正在尝试的功能:

import boto3, json, time, datetime, sys

client = boto3.client('iam')
username = "<YOUR-USERNAME>"
res = client.list_access_keys(UserName=username)
accesskeydate = res['AccessKeyMetadata'][0]['CreateDate'] ### Use for loop if you are going to run this on production. I just wrote it real quick
accesskeydate = accesskeydate.strftime("%Y-%m-%d %H:%M:%S")
currentdate = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())

accesskeyd = time.mktime(datetime.datetime.strptime(accesskeydate, "%Y-%m-%d %H:%M:%S").timetuple())
currentd = time.mktime(datetime.datetime.strptime(currentdate, "%Y-%m-%d %H:%M:%S").timetuple())

active_days = (currentd - accesskeyd)/60/60/24 ### We get the data in seconds. converting it to days
print (int(round(active_days)))
导入boto3、json、time、datetime、sys
client=bot3.client('iam')
username=“”
res=客户端。列出访问密钥(用户名=用户名)
accesskeydate=res['AccessKeyMetadata'][0]['CreateDate']\。我写得很快
accesskeydate=accesskeydate.strftime(“%Y-%m-%d%H:%m:%S”)
currentdate=time.strftime(“%Y-%m-%d%H:%m:%S”,time.gmtime())
accesskeyd=time.mktime(datetime.datetime.strTime(accesskeydate,“%Y-%m-%d%H:%m:%S”).timetuple())
currentd=time.mktime(datetime.datetime.strtime(currentdate,“%Y-%m-%d%H:%m:%S”).timetuple())
活动天数=(currentd-accesskeyd)/60/60/24#####我们以秒为单位获得数据。将其转换为天
打印(整数(整轮(活动日)))

让我知道这是否如预期的那样有效。

没有直接的方法。您可以使用以下代码段来实现您正在尝试的功能:

import boto3, json, time, datetime, sys

client = boto3.client('iam')
username = "<YOUR-USERNAME>"
res = client.list_access_keys(UserName=username)
accesskeydate = res['AccessKeyMetadata'][0]['CreateDate'] ### Use for loop if you are going to run this on production. I just wrote it real quick
accesskeydate = accesskeydate.strftime("%Y-%m-%d %H:%M:%S")
currentdate = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())

accesskeyd = time.mktime(datetime.datetime.strptime(accesskeydate, "%Y-%m-%d %H:%M:%S").timetuple())
currentd = time.mktime(datetime.datetime.strptime(currentdate, "%Y-%m-%d %H:%M:%S").timetuple())

active_days = (currentd - accesskeyd)/60/60/24 ### We get the data in seconds. converting it to days
print (int(round(active_days)))
导入boto3、json、time、datetime、sys
client=bot3.client('iam')
username=“”
res=客户端。列出访问密钥(用户名=用户名)
accesskeydate=res['AccessKeyMetadata'][0]['CreateDate']\。我写得很快
accesskeydate=accesskeydate.strftime(“%Y-%m-%d%H:%m:%S”)
currentdate=time.strftime(“%Y-%m-%d%H:%m:%S”,time.gmtime())
accesskeyd=time.mktime(datetime.datetime.strTime(accesskeydate,“%Y-%m-%d%H:%m:%S”).timetuple())
currentd=time.mktime(datetime.datetime.strtime(currentdate,“%Y-%m-%d%H:%m:%S”).timetuple())
活动天数=(currentd-accesskeyd)/60/60/24#####我们以秒为单位获得数据。将其转换为天
打印(整数(整轮(活动日)))

让我知道这是否如预期的那样工作。

此简单代码在不转换大量时间的情况下完成相同的工作,等等:

import boto3
from datetime import date

client = boto3.client('iam')
username = "<YOUR-USERNAME>"
res = client.list_access_keys(UserName=username)
accesskeydate = res['AccessKeyMetadata'][0]['CreateDate'].date()
currentdate = date.today()
active_days = currentdate - accesskeydate
print (active_days.days)
导入boto3
起始日期时间导入日期
client=bot3.client('iam')
username=“”
res=客户端。列出访问密钥(用户名=用户名)
accesskeydate=res['AccessKeyMetadata'][0]['CreateDate'].date()
currentdate=date.today()
活动天数=当前日期-accesskeydate
打印(活动天数。天数)

这段简单的代码在不转换大量时间的情况下做同样的事情:

import boto3
from datetime import date

client = boto3.client('iam')
username = "<YOUR-USERNAME>"
res = client.list_access_keys(UserName=username)
accesskeydate = res['AccessKeyMetadata'][0]['CreateDate'].date()
currentdate = date.today()
active_days = currentdate - accesskeydate
print (active_days.days)
导入boto3
起始日期时间导入日期
client=bot3.client('iam')
username=“”
res=客户端。列出访问密钥(用户名=用户名)
accesskeydate=res['AccessKeyMetadata'][0]['CreateDate'].date()
currentdate=date.today()
活动天数=当前日期-accesskeydate
打印(活动天数。天数)

经过进一步测试,我提出了以下在Lambda中运行的方法。如果用户的IAM密钥为90天或更久,python3.6中的此功能将向用户发送电子邮件

先决条件

所有IAM用户都有一个电子邮件标签,其值为正确的电子邮件地址

榜样

  • IAM用户标记键:电子邮件
  • IAM用户标签值:someone@gmail.com
使用的每封电子邮件都需要在SES中确认

import boto3, os, time, datetime, sys, json from datetime import date from botocore.exceptions import ClientError iam = boto3.client('iam') email_list = [] def lambda_handler(event, context): print("All IAM user emails that have AccessKeys 90 days or older") for userlist in iam.list_users()['Users']: userKeys = iam.list_access_keys(UserName=userlist['UserName']) for keyValue in userKeys['AccessKeyMetadata']: if keyValue['Status'] == 'Active': currentdate = date.today() active_days = currentdate - \ keyValue['CreateDate'].date() if active_days >= datetime.timedelta(days=90): userTags = iam.list_user_tags( UserName=keyValue['UserName']) email_tag = list(filter(lambda tag: tag['Key'] == 'email', userTags['Tags'])) if(len(email_tag) == 1): email = email_tag[0]['Value'] email_list.append(email) print(email) email_unique = list(set(email_list)) print(email_unique) RECIPIENTS = email_unique SENDER = "AWS SECURITY " AWS_REGION = os.environ['region'] SUBJECT = "IAM Access Key Rotation" BODY_TEXT = ("Your IAM Access Key need to be rotated in AWS Account: 123456789 as it is 3 months or older.\r\n" "Log into AWS and go to your IAM user to fix: https://console.aws.amazon.com/iam/home?#security_credential" ) BODY_HTML = """ AWS Security: IAM Access Key Rotation: Your IAM Access Key need to be rotated in AWS Account: 123456789 as it is 3 months or older. Log into AWS and go to your https://console.aws.amazon.com/iam/home?#security_credential to create a new set of keys. Ensure to disable / remove your previous key pair. """ CHARSET = "UTF-8" client = boto3.client('ses',region_name=AWS_REGION) try: response = client.send_email( Destination={ 'ToAddresses': RECIPIENTS, }, Message={ 'Body': { 'Html': { 'Charset': CHARSET, 'Data': BODY_HTML, }, 'Text': { 'Charset': CHARSET, 'Data': BODY_TEXT, }, }, 'Subject': { 'Charset': CHARSET, 'Data': SUBJECT, }, }, Source=SENDER, ) except ClientError as e: print(e.response['Error']['Message']) else: print("Email sent! Message ID:"), print(response['MessageId']) 导入boto3、os、time、datetime、sys、json 起始日期时间导入日期 从botocore.exceptions导入ClientError iam=boto3.客户端(“iam”) 电子邮件列表=[] def lambda_处理程序(事件、上下文): 打印(“所有具有90天或以上访问密钥的IAM用户电子邮件”) 对于iam.list_users()中的userlist['users']: userKeys=iam.list\u access\u keys(UserName=userlist['UserName']) 对于userKeys['AccessKeyMetadata']中的keyValue: 如果keyValue['Status']=='Active': currentdate=date.today() 有效天数=当前日期-\ keyValue['CreateDate'].date() 如果活动天数>=datetime.timedelta(天数=90): userTags=iam.list\u user\u标记( UserName=keyValue['UserName']) email_tag=list(过滤器(lambda tag:tag['Key']=='email',userTags['Tags'])) 如果(len(email_tag)==1): email=email_标签[0]['Value'] 电子邮件列表。附加(电子邮件) 打印(电子邮件) email_unique=列表(设置(email_列表)) 打印(电子邮件\u唯一) 收件人=电子邮件\u唯一 SENDER=“AWS安全性” AWS_REGION=os.environ['REGION'] 主题=“IAM访问键旋转” BODY_TEXT=(“您的IAM访问密钥需要在AWS帐户中轮换:123456789,因为它是3个月或更久。\r\n” “登录AWS并转到您的IAM用户以修复:https://console.aws.amazon.com/iam/home?#security_credential" ) BODY_HTML=“” AWS安全:IAM访问密钥轮换:您的IAM访问密钥需要在AWS帐户123456789中轮换,因为该帐户已满3个月。请登录AWS并转到您的帐户https://console.aws.amazon.com/iam/home?#security_credential 创建一组新密钥。请确保禁用/删除以前的密钥对。 """ CHARSET=“UTF-8” 客户机=boto3.客户机('ses',地区名称=AWS\U地区) 尝试: response=client.send