这些 AWS 存储桶策略权限如何工作?

问题描述

我有以下有效的存储桶策略,但在我看来逻辑是相反的。好像 'ArnLike' 应该是 'ArnNotLike'。

所需的意图是应该允许“条件”中列出的用户 ID 和角色访问存储桶。这就是正在发生的事情。所以它按预期工作,但由于“效果”设置为“拒绝”,我不明白为什么“ArnLike”不应该是“ArnNotLike”。

有人能帮我理解为什么吗?谢谢。

以下摘录来自我的 serverless.yml 配置文件

MyBucketPolicy:
  Type: 'AWS::S3::BucketPolicy'
  Properties:
    Bucket: !Ref MyBucket
    PolicyDocument:
      Statement:
        - Action:
            - 's3:*'
          Effect: Deny
          Resource: !Join
            - ''
            - - !GetAtt MyBucket.Arn
              - '/*'
          Principal: '*'
          Condition:
            StringNotLike:
              'aws:userId':
                - ${cf:external-stack.Role1}:*
                - ${cf:external-stack.Role2}:*
                - !Ref AWS::AccountId
            ArnLike:
              'aws:role':
                - arn:aws:iam::*:role/${self:service}-${self:custom.stage}-${self:custom.region}-lambdaRole
                - arn:aws:iam::*:role/another-lambda-${self:custom.stage}-${self:custom.region}-lambdaRole

解决方法

所以逻辑不正确。条件中的“匹配器”被并在一起。所以这会让任何东西都可以访问。 :-) 啊。