Достаточно плохо, что некоторые чувствительные к регистру языки допускают такие вещи, как:
class New;
class Something
{
New makeNew()
{
return new New();
}
}
Но почему бы вам когда-нибудь захотелось написать строку кода следующим образом:
class new;
class Something
{
bool if;
new makeNew()
{
return if ? new new() : null;
}
}
Просто взгляните на подсветку синтаксиса. Даже он запутывается!
Я нашел решение, которое, кажется, работает. Я проверил его в симуляторе политики, и он также работает правильно в реальной среде. Следующая политика работает:
{
"Version": "2012-10-17",
"Id": "Policy-S3-Bucket-myBucket",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:username": ["user1", "user2"]
}
}
},
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::myBucket"],
"Condition": {
"StringEquals": {
"aws:sourceVpc": "vpc-01c9d66c12345"
}
}
},
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::myBucket"],
"Condition": {
"StringEquals": {
"aws:username": ["user1", "user2"]
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": ["arn:aws:s3:::myBucket/*"],
"Condition": {
"StringEquals": {
"aws:sourceVpc": "vpc-01c9d66c12345"
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": ["arn:aws:s3:::myBucket/*"],
"Condition": {
"StringEquals": {
"aws:username": ["user1", "user2"]
}
}
}
]
}
Политика требует, чтобы либо строка sourceVpc ИЛИ имя пользователя было таким, как указано в условии.
По общему признанию, политика многословна, и существует значительное количество тиражирования. Если у кого-то есть идея решить эту проблему более эффективно, я весь в ушах.