首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boto3设置自定义用户代理以测试S3访问策略

Boto3设置自定义用户代理以测试S3访问策略
EN

Stack Overflow用户
提问于 2017-05-17 20:55:41
回答 2查看 2.5K关注 0票数 4

我正在使用boto3创建一些测试来验证S3桶上的微服务访问策略。

水桶设置:

代码语言:javascript
复制
test-bucket/
  service/
    micro-a/
    micro-b/    

此桶策略的目的是限制对具有指定角色的用户的访问:

代码语言:javascript
复制
{
    "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/*

代码语言:javascript
复制
{
    "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客户端,以便能够设置用户代理多个项来验证不同的访问策略。到目前为止,这就是我所拥有的:

代码语言:javascript
复制
import boto3
import botocore

session = botocore.session.Session(
    user_agent_name="something"
)

session = boto3.session.Session(botocore_session=session)
print session

其结果是:

代码语言:javascript
复制
AttributeError: 'str' object has no attribute 'user_agent_name'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-18 13:38:22

S3客户端接受一个配置对象,您可以在其中设置自定义配置选项,包括设置自定义用户代理。

代码语言:javascript
复制
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(
  ...
)
票数 5
EN

Stack Overflow用户

发布于 2022-10-13 18:41:26

如果希望附加到默认用户代理,而不是完全替换它,请使用以下命令:

代码语言:javascript
复制
import botocore.config

session_config = botocore.config.Config(
    ...
    user_agent_extra="myapp/1.2.3",
)

您也将得到一个包含所有原始上下文的User-Agent头,如下所示:

代码语言:javascript
复制
Boto3/1.24.67 Python/3.9.13 Botocore/1.27.67 myapp/1.2.3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44034642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档