Я нашел решение, которое, кажется, работает. Я проверил его в симуляторе политики, и он также работает правильно в реальной среде. Следующая политика работает:
{
"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 ИЛИ имя пользователя было таким, как указано в условии.
По общему признанию, политика многословна, и существует значительное количество тиражирования. Если у кого-то есть идея решить эту проблему более эффективно, я весь в ушах.
Другая вещь, которую я сделал в прошлом, является переносом область формы в Панели и установила атрибут DefaultButton на кнопку отправки, которую Вы имеете. Это эффективно отображает клавишу Enter на представление, пока у Вас есть элемент формы в фокусе в области панели.
Просто создайте ввод текста в скрытом отделении на странице. Это обойдет ошибку IE.
Отделение в качестве примера:
<!-- Fix for IE bug (One text input and submit, disables submit on pressing "Enter") -->
<div style="display:none">
<input type="text" name="hiddenText"/>
</div>
// Use the following Javascript in your HTML view
// put it somewhere between <head> and </head>
<script language="JavaScript" type="text/javascript"><!--
function KeyDownHandler(btn)
{
if (event.keyCode == 13)
{
event.returnValue=false;
event.cancel = true;
btn.click();
}
}
// -->
</script>
// Put this in your TextBox(es) aka inside <asp:textbox ... >
onkeydown="KeyDownHandler(ButtonID)"
Это использует ПОЛУЧЕНИЕ вместо POST? URL слишком долго? Я видел это...
В основном форме нужна или кнопка, входной тип = "отправляют" или входной тип = "изображение", чтобы включить встроенному поведению утверждать, что форма на входит. Вам не должен быть нужен JavaScript для представления его.
При использовании display: none
IE не увидит кнопку и, следовательно, не сможет использовать ее для отправки формы. Вместо этого вы можете использовать z-index
и абсолютное позиционирование, чтобы скрыть его под другим элементом, например, со стилем:
position: absolute; внизу: -20 пикселей; слева: -20 пикселей; z-index: -1;
Теперь он по-прежнему будет там, доступен IE, но скрыт под другим элементом.