[英]Python CGI script, i am not able to pass '+' plus operator as a parameter
[英]I am not able to load AWS credentials using CGI-Python script
在瀏覽器中執行 python CGI 腳本時無法訪問 AWS 憑證。
dynamodb = boto3.resource('dynamodb') 通過在 python 文件中使用上面的行,我可以從 ~/.aws 文件夾中獲取憑據並在控制台中執行它。
但是當我在 Web 瀏覽器中執行相同的代碼時,出現錯誤(缺少憑據)
我嘗試設置環境變量並嘗試使用配置和憑據文件。 但是沒有用。
dynamodb = boto3.resource('dynamodb')
錯誤!!!!
raise NoCredentialsError
NoCredentialsError:無法找到憑據
的~
在~/.aws
代表當前用戶的主目錄。 當腳本從有效的控制台執行時,因為您是當前用戶。 當腳本通過 CGI 執行時,當前用戶是系統上的某個其他帳戶,因此~
指向一個不同的主目錄,其中沒有憑據文件。
如果您在 EC2 服務器上運行它,我建議切換到 IAM 實例配置文件而不是憑證文件。 否則,您將需要考慮將憑據文件放置在正確的用戶帳戶主目錄下,或將憑據設置為 CGI 進程的環境變量。
根據Mark B 的回答,我設法解決了類似的問題,我嘗試了數周。
我的 python 腳本在 Windows 服務器上從 IDEL 本地完美運行
但是,當它被 Web 客戶端(java 腳本)調用時出現錯誤
botocore.exceptions.NoCredentialsError: Unable to locate credentials
問題正是 Mark 指出的與主目錄相關的問題,當腳本在本地運行時,例如在 Windows 中,它是 C:\\Users\\USER_NAME 所以它可以在默認位置 C:\\Users\\USER_NAME\\.aws 中找到憑據\\credentials 如文檔所述,但是當它使用 CGI 運行時,主目錄是不同的
所以要解決這個問題:
1 - 知道你的主目錄(在運行時)
from pathlib import Path
在嘗試訪問 AWS 服務之前放置這些行
home = str(Path.home())
print('Home %s'%home)
復制完整的主路徑
2- 轉到該目錄並將 .aws 目錄的副本放入其中。
3- 授予讀取 .aws 文件的權限
對於 IIS 服務器
cd {full_home_path} + \.aws //Remove {} and +
icacls . /grant "NT AUTHORITY\IUSR:(OI)(CI)(R)"
icacls . /grant "Builtin\IIS_IUSRS:(OI)(CI)(R)"
4-重新啟動服務器
5- 從 Web 客戶端嘗試 python 腳本
6-它應該工作。
通常,CGI 等環境以root
用戶身份運行。 但是,這取決於服務的配置方式。
您有多種選擇:
root
身份運行,則root
的主目錄為/root
。 創建目錄/root/.aws
。 然后將目錄~/.aws
的內容復制到/root/.aws
。 您需要su
才能獲得這些權限。/AWS
。 將您的憑據復制到此目錄。 現在在您的代碼中指定憑證文件/AWS/credentials
的路徑。aws_access_key
和aws secret_access_key
。 不建議這樣做,因為任何時候您將憑據放入程序中都會帶來安全風險。此 AWS 文檔詳細說明了憑證的管理方式。 花點時間從上到下閱讀它。
我還建議從使用 boto3 resource
切換到 boto3 client
。 這將為您的代碼提供更多選項。
示例:通過硬編碼憑據指定您的憑據(不推薦):
import boto3
session = boto3.Session(
# Hard coded strings as credentials, not recommended.
aws_access_key_id='AKIAIO5FODNN7EXAMPLE',
aws_secret_access_key='ABCDEF+c2L7yXeGvUyrPgYsDnWRRC1AYEXAMPLE',
)
dynamodb = boto3.resource('dynamodb')
您可以以任何所需的文件格式存儲您的 AWS 憑證,然后讀回該文件以將 AWS 訪問密鑰加載到您的代碼中。
我用 Google Colab 嘗試了 Amazon Translate,它完全運行良好。
在雲IDE中安裝boto3客戶端
pip install boto3
導入客戶端及其配置
import boto3
from botocore.config import Config
致電亞馬遜翻譯服務
translate = boto3.client(service_name='translate', region_name='us-east-2', use_ssl=True,aws_access_key_id = 'YOUR ACCESS KEY ID',aws_secret_access_key='YOUR ACCESS KEY' )
result = translate.translate_text(Text="YOUR TEXT TO TRANSLATE", SourceLanguageCode="en", TargetLanguageCode="ta")
您可以以 JSON 格式訪問結果
print(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.