[英]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.