我正在尝试定义一个禁用公共访问的 S3 存储桶,但我的其他定义的 Lambda 可以访问它。我不断收到有关“策略中的主体无效”的部署错误。
这是我的资源定义...
ResultsBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref ResultsBucket
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Deny
Action: s3:GetObject
Resource: !Sub '${ResultsBucket.Arn}/*'
Principal: '*'
- Effect: Allow
Action: s3:GetObject
Resource: !Sub '${ResultsBucket.Arn}/*'
Principal:
AWS:
- !GetAtt ExampleFunction.Role
- !GetAtt AnotherExampleFunction.Role
我也尝试过...
- !Sub 'arn:aws:iam::${AWS::AccountId}:role/${ExampleFunction.Arn}'
- !Sub 'arn:aws:iam::${AWS::AccountId}:role/${AnotherExampleFunction.Arn}'
还有
- !Sub 'arn:aws:iam::${AWS::AccountId}:role/${ExampleFunction.Arn}'
- !Sub 'arn:aws:iam::${AWS::AccountId}:role/${AnotherExampleFunction.Arn}'
这可能会有所帮助 - 拒绝访问除特定 lambda 之外的 S3 存储桶
基本上在您的 Deny 声明中使用“NotPrincipal”。
例如。
{
"Sid": "denystatement",
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::112233445566:role/lambda_role"
]
}
}
** S3 存储桶策略不需要资源密钥 - 它们附加到特定存储桶。