我们将了解在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 如果你遇到错误消息,即为不执行删除操作。
相关主题 |