У нас есть ряд сервисов AWS в регионе eu-west-1. К сожалению, похоже, что многие наши разработчики и другие сотрудники, которым необходимо создавать временные ресурсы, забывают об этом аспекте AWS и не выбирают этот регион перед запуском экземпляров EC2, созданием сегментов S3 и т. Д. В результате они часто оказываются в регион us-east-1, поскольку он всегда используется AWS по умолчанию.
Есть ли способ через IAM (или какой-то другой способ) ограничить учетные записи пользователей только запуском / созданием вещей в определенном регионе?
К сожалению, вы не можете сделать это глобально. Однако для каждого продукта AWS, который его поддерживает, обычно жестяная банка ограничить доступ к определенному региону.
Например, для EC2 вы можете сделать следующее:
{
"Statement":[{
"Effect":"allow",
"Action":"RunInstances",
"Resource":"*",
"Condition":{
"StringEquals":{
"ec2:Region":"us-west-1"
}
}
}
]
}
Конечно, вам нужно будет выпустить deny
правила также там, где это необходимо.
Вот документацию по вышеизложенному.
Используйте что-то вроде этого. В этом примере доступ ограничивается двумя регионами AWS. При необходимости измените.
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": [
"eu-central-1",
"eu-west-1"
]
}
}
}]
}
С 25 апреля 2018 года у AWS есть глобальный ресурс aws: RequestedRegion, который можно использовать для ограничения регионов, в которые пользователь может отправлять запросы. Это не зависит от того, является ли служба региональной или нет, поэтому вы можете применить ее ко всем службам.
К сожалению, вы не можете использовать это в политике управления службами организации, чтобы применить ее к учетной записи в глобальном масштабе, и вы должны прикрепить политику к каждому отдельному участнику и проверить, что это так, если вы хотите заблокировать учетную запись для определенных регионов.
Принятый ответ на эту тему дал Syntax Error on Policy
. Ниже работал у меня:
{
"Statement": [
{
"Sid": "Stmt1375943389569",
"Action": "ec2:*",
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:Region": "eu-central-1"
}
}
}
]
}
Если вы запрашиваете только действия EC2, то да, вы можете ограничить его, как указано в других ответах. Если это другие услуги, я не уверен, что вы можете это сделать ... например, AWS Lambda, похоже, не имеет lambda:region
вы можете добавить к условию.
Из Часто задаваемые вопросы по AWS IAM:
В: Можно ли определять пользователей по регионам? Не изначально. Пользователи - это глобальные сущности, такие как Аккаунт AWS сегодня. При определении полномочий пользователя указывать регион не требуется. пользователи могут использовать сервисы AWS в любом географическом регионе.
Я обнаружил, что это работает лучше (позволяет запускать / останавливать / завершать / и т. Д.), Чтобы предоставить пользователю полный доступ EC2 только к одному региону - каждый другой регион показывает ошибку во время любой попытки доступа.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "*",
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:Region": "us-east-1"
}
}
}
]
}
Это работает для меня, я попытался создать политику с json, указанным как принятый ответ, но у меня это не работает.
{
"Version": "2012-10-17",
"Statement": [{
"Action": "ec2:*",
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:Region": [
"us-east-1"
]
}
}
}]
}
Это текущее решение - с использованием "eu-west-1":
{
"Version": "2012-10-17",
"Statement": [
{
"Effect" : "Allow",
"Action" : "*",
"Resource" : "*",
"Condition":
{
"StringEquals": {
"aws:RequestedRegion": "eu-west-1"
}
}
}
]
}