如何使用boto3在Beanstalk上运行的应用程序中验证会话

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用boto3在Beanstalk上运行的应用程序中验证会话相关的知识,希望对你有一定的参考价值。

我的应用程序是通过Elastic Beanstalk部署的。它需要访问S3。我可以使用自己的访问密钥在本地进行,但我不希望在部署时将其存储在任何位置。鉴于实例是在Beanstalk上,必须有一种更简单的auth方法,可能是角色?

我已经给出了Beanstalk实例上使用的角色的完全S3权限,但我不知道如何设置Session

我该如何更换?:

session = boto3.session.Session(
        aws_access_key_id=os.environ.get('AWS_ACCESS_KEY_ID'),
        aws_secret_access_key=os.environ.get('AWS_SECRET_ACCESS_KEY'))
client = session.client('s3')
s3 = session.resource('s3')
bucket = s3.Bucket(os.environ.get('S3_BUCKET'))
# do stuff
答案

管理用于向其他AWS服务签署API请求的凭据的推荐方法是使用IAM角色。将IAM角色附加到实例时,它会从实例元数据中检索临时凭据。这些凭据在有限的时间内有效,但SDK会透明地管理它们。因此,您可以使用IAM角色委派权限,而不是创建AWS凭据并将其分发到实例。

在创建IAM角色时,除了访问策略之外,您还必须附加信任策略(例如,哪些服务可以承担此角色)。

Assume role policy

假定角色策略(也称为信任策略)是一种策略,授予对AWS服务的访问权以使用(假设)该特定角色。因此,如果您使用的是EC2实例,则信任策略可能如下所示:

{
    "Action": "sts:AssumeRole",
    "Effect": "Allow",
    "Principal": {
        "Service": "ec2.amazonaws.com"
    }
}

Access policy

另一方面,访问策略授予对特定AWS资源的IAM角色的访问权限。因此,例如,完全访问S3服务的策略看起来像

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:*"],
            "Resource": ["*"]
        }
    ]
}

创建角色并将其附加到特定实例后,您可以使用SDK而不向其提供任何凭据或区域,并在代码中使用它,如

s3 = boto3.resource('s3')
bucket = s3.Bucket(os.environ.get('S3_BUCKET'))

以上是关于如何使用boto3在Beanstalk上运行的应用程序中验证会话的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Pyspark 脚本在 Amazon EMR 上运行以识别 boto3 模块?它说找不到模块

如何使用 AWS Python SDK Boto 3 等待 Elastic Beanstalk 事件

如何在运行 java 应用程序的弹性 beanstalk 应用程序上启用 java 调试?

如何在 AWS Elastic Beanstalk 上安装/运行 Spark Java 框架?

如何在 AWS Elastic Beanstalk 应用程序负载均衡器上运行的 Spring webapp 上获取请求者 IP

如何在 AWS Elastic Beanstalk 上使用 Resque 运行 Rails 后台作业?