问题描述
我有以下有效的存储桶策略,但在我看来逻辑是相反的。好像 '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
解决方法
所以逻辑不正确。条件中的“匹配器”被并在一起。所以这会让任何东西都可以访问。 :-) 啊。