我正在使用boto3创建一些测试来验证S3桶上的微服务访问策略。
水桶设置:
test-bucket/
service/
micro-a/
micro-b/ 此桶策略的目的是限制对具有指定角色的用户的访问:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAccessIfInThisRole",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::test-bucket/*",
"Condition": {
"StringNotLike": {
"aws:userid": "*role-id*"
}
}
}
]
}角色id引用此IAM角色,该角色基于微服务用户代理授予对桶中每个特定于微服务的文件夹的访问权限,即微服务A的用户代理可能是“micro”,因此应该可以访问test-bucket/service/micro-a/*,而不是test-bucket/service/micro-b/*。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::as-bucket-test/service/${aws:useragent}/*"
]
},
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::as-bucket-test"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"service/${aws:useragent}/*"
]
}
}
}
]
}我不明白如何创建boto3客户端,以便能够设置用户代理多个项来验证不同的访问策略。到目前为止,这就是我所拥有的:
import boto3
import botocore
session = botocore.session.Session(
user_agent_name="something"
)
session = boto3.session.Session(botocore_session=session)
print session其结果是:
AttributeError: 'str' object has no attribute 'user_agent_name'发布于 2017-05-18 13:38:22
S3客户端接受一个配置对象,您可以在其中设置自定义配置选项,包括设置自定义用户代理。
from boto3 import client
import botocore
# Create a config
session_config = botocore.config.Config(
user_agent="new_user_agent"
)
s3 = client(
's3',
config=session_config
)
# Make an API call
response = s3.put_object(
...
)发布于 2022-10-13 18:41:26
如果希望附加到默认用户代理,而不是完全替换它,请使用以下命令:
import botocore.config
session_config = botocore.config.Config(
...
user_agent_extra="myapp/1.2.3",
)您也将得到一个包含所有原始上下文的User-Agent头,如下所示:
Boto3/1.24.67 Python/3.9.13 Botocore/1.27.67 myapp/1.2.3https://stackoverflow.com/questions/44034642
复制相似问题