假設,我已經授權我所在地區的 "iam "用戶訪問我的API中的一個資源路徑。
我現在的問題是:
我如何在我的API上使用CURL啟用iam-authorization后進行測驗?
我的一個資源路徑看起來如下:
我的一個資源路徑看起來如下:
https://my-api-id.execute-api.eu-central-1.amazonaws.com/dev/music/{id}
uj5u.com熱心網友回復:
首先,通過附加所需的策略,使用你的IAM用戶權限獲得對API網關的控制權。更多資訊
然后通過點擊位于右上方的下拉選單中的我的安全憑證獲得該IAM用戶的憑證。
curl -X GET
'https://my-api-id.execute-api.AWS_REGION.amazonaws.com/dev/music/{id}'
-H 'Authorization: AWS4-HMAC-SHA256 Credential=YOUR_ACCESS_KEY/20210902/us-east-1/execute-api/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=b28388012a84499650cf766bed595b51a8de988da0874140af78bd1775b95bb9'
-H 'Cache-Control: no-cache' (快取控制:無快取
-H 'Content-Type: application/x-www-form-urlencoded
-H 'X-Amz-Date: 20210902T055703Z' 。
這將是你的CURL請求,但你必須先創建簽名字串查看這里
uj5u.com熱心網友回復:
另外,我認為最好的方法是在代碼中發送請求,例如Python,如官方檔案例子中提到的這里。
例如,如果您的證書已經在本地設定,那么這個例子可以用于向您的REST-API發出GET-request>:
# Copyright 2010-2019 Amazon.com, Inc.或其附屬機構。保留所有權利。
#
# 這個檔案是根據Apache許可證2.0版("許可證")授權的。
# 除非遵守許可證的規定,否則你不得使用此檔案。許可證的副本
# 許可證位于
#
# http://aws.amazon.com/apache2.0/
#
# 這個檔案是以 "原樣 "為基礎發布的,沒有任何保證或條件。
# 任何形式的保證或條件,無論是明示還是暗示。請參閱許可協議中的具體
# 許可證規定的權限和限制的語言。
#
# 關于這個PYTHON樣本:這個樣本是AWS通用參考的一部分。
# Signing AWS API Requests top可在以下網站獲得
# https://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html
#
# AWS第4版簽名示例
# IAM API (CreateUser)
# 見:http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html
# 這個版本發出一個GET請求,并在查詢字串中傳遞請求引數
# 以及查詢字串中的授權資訊
import sys, os, base64, datetime, hashlib, hmac, urllib
import requests # pip install requests
# ************* 請求值 *************
方法 = 'GET
服務 = 'iam'
主機 = 'iam.amazonaws.com'
區域 = 'us-east-1'
端點 = 'https://iam.amazonaws.com'
# 密鑰推導功能。見。
# http://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-python
def sign(key, msg):
return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).digest()
def getSignatureKey(key, dateStamp, regionName, serviceName):
kDate = sign(('AWS4' key).encode('utf-8'), dateStamp)
kRegion = sign(kDate, regionName)
kService = sign(kRegion, serviceName)
kSigning = sign(kService, 'aws4_request')
回傳 kSigning
# 從環境變數或組態檔中讀取AWS訪問密鑰。最佳做法是不
# 在代碼中嵌入憑證。
access_key = os.environ.get('AWS_ACCESS_KEY_ID')
secret_key = os.environ.get('AWS_SECRET_ACCESS_KEY')
如果access_key為無或secret_key為無。
print('No access key is available.')
sys.exit()
# 為頭檔案和憑證字串創建一個日期
t = datetime.datetime.utcnow()
amz_date = t.strftime('%Y%m%dT%H%M%SZ') # 日期格式為YYYMMDD'T'HHMMSS'Z'
datestamp = t.strftime('%Y%m%d') # 不含時間的日期,在證書范圍內使用
# ************* 任務1:創建一個規范的請求 *************
# http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
# 因為幾乎所有的資訊都是在查詢字串中傳遞的。
# 這些步驟的順序與使用授權頭的例子略有不同
# 使用授權標頭。
# 第一步:定義動詞(GET、POST等)--已經完成。
# 第2步:創建規范URI--從域到查詢的URI部分
# 字串(如果沒有路徑就用'/')。
canonical_uri = '/'
# 第3步:創建規范的頭檔案和簽名頭檔案。頭部名稱
# 必須修剪成小寫字母,并按碼位順序從低到高排序。
# 從低到高。注意尾部
在canonical_headers中。
# signed_headers是被包括在簽名程序中的頭檔案串列
# 作為簽名程序的一部分。對于使用查詢字串的請求。
# 只有 "host "被包含在簽名頭資訊中。
canonical_headers = 'host:' host ' '。
'
signed_headers = 'host
# 將演算法與你使用的散列演算法相匹配,可以是SHA-1或
# SHA-256(推薦)
algorithm = 'AWS4-HMAC-SHA256'.
credential_scope = datestamp '/' region '/' service '/' 'aws4_request'。
# 第四步:創建規范的查詢字串。在這個例子中,請求
# 引數都在查詢字串中。查詢字串的值必須
# 是URL編碼的(空格= )。引數必須按名稱排序。
# 如果使用Python 3,請使用urllib.parse.quote_plus()
canonical_querystring = 'Action=CreateUser& UserName=NewUser&Version=2010-05-08'
canonical_querystring = '&X-Amz-Algorithm=AWS4-HMAC-SHA256' 。
canonical_querystring = '&X-Amz-Credential=' urllib.quote_plus(access_key '/' credential_scope)
canonical_querystring = '&X-Amz-Date=' amz_date
canonical_querystring = '&X-Amz-Expires=30' 。
canonical_querystring = '&X-Amz-SignedHeaders=' signed_headers
# 第五步:創建有效載荷哈希值。對于GET請求,有效載荷是一個
# 空字串("")。
payload_hash = hashlib.sha256((').encode('utf-8')).hexdigest()
# 第6步:組合元素以創建規范的請求
canonical_request = method ''
' canonical_uri ' canonical_query
' canonical_querystring ' canonical_headers
' canonical_headers ' canonical_headers
' signed_headers ' payload_hash
' payload_hash
# ************* 任務2:創建要簽名的字串*************
string_to_sign = algorithm ''
' amz_date ''
' credential_scope ' hashlib.sha256
' hashlib.sha256(canonical_request.encode('utf-8')).hexdigest()
# ************* 任務3:計算簽名 *************
# 創建簽名密鑰
signing_key = getSignatureKey(secret_key, datestamp, region, service)
# 使用signing_key對字串_to_sign進行簽名
signature = hmac.new(signing_key, (string_to_sign).encode("utf-8"), hashlib.sha256).hexdigest()
# ************* 任務4:在請求中添加簽名資訊 *************
# 簽名資訊可以是在查詢字串中的
# 值中,或者在一個名為 "授權 "的頭中。這段代碼顯示了如何將
# 一切都在一個查詢字串中。
canonical_querystring = '&X-Amz-Signature=' signature
# ************* 發送請求 *************
# "host "頭是由Python的 "request "庫自動添加的。但它
# 必須作為一個頭存在于請求中。
request_url = endpoint "?" canonical_querystring
print('
BEGIN REQUEST ')
print('Request URL = ' request_url)
r = requests.get(request_url)
print('
RESPONSE ')
print('回應代碼。%d
'% r.status_code)
print(r.text)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/319785.html
標籤:
