我们将了解在Amazon S3中使用用户权限,将在具有特定权限的AWS账户上创建一个存储bucket和AWS Identity and Access Management用户,我的用例是让IAM用户只能将文件上传到AWS S3存储bucket,而无需删除对象。
创建一个Test bucket
使用带s3选项的aws命令创建存储bucket:
$ aws s3 mb s3://backupsonly
make_bucket: backupsonly
创建IAM用户
以下create-user命令在当前帐户中创建名为uploadonly的IAM用户:
$ aws iam create-user --user-name uploadonly
输出:
{
"User": {
"Path": "/",
"UserName": "uploadonly",
"UserId": "AIDAJII2GMOH3OAFWCIGK",
"Arn": "arn:aws:iam::104530196855:user/uploadonly",
"CreateDate": "2019-02-21T10:51:23.600Z"
}
}
创建AWS用户和策略
接下来,我们需要创建一个与创建的AWS用户帐户关联的策略。
这是我们将用于策略的json文件:
$ cat aws-s3-policy.json
{
"Version": "2019-02-21",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*",
"s3:Put*"
],
"Resource": "*"
}
]
}
我们指定了以下:
列出所有bucket内容。
获取S3上所有存储bucket的列表。
将文件上传到S3 buckets。
以下命令创建名为upload-only-policy的用户管理策略:
$ aws iam create-policy --policy-name upload-only-policy \
--policy-document file://aws-s3-policy.json
你应该得到如下输出:
{
"Policy": {
"PolicyName": "upload-only-policy",
"PolicyId": "ANPAZYBH8BTU6NFCTTR46",
"Arn": "arn:aws:iam::104530196855:policy/upload-only-policy",
"Path": "/",
"DefaultVersionId": "v1",
"AttachmentCount": 0,
"IsAttachable": true,
"CreateDate": "2019-02-21T10:58:13.013Z",
"UpdateDate": "2019-02-21T10:58:13.013Z"
}
}
使用的策略是当前文件夹中的JSON文档,该文档授予对所有Amazon S3 buckets的读/写访问权限。
还可以通过更改资源部分将其限制为特定存储bucket,例:
"Resource": [
"arn:aws:s3:::bucket-name/*"
]
或者到存储bucket内的特定文件夹:
"Resource": [
"arn:aws:s3:::bucket-name/folder1/*"
]
也可以从AWS IAM Web界面执行相同操作:
将AWS策略分配给IAM用户
以下attach-user-policy命令将名为upload-only-policy的AWS托管策略附加到名为uploadonly的IAM用户:
$ aws iam attach-user-policy --policy-arn \
arn:aws:iam::104530196855:policy/upload-only-policy --user-name uploadonly
此命令没有输出。
现在可以为要测试的IAM用户创建访问密钥:
$ aws iam create-access-key --user-name uploadonly
将秘密访问密钥存储在安全位置,如果丢失,则无法恢复,你必须创建新的访问密钥。
从UI转到IAM>用户>添加权限>直接附加现有策略。
配置AWS CLI并测试
$ sudo pip install awscli
$ aws configure
提供:AWS访问密钥ID及AWS秘密访问密钥。
测试文件上传:
$ aws s3 cp test-demo.yml s3://backupsonly/
upload: ./test-demo.yml to s3://backupsonly/test-demo.yml
尝试删除:
$ aws s3 rm s3://backupsonly/test-demo.yml
你应该收到一条错误消息,如下:
delete failed: s3://backupsonly/test-demo.yml An error occurred (AccessDenied)
when calling the DeleteObject operation: Access Denied
如果你遇到错误消息,即为不执行删除操作。
相关主题