如果您在使用AWS CloudFormation创建S3存储桶时遇到凭证输出和CORS不起作用的问题,可以尝试以下解决方法:
"Resources": {
"S3Bucket": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketName": "your-bucket-name",
"CorsConfiguration": {
"CorsRules": [
{
"AllowedOrigins": ["*"],
"AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
"AllowedHeaders": ["*"]
}
]
}
}
}
}
注意替换your-bucket-name
为您自己的存储桶名称。
"Outputs": {
"BucketArn": {
"Description": "S3 Bucket ARN",
"Value": {"Fn::GetAtt": ["S3Bucket", "Arn"]}
},
"BucketName": {
"Description": "S3 Bucket Name",
"Value": {"Ref": "S3Bucket"}
}
}
这将输出S3存储桶的ARN和名称供其他资源使用。
"Resources": {
"S3Bucket": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketName": "your-bucket-name",
"CorsConfiguration": {
"CorsRules": [
{
"AllowedOrigins": ["*"],
"AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
"AllowedHeaders": ["*"]
}
]
},
"Tags": [
{
"Key": "Name",
"Value": "your-bucket-name"
}
]
},
"DeletionPolicy": "Retain",
"UpdateReplacePolicy": "Retain"
},
"BucketPolicy": {
"Type": "AWS::S3::BucketPolicy",
"Properties": {
"Bucket": {"Ref": "S3Bucket"},
"PolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": {"Fn::Join": ["", ["arn:aws:s3:::", {"Ref": "S3Bucket"}, "/*"]]}
}
]
}
}
},
"BucketPolicyToLambdaRole": {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyName": "BucketPolicy",
"PolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": {"Fn::Join": ["", ["arn:aws:s3:::", {"Ref": "S3Bucket"}, "/*"]]}
}
]
},
"Roles": [{"Ref": "LambdaRole"}]
}
},
"LambdaRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": ["lambda.amazonaws.com"]
},
"Action": ["sts:AssumeRole"]
}
]
},
"Path": "/",
"Policies": [
{
"PolicyName": "S3Access",
"PolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": {"Fn::Join": ["", ["arn:aws:s3:::", {"Ref": "S3Bucket"}, "/*"]]}
}
]
}
}
]
}
}
}
这些代码示例显示了如何正确配置S3存储桶的CORS规则、标签、策略和IAM角色。
请注意,这只是一个示例,您需要根据自己的需求
上一篇:AWS CloudFormation:使用参数为CustomerGateway分配IP地址
下一篇:AWS CloudFormation:使用{{resolve}}进行嵌套子模板和动态引用会导致错误,并且无法执行resolve以从参数存储获取值。