Geo*_* R. 3 amazon-sqs amazon-web-services
我正在开发处理AWS SQS队列的python软件。它boto3主要使用boto3.session.Session。
我在这里看到可以将an传递aws_session_token给Session构造函数。
在Amazon外部运行代码时,我需要定期刷新此代码,aws_session_token因为它仅有效一个小时。因此,我需要自己重新建立实例boto3.Session。
我只是想知道事情在AWS内部如何工作。我是否需要aws_session_token通过环境中的新操作来手动刷新会话?还是我的会话“永远”有效/是否在内部处理,因此我不必刷新我的AWS会话?
该文档对我来说似乎不清楚。
AWS生成的令牌不会永远持续下去,使用生成的令牌创建的任何boto3会话也是如此。但是,只要您不是由帐户root用户生成令牌的,就可以在令牌上设置一个较长的TTL(最长36小时)。这使您有很多时间来执行需要处理的Python脚本。
AWS有几种处理临时和永久访问您帐户的方法。通常,您将需要依赖临时凭据,因为它们更安全地使用并且更符合最佳做法。Boto3具有优先级列表,用于查找此处描述的凭据
我为数十个AWS账户编写了很多自动化代码,因此我已经处理了很多东西。
假设您正在Linux中进行开发。Windows非常相似,但有一些区别。
至少有三种方法来处理对您的AWS账户的远程访问:
在〜/ .aws / credentials文件中维护一个配置文件,其中包含您的AWS IAM用户访问密钥,然后使用该配置文件运行Python脚本。
您的Python脚本所需要做的就是创建一个没有参数的boto3.session.Session对象。当您不为会话实例提供令牌或配置文件名称时,boto3会通过扫描上面链接中描述的凭据优先级列表自动查找凭据。
我完全不推荐这样做,但是它可以工作,并且让您了解如何使用AWS配置文件。这是使用您的IAM用户的API密钥进行的永久访问,并且永不过期。虽然您可以将这些密钥用于已授予IAM用户权限的任何操作,但除了承担专门的角色来执行所有其他工作之外,您不应将它们用于其他任何用途。
从命令行使用AWS CLI承担角色,将令牌加载到环境变量中,然后运行Python脚本。
运行Python脚本,并使其处理角色假设和令牌变戏法。
我通常更喜欢方法2,强烈不建议使用方法1。方法3是视情况而定。
方法1:
在命令行中,将您的AWS_PROFILE变量设置为您的配置文件名称,然后运行脚本。脚本中完成的所有操作均使用您的AWS配置文件(IAM用户访问密钥)。
AWS_PROFILE=<YOUR_CREDENTIALS_PROFILE_NAME> python <PATH_TO_SCRIPT>
Run Code Online (Sandbox Code Playgroud)
方法2:
在命令行中,使用您的AWS配置文件在帐户中担任角色,然后将生成的令牌存储在环境变量中。现在,当您执行脚本时,它将自动使用这些标记:
credentials=`AWS_PROFILE=<YOUR_AWS_PROFILE_NAME> aws sts assume-role --role-arn <YOUR_AWS_ROLE_NAME> --role-session-name <SOME_SESSION_NAME> --query 'Credentials.{AKI:AccessKeyId,SAK:SecretAccessKey,ST:SessionToken}' --output text`
export AWS_ACCESS_KEY_ID=`echo ${credentials} | awk '{print $1}'`
export AWS_SECRET_ACCESS_KEY=`echo ${credentials} | awk '{print $2}'`
export AWS_SECURITY_TOKEN=`echo ${credentials} | awk '{print $3}'`
export AWS_DEFAULT_REGION=<AWS_REGION>
python <path_to_your_python_script>
Run Code Online (Sandbox Code Playgroud)
注意:由于令牌已加载到环境变量中,因此在运行脚本时不应设置AWS_PROFILE。所有AWS开发工具包都会在这些环境变量中自动查找凭证令牌。您可以在此处阅读有关它们的更多信息。
方法3:
在您的Python代码中,生成访问令牌,然后使用这些令牌创建会话。
AWS_PROFILE=<YOUR_CREDENTIALS_PROFILE_NAME> python <PATH_TO_SCRIPT>
Run Code Online (Sandbox Code Playgroud)
与方法1相同地运行脚本,除了这次使用AWS_PROFILE承担角色,并且由于使用假定角色创建了会话,因此通过该角色执行了所有后续工作。
AWS_PROFILE=<YOUR_CREDENTIALS_PROFILE_NAME> python <PATH_TO_SCRIPT>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
4835 次 |
| 最近记录: |