为什么在未指定配置文件时,具有特定用户的 AWS Bucket Policy NotPrincipal 不适用于 aws 客户端?

Why AWS Bucket Policy NotPrincipal with specific user doesn't work with aws client when no profile is specified?

我有这个 AWS S3 存储桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
           "Sid": "OnlyS3AdminCanPerformOperationPolicy",
           "Effect": "Deny",
           "NotPrincipal": {
               "AWS": "arn:aws:iam::<account-id>:user/s3-admin"
           },
           "Action": [
               "s3:*"
           ],
           "Resource": [
               "arn:aws:s3:::my-bucket-name",
               "arn:aws:s3:::my-bucket-name/*"
           ]
       }
   ]
}

旁注:IAM s3-admin 用户附加了 AdministratorAccess 策略。

起初我认为存储桶策略不起作用。可能是我测试操作方式的问题。

aws s3 rm s3://my-bucket-name/file.csv 

Caused:
delete failed: s3://test-cb-delete/buckets.csv An error occurred (AccessDenied)

但如果使用 --profile 默认值,我会按照

aws s3 --profile default rm s3://my-bucket-name/file.csv 

成功了。

我已验证并且只为 aws 客户端配置了一组凭据。此外,即使我不使用 --profile 默认参数,我也能够列出存储桶的内容。

为什么 aws 客户端会这样?

查看 credential precedence provider chain 并使用它来确定您作为身份验证的两个凭据的不同之处。

STS 有一个帮助 API 告诉你你是谁。它类似于类似 UNIX 的命令 whoami,但 AWS Principals 除外。 要查看哪个凭据,请执行以下操作:

aws sts get-caller-identity
aws sts --profile default get-caller-identity