botopython
‘壹’ 如何防止在Firefox或镀铬物的验证提示符与SAML和ADFS
AWS支持使用SAML(安全断言标记语言) 2.0进行身份联合使用SAML配置AWS账户与身份提供商(IdP)整合旦配置组织身份提供商联合用户进行验证授权联合用户使用单点登录登录AWS管理控制台仅使用户免于记住另用户名密码简化管理员身份管理程联合用户想访问AWS管理控制台种效想使用AWS CLI或程序式调用AWS API呢
本文我向展示何用户实施联合API与CLI访问本帖提供举例使用AWS python SDK工具些附加客户端侧集代码用户需要种访问控制实施该案使些用户管理轻松自
让我快速解我目标始
janedoe@Ubuntu64:/tmp$ ./samlapi.py
Username: ADjanedoe
Password: ****************
Please choose the role you would like to assume:
[ 0 ]: arn:aws:iam::012345678987:role/ADFS-Administrators
[ 1 ]: arn:aws:iam::012345678987:role/ADFS-Operators
Selection: 1
---------------------------------------------------------------
Your new access key pair has been stored in the aws configuration
file /home/janedoe/.aws/credentials under the saml profile.
Note that it will expire at 2015-05-26T17:16:20Z.
After this time you may safely rerun this script to refresh your
access key pair.
To use this credential call the aws cli with the --profile option
(e.g. aws --profile saml ec2 describe-instances).
---------------------------------------------------------------
Simple API example listing all s3 buckets:
[, , ,
, ]
面输结我清楚看
1. 系统提示联合用户输入Active Directory(态目录)证书些证书用与配置IdP进行比较用户进行验证授权
2. 系统检查返SAML断言确定用户授权承担IAM(身份及访问管理)角色用户选择期望角色系统使用AWS STS(安全令牌服务)提取临安全证书
3. 系统自些证书写入本AWS证书文件始发AWS API或CLI调用指令
4. 该例组织例进行定制保持AWS IAM服务提供控制同使用组织证书提高AWS APICLI界面能力自化程度
本帖集讲述何使用微软态目录联合服务(AD FS)使用其供应商同类产品请要失望基本组件应该与其见IdP配合运转
能够紧跟本帖讲述必须已经:
入门
1. 使用组织证书AD FS确与AWS账户进行集便能够访问控制台需要设置说明请参考 Enabling Federation to AWS using Windows Active Directory, ADFS, and SAML 2.0
2. 已本工作站安装新版本(2.36或更新)AWS Python SDK工具
3. 获取限度AWS证书文件(例:~/.aws/credentials)并文件内容调整首选区域输格式
重要提示:AWS访问密钥并没面结构配置初AWS STS调用由值信任IdP返SAML断言进行验证所续API/CLI调用都由包含AWS STS令牌密钥进行验证想要获取更信息请参考 Giving AWS Console Access to Federated Users Using SAML
首先需要安装属于Python核发行版两模块具体说beautifulsoup4requests-ntlm若干种安装着两模块包含Python 2.7.9或更新版本pip工具使模块安装变容易需运行两命令即:
[default]
output = json
region = us-west-2
aws_access_key_id =
aws_secret_access_key =
首先运行面命令:
pip install beautifulsoup4
运行面命令:
pip install requests-ntlm
应该些与截图类似输结:
AWS联合程利用IdP发起登录准备步骤需要确定具体用引发登录URL基本IdP引发登录URL起点(该URL用联合访问SAML依赖各URLSAML依赖各包括AWS管理控制台)本例我使用AD FS 2.0该版本URL格式ofhttps:///adfs/ls/IdpInitiatedSignOn.aspx我该URL输入浏览器址栏我看网站选择页面
构造所需URL原IdP引发登录URL与查询字符串?loginToRp=urn:amazon:webservices连接构造URL应呈现形式ofhttps:///adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices保存该URL面叙述称idpentryurl变量串联URL输浏览器址栏应该仍实现AD FS IdP引发登录程绕网站选择页面验证完演练所需URL直接进入AWS管理控制台兴趣访问Microsoft’s website查看关于查询字符串文档
重要提示:务必密切注意URL主机名称写AD FS验证程使用主机名称任何写面匹配都导致验证失败
检查代码
既已经浏览面入门部步骤始组合控制联合API与CLI访问集代码我详细解释程便跟随我节奏首先让我进行些基本导入变量设置
#!/usr/bin/python
import sys
import boto.sts
import boto.s3
import requests
import getpass
import ConfigParser
import base64
import xml.etree.ElementTree as ET
from bs4 import BeautifulSoup
from os.path import expanser
from urlparse import urlparse, urlunparse
from requests_ntlm import HttpNtlmAuth
##########################################################################
# Variables
# region: The default AWS region that this script will connect
# to for all API calls
region = 'us-west-2'
# output format: The AWS CLI output format that will be configured in the
# saml profile (affects subsequent CLI calls)
outputformat = 'json'
# awsconfigfile: The file where this script will store the temp
# credentials under the saml profile
awsconfigfile = '/.aws/credentials'
# SSL certificate verification: Whether or not strict certificate
# verification is done, False should only be used for dev/test
sslverification = True
# idpentryurl: The initial URL that starts the authentication process.
idpentryurl = 'https:///adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'
##########################################################################
述代码变量调整针具体区域(us-west-2us-east-1等等)格式喜(例json文本或表格)插入本帖部变量idpentryurl值
基本环境搭建起提示用户标准输入检索用户证书本帖面我讨论我何支持其证书形式
# Get the federated credentials from the user
print "Username:",
username = raw_input()
password = getpass.getpass()
print ''
位于第行打印语句Username面逗号能看起像缺陷实际Python防止第行打印语句添加换行符使用技巧注意getpass()使用防止密码显示输结
步我使用Python请求模块组合验证信息用公式表示向IdP发送HTTPS请求面片段所示假设验证功AD FS返响应消息包含SAML断言
‘贰’ python中timedelta方法怎么用
#! /usr/bin/python# coding=utf-8from datetime import datetime,timedelta"""timedelta代表两个datetime之间的时间差"""now = datetime.now()
past = past = datetime(2010,11,12,13,14,15,16)
timespan = now - past#这会得到一个负数
past - now
attrs = [
("days","日"),( 'seconds',"秒"),( 'microseconds',"毫秒")#('min',"最小"),( 'max',"最大"),]for k,v in attrs: "timespan.%s = %s #%s" % (k,getattr(timespan, k),v)"""总共相差的秒数"""timespan.total_seconds()"""实例化一个timespan
请注意它的参数顺序
timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])"""timespan = timedelta(days=1)
now - timespan #返回的是datetime型
now + timespan
timespan * 2 #还可以乘哦。代表二倍
timespan / 13#增加一个月from calendar import monthrange
now + timedelta(days=monthrange(start.year,start.month)[1])
‘叁’ 怎么查boto3的版本
Boto3是亚马逊AWS提供的pythonSDK,最为常用的功能是S3对象存储的访问。boto3根包提供了两类API:全局设置、重要入口类。全局设置包括:
boto3.set_stream_logger(name='boto3', level=10, format_string=None)设置日志级别
boto3.setup_default_session(**kwargs)设置默认session
boto3.resource(*args, **kwargs):最终会调用session包下的resource函数boto3.session.Session.resource()
boto3.client(*args, **kwargs):最终会调用session包下的resource函数boto3.session.Session.client()
不知道这是不是你想要的答案。
重要入口类包括:
‘肆’ windows环境下怎么安装cudarray
首先,deeppy的安装是需要依赖cudarray的,所以必须先安装cudarray,下载请click here。
下载完毕之后解压,有了Makefile文件,原文中配置文件是要这么改的。
First, you should consider specifying the following environment variables. - `INSTALL_PREFIX` (default: `/usr/local`). Path where to install libcudarray. For the Anaconda Python distributionthis should be `/path/to/anaconda`. - `CUDA_PREFIX` (default: `/usr/local/cuda`). Path to the CUDA SDK organized in `bin/`, `lib/`, `include/` folders. - `CUDNN_ENABLED`. Set `CUDNN_ENABLED` to `1` to include cuDNN operations in `libcudarray`.
根据我的实际情况,我的anaconda安装在/data1/NLPRMNT/sunliming,所以我的INSTALL_PREFIX改为
INSTALL_PREFIX=/data1/NLPRMNT/sunliming/anaconda
我的cuda目录是
CUDA_PREFIX = /usr/local/cuda-6.5
接着是我设置CUDNN_ENABLED
CUDNN_ENABLED = 1
# Set CUDNN_ENABLED to 1 to include cuDNN operations in libcudarray.
到了这儿配置就改好了,接着运行makemake install
显示so文件被拷贝到anaconda/lib目录下面去了,接下来还有一个很重要的工作,就是安装cudarray模块。我表示我做的时候把这一步忘记了,然后后面测试,死活都过不去,都是泪啊!python setup.py install
到这个时候安装完毕测试一下pythonimport cudarray
没有问题的话就可以装deeppy了。安装deeppy就简单多了,下载、解压、执行。python setup.py install
然后就配置好了。pip list
就能看到结果了。
abstract-rendering (0.5.1)
argcomplete (0.8.4)
astropy (1.0.1)
backports.ssl-match-hostname (3.4.0.2)
bcolz (0.8.1)
beautifulsoup4 (4.3.2)
binstar (0.10.1)
bitarray (0.8.1)
blaze (0.7.3)
blz (0.6.2)
bokeh (0.8.1)
boto (2.36.0)
cdecimal (2.3)
certifi (14.5.14)
cffi (0.9.2)
clyent (0.3.4)
colorama (0.3.3)
conda (3.10.0)
conda-build (1.11.0)
conda-env (2.1.3)
configobj (5.0.6)
cryptography (0.8)
cudarray (0.1)
Cython (0.22)
cytoolz (0.7.2)
DataShape (0.4.4)
decorator (3.4.0)
deeppy (0.1.dev0)
接下来就是测试程序了,希望没有其他问题。
‘伍’ 如何使用saml2.0和adfs实施api与cli访问联合控制
AWS支持使用SAML(安全断言标记语言) 2.0进行身份联合。使用SAML,你可以配置你的AWS账户与你的身份提供商(IdP)整合。一旦配置,你组织的身份提供商就会对你的联合用户进行验证和授权,然后联合用户可以使用单点登录方法登录到AWS管理控制台。这不仅可以使你的用户免于记住另一个用户名和密码,也是简化了管理员的身份管理过程。当你的联合用户想访问AWS管理控制台,这种方法是有效的。但是当他们想使用AWS CLI或以程序方式调用AWS API时,将会怎么样呢?
在本文中,我将向你展示如何对你的用户实施联合的API与CLI访问。本帖中提供的举例使用了AWS Python SDK工具和一些附加的客户端侧的集成代码。如果你有用户需要这种访问控制,实施该方案可以使你对这些用户的管理轻松自如。
让我们从快速地了解我们的目标开始。
janedoe@Ubuntu64:/tmp$ ./samlapi.py
Username: AD\janedoe
Password: ****************
Please choose the role you would like to assume:
[ 0 ]: arn:aws:iam::012345678987:role/ADFS-Administrators
[ 1 ]: arn:aws:iam::012345678987:role/ADFS-Operators
Selection: 1
---------------------------------------------------------------
Your new access key pair has been stored in the aws configuration
file /home/janedoe/.aws/credentials under the saml profile.
Note that it will expire at 2015-05-26T17:16:20Z.
After this time you may safely rerun this script to refresh your
access key pair.
To use this credential call the aws cli with the --profile option
(e.g. aws --profile saml ec2 describe-instances).
---------------------------------------------------------------
Simple API example listing all s3 buckets:
[<Bucket: mybucket1>, <Bucket: mybucket2>, <Bucket: mybucket3>,
<Bucket: mybucket4>, <Bucket: mybucket5>]
从上面的输出结果中我们清楚地看到了什么?
1. 系统提示联合用户输入Active Directory(动态目录)证书。这些证书用来与配置的IdP进行比较以对用户进行验证和授权。
2. 系统检查返回的SAML断言,确定用户被授权承担的IAM(身份及访问管理)角色。用户选择了她期望的角色后,系统使用AWS STS(安全令牌服务)提取临时的安全证书。
3. 系统自动地将这些证书写入她本地的AWS证书文件,她可以开始发出AWS API或CLI调用指令。
4. 得到该样例,为你的组织对样例进行定制后,你就可以在保持AWS IAM服务提供的控制的同时,使用组织的证书来提高你的AWS API和CLI界面的能力和自动化程度。
本帖将会集中讲述如何使用微软动态目录联合服务(AD FS)。但是如果你正在使用其他供应商的同类产品,请不要感到失望因为基本的组件应该可以与其他常见的IdP配合运转的。
为了能够紧跟本帖的讲述,你必须已经:
入门
1. 使用你的组织证书将AD FS正确地与你的AWS账户进行了集成,以便能够访问控制台。如果你需要设置说明,请参考 Enabling Federation to AWS using Windows Active Directory, ADFS, and SAML 2.0。
2. 已在本地工作站安装了新版本(2.36或更新)的AWS Python SDK工具。
3. 获取了最小限度的AWS证书文件(例如:~/.aws/credentials),并将文件中的如下内容调整到你首选的区域和输出格式。
重要提示:AWS访问密钥对并没有在上面的结构中配置因为最初的AWS STS调用是由值得信任的IdP返回的SAML断言进行验证的。所有后续的API/CLI调用都是由包含在AWS STS令牌中的密钥对进行验证的。想要获取更多信息,请参考 Giving AWS Console Access to Federated Users Using SAML
首先,你需要安装不属于Python核心发行版的两个模块,具体说,就是beautifulsoup4和requests-ntlm。有若干种方法可以安装着两个模块,但是包含在Python 2.7.9或更新版本中的pip工具,使模块安装变得很容易。你只需运行如下两个命令即可:
[default]
output = json
region = us-west-2
aws_access_key_id =
aws_secret_access_key =
首先运行下面的命令:
<u>pip install beautifulsoup4</u>
然后运行下面的命令:
pip install requests-ntlm
你应该会得到一些与如下截图类似的输出结果:
AWS联合过程利用IdP发起的登录方法。在最后的准备步骤中,你需要确定具体的被用来引发登录的URL。以基本的IdP引发登录的URL为起点(该URL就是你用来联合访问SAML依赖各方的URL,SAML依赖各方包括AWS管理控制台)。在本例中,我使用的是AD FS 2.0。在该版本中,URL的格式为ofhttps://<fqdn>/adfs/ls/IdpInitiatedSignOn.aspx。如果我将该URL输入浏览器的地址栏,我将会看到一个网站选择页面,
为了构造你所需的URL,将原来的IdP引发登录URL与查询字符串?loginToRp=urn:amazon:webservices连接。构造好的URL应呈现的形式是ofhttps://<fqdn>/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices。保存该URL因为在后面的叙述中它将被称为idpentryurl变量。如果你将这个串联的URL输出浏览器的地址栏,你应该仍然可以实现AD FS IdP引发登录过程。但是,你绕过了网站选择页面,在验证完演练所需的URL后直接进入AWS管理控制台。如果感兴趣的话,你可以访问Microsoft’s website去查看关于查询字符串的文档。
重要提示:务必密切注意URL中主机名称的大写。AD FS在验证过程中会使用主机名称,任何在大小写方面的不匹配都会导致验证失败。
检查代码
既然你已经浏览了上面“入门”部分的步骤,你可以开始组合控制联合API与CLI访问的集成代码了。我将会详细地解释这一过程以便你可以跟随我的节奏。首先,让我们进行一些基本的导入和变量设置。
#!/usr/bin/python
import sys
import boto.sts
import boto.s3
import requests
import getpass
import ConfigParser
import base64
import xml.etree.ElementTree as ET
from bs4 import BeautifulSoup
from os.path import expanser
from urlparse import urlparse, urlunparse
from requests_ntlm import HttpNtlmAuth
##########################################################################
# Variables
# region: The default AWS region that this script will connect
# to for all API calls
region = 'us-west-2'
# output format: The AWS CLI output format that will be configured in the
# saml profile (affects subsequent CLI calls)
outputformat = 'json'
# awsconfigfile: The file where this script will store the temp
# credentials under the saml profile
awsconfigfile = '/.aws/credentials'
# SSL certificate verification: Whether or not strict certificate
# verification is done, False should only be used for dev/test
sslverification = True
# idpentryurl: The initial URL that starts the authentication process.
idpentryurl = 'https://<fqdn>/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'
##########################################################################
将上述代码中的变量调整为针对你的具体的区域(如us-west-2,us-east-1等等)和格式喜好(例如json,文本,或表格),然后插入本帖中上一部分变量idpentryurl的值。
基本环境搭建起来后,提示用户,从标准输入中检索用户的证书。在本帖的后面我将会讨论我们是如何支持其他的证书形式的。
# Get the federated credentials from the user
print "Username:",
username = raw_input()
password = getpass.getpass()
print ''
位于第一行打印语句“Username”后面的逗号可能看起来像是一个缺陷,实际上它是Python为了防止第一行打印语句添加换行符而使用的小技巧。你也将会注意到getpass()这一方法的使用,这一方法是为了防止密码被显示在输出结果中。
下一步,我们使用Python请求模块组合验证信息,用公式表示向IdP发送的HTTPS请求,正如下面的片段所示。假设验证成功,AD FS返回的响应消息会包含SAML断言。
‘陆’ python常用函数包有哪些
一些python常用函数包:
1、Urllib3
Urllib3是一个 Python 的 HTTP 客户端,它拥有 Python 标准库中缺少的许多功能:
线程安全
连接池
客户端 SSL/TLS 验证
使用分段编码上传文件
用来重试请求和处理 HTTP 重定向的助手
支持 gzip 和 deflate 编码
HTTP 和 SOCKS 的代理支持
2、Six
six 是一个是 Python 2 和 3 的兼容性库。这个项目旨在支持可同时运行在 Python 2 和 3 上的代码库。它提供了许多可简化 Python 2 和 3 之间语法差异的函数。
3、botocore、boto3、s3transfer、awscli
Botocore是 AWS 的底层接口。Botocore是 Boto3 库(#22)的基础,后者让你可以使用 Amazon S3 和 Amazon EC2 一类的服务。Botocore 还是 AWS-CLI 的基础,后者为 AWS 提供统一的命令行界面。
S3transfer(#7)是用于管理 Amazon S3 传输的 Python 库。它正在积极开发中,其介绍页面不推荐人们现在使用,或者至少等版本固定下来再用,因为其 API 可能发生变化,在次要版本之间都可能更改。Boto3、AWS-CLI和其他许多项目都依赖s3transfer。
4、Pip
pip是“Pip Installs Packages”的首字母递归缩写。
pip很容易使用。要安装一个包只需pip install <package name>即可,而删除包只需pip uninstall <package name>即可。
最大优点之一是它可以获取包列表,通常以requirements.txt文件的形式获取。该文件能选择包含所需版本的详细规范。大多数 Python 项目都包含这样的文件。
如果结合使用pip与virtualenv(列表中的 #57),就可以创建可预测的隔离环境,同时不会干扰底层系统,反之亦然。
5、Python-dateutil
python-dateutil模块提供了对标准datetime模块的强大扩展。我的经验是,常规的Python datetime缺少哪些功能,python-dateutil就能补足那一块。
6、Requests
Requests建立在我们的 #1 库——urllib3基础上。它让 Web 请求变得非常简单。相比urllib3来说,很多人更喜欢这个包。而且使用它的最终用户可能也比urllib3更多。后者更偏底层,并且考虑到它对内部的控制级别,它一般是作为其他项目的依赖项。
7、Certifi
近年来,几乎所有网站都转向 SSL,你可以通过地址栏中的小锁符号来识别它。加了小锁意味着与该站点的通信是安全和加密的,能防止窃听行为。
8、Idna
根据其 PyPI 页面,idna提供了“对 RFC5891 中指定的应用程序中国际化域名(IDNA)协议的支持。”
IDNA的核心是两个函数:ToASCII和ToUnicode。ToASCII会将国际 Unicode 域转换为 ASCII 字符串。ToUnicode则逆转该过程。在IDNA包中,这些函数称为idna.encode()和idna.decode()
9、PyYAML
YAML是一种数据序列化格式。它的设计宗旨是让人类和计算机都能很容易地阅读代码——人类很容易读写它的内容,计算机也可以解析它。
PyYAML是 Python 的YAML解析器和发射器,这意味着它可以读写YAML。它会把任何 Python 对象写成YAML:列表、字典,甚至是类实例都包括在内。
10、Pyasn1
像上面的IDNA一样,这个项目也非常有用:
ASN.1 类型和 DER/BER/CER 编码(X.208)的纯 Python 实现
所幸这个已有数十年历史的标准有很多信息可用。ASN.1是 Abstract Syntax Notation One 的缩写,它就像是数据序列化的教父。它来自电信行业。也许你知道协议缓冲区或 Apache Thrift?这就是它们的 1984 年版本。
11、Docutils
Docutils是一个模块化系统,用来将纯文本文档处理为很多有用的格式,例如 HTML、XML 和 LaTeX 等。Docutils能读取reStructuredText格式的纯文本文档,这种格式是类似于 MarkDown 的易读标记语法。
12、Chardet
你可以用chardet模块来检测文件或数据流的字符集。比如说,需要分析大量随机文本时,这会很有用。但你也可以在处理远程下载的数据,但不知道用的是什么字符集时使用它。
13、RSA
rsa包是一个纯 Python 的 RSA 实现。它支持:
加密和解密
签名和验证签名
根据 PKCS#1 1.5 版生成密钥
它既可以用作 Python 库,也能在命令行中使用。
14、Jmespath
JMESPath,发音为“James path”,使 Python 中的 JSON 更容易使用。它允许你声明性地指定如何从 JSON 文档中提取元素。
15、Setuptools
它是用于创建 Python 包的工具。不过,其文档很糟糕。它没有清晰描述它的用途,并且文档中包含无效链接。最好的信息源是这个站点,特别是这个创建 Python 包的指南。
16、Pytz
像dateutils一样,这个库可帮助你处理日期和时间。有时候,时区处理起来可能很麻烦。幸好有这样的包,可以让事情变得简单些。
17、Futures
从 Python 3.2 开始,python 提供current.futures模块,可帮助你实现异步执行。futures 包是该库适用于 Python 2 的 backport。它不适用于 Python3 用户,因为 Python 3 原生提供了该模块。
18、Colorama
使用 Colorama,你可以为终端添加一些颜色:
更多Python知识请关注Python自学网
‘柒’ aws s3 python api访问速度为什么这么慢
登录aws中国,选择s3服务
可以创建一个bucket,也可以用create_bucket接口
使用boto3获取bucket列表
session = Session(aws_access_key_id=aws_key,
aws_secret_access_key=aws_secret, region_name='cn-north-1')
s3 = session.resource('s3')
for bucket in s3.buckets.all():
print('bucket name:%s'%bucket.name)
将本地文件传到s3的指定bucket中
data = open('nj.png', 'rb')
file_obj = s3.Bucket(bucket).put_object(Key=objkey, Body=data)
获取URL
down_url = client.generate_presigned_url(
'get_object', Params={'Bucket': bucket, 'Key': objkey},
ExpiresIn= 3600
)