代码之家  ›  专栏  ›  技术社区  ›  RuS

在bucket级别策略中授予s3用户访问权限

  •  -1
  • RuS  · 技术社区  · 3 年前

    我有一个名为“bucket”的bucket和名为“user1”的IAM用户的minio

    我将尝试使用bucket级别策略授予对此bucket的访问权限

    client = boto3.client('s3', endpoint_url='localhost:9000')
    
    client.put_bucket_policy(Bucket=bucket_name, Policy=bucket_policy)
    
    {
         'Version': '2012-10-17',
         'Statement': [
             {
             "Sid": "1",
             "Effect": "Allow",
             "Principal": "*",
             "Condition": {
                 "StringLike": {
                     "arn:aws:iam": [
                         "arn:aws:iam:::user1",
                     ]
                 }
             },
             "Action": "s3:*",
             "Resource": [
                 "arn:aws:s3:::bucket",
                 "arn:aws:s3:::bucket/*"
             ]
            }
         ]
    }
    

    但我犯了这样的错误

    ClientError: An error occurred (MalformedPolicy) when calling the PutBucketPolicy operation: invalid condition key 'arn:aws:iam'

    0 回复  |  直到 3 年前
        1
  •  1
  •   John Rotenstein    3 年前

    不要使用 Condition 。请使用:

    {
         'Version': '2012-10-17',
         'Statement': [
             {
             "Effect": "Allow",
             "Principal": "arn:aws:iam::ACCOUNT:user/USERNAME",
             "Action": "s3:*",
             "Resource": [
                 "arn:aws:s3:::bucket",
                 "arn:aws:s3:::bucket/*"
             ]
            }
         ]
    }
    

    但是,最好 将权限放在IAM用户上 而不是使用Bucket策略。

    此外,它是 非常危险 授予 s3:* 对用户的权限。这意味着他们可以从bucket中删除对象,公开bucket(不利于机密信息),甚至删除bucket。最好缩小授予的权限范围。

    在boto3中,您可以使用 put_user_policy() - Boto3 documentation :

    添加或更新嵌入指定IAM用户中的内联策略文档。

    get_user_policy() - Boto3 documentation :

    检索嵌入在指定IAM用户中的指定内联策略文档。

    推荐文章