AWS的IAM授权管理S3存储桶
AWS的IAM授权管理S3存储桶
配置 AWS CLI
通过 AWS Command Line Interface使用高级别 s3 命令
Amazon S3:允许对特定的 S3 存储桶进行读写访问
主机环境:
AWS CLI环境,aws cli环境搭建,略
安装 AWS Command Line Interface
使用场景
创建S3桶作为静态网站,使用Jenkins创建发布流程,需要将最新的静态网站同步到S3,使用脚本同步
在 Amazon S3 上托管静态网站
授权过程一
AWS有自带的策略生成器
策略生成器
按理说,我们选择了所有操作即获得了所有权限
我们指定一个存储桶
于是我们生成了如下的策略申明
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1509420933000",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::play.example.com"
]
}
]
}
然后我将这个策略附加到用户A上面,用户A来上传更新S3存储桶play.example.com的内容
export AWS_ACCESS_KEY_ID=***
export AWS_SECRET_ACCESS_KEY=***
export AWS_DEFAULT_REGION=us-east-1
export AWS_DEFAULT_OUTPUT=json
aws s3 sync . s3://play.example.com/ –delete –exclude ‘.git/*’
我满怀期待它能够工作,结果却失败了,报”Access Deny”
授权过程二
一定是哪里出了问题,我想了想,改正如下
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1509420933000",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::play.example.com/*"
]
}
]
}
与上面不同的是,我在资源的后面加了”/*”
我觉得它一定能工作,但结果是一样的,报”Access Deny”
看来我不得不求助于官方文档了
授权过程三
我试着从这寻找答案 IAM 故障排除策略
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::play.example.com",
"arn:aws:s3:::play.example.com/*"
]
}
}
很明显,这一次,我把一和二结合起来了
就这样我获得了成功
进一步细化
为了更精细化的控制权限,我在策略生成器的选项里面找到了我所需要的全新,更改了申明
最终,我创建的策略如下
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::play.example.com"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::play.example.com/*"
]
}
]
}
这个看起来跟AWS的文档说明是差不多的
允许对特定的 S3 存储桶进行读写访问
一个桶就是Bucket,桶里面的统称为Object,这样我们分别对Bucket和Object授权
终于可以执行我的同步命令了,跟linux rsync同步命令非常的相似
aws s3 sync . s3://play.example.com/ –delete –exclude ‘.git/*’