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
)