背景
- 我有几个水桶,每个都有一个"开发"one_answers"生产"文件夹。
- 我有两个帐户
accountname-dev
和accountname-prod
目标
- 我希望
account-dev
在BucketName/Development上具有完整的访问(所有操作) - 我希望
account-prod
在BucketName/Production
上具有完整的访问(所有操作)
问题
每当我使用策略生成器时,看起来我以某种方式做错了。添加标准管理策略允许访问该文档的罚款,但我的自定义策略却不能。
我使用亚马逊的IAM策略创建屏幕添加了特定帐户的策略。
我要使用的策略是:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "[Redacted]",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Condition": {
"StringLike": {
"s3:prefix": "DEVELOPMENT/*"
}
},
"Resource": [
"arn:aws:s3:::RedactedBucketName"
]
}
]
}
问题
- 上面的策略有什么问题
- 这是我唯一需要添加的政策吗?还是我需要先在存储桶级别添加某种访问功能?
- 即使亚马逊的政策生成屏幕没有包含校长的完整ARN,还是最好的做法是什么?
我可以这样使它起作用:
仅分配IAM用户策略(不需要S3存储措施策略)。
检查以下用户策略。我为用户account-dev
创建,这意味着您必须将此IAM策略应用于account-dev
用户。
{
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "AllowRootLevelListingOfDevelopmentBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::development-bucket-name"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
""
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::development-bucket-name"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"DEVELOPMENT/*"
]
}
}
},
{
"Sid": "AllowUserToReadWriteObjectData",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::development-bucket-name/DEVELOPMENT/*"
]
}
]
}
AllowGroupToSeeBucketListInTheConsole
和AllowRootLevelListingOfDevelopmentBucket
是用户从S3控制台工作所需的。如果您不希望用户从S3控制台工作并希望他仅使用API工作,那么您可以省略这两个节。
类似地,您为account-prod
创建了另一个用户策略并将其分配给该用户。