Рубрики
Uncategorized

Идентификация против ресурсов AWS IAM политики

Идентификация и управление доступом (IAM) — это глобальная служба AWS, посвященная управлению доступом к AWS … Теги от AWS, DEVOPS.

Управление идентификацией и доступом (IAM) — это глобальная служба AWS, посвященная управлению доступом к услугам AWS и ресурсам. Это краеугольный камень AWS, но это также очень мощно, и есть много способов достижения той же цели. В этом посте я собираюсь посмотреть на два подхода к обеспечению доступа к ресурсам AWS. Давайте сначала начнем, глядя на некоторые фундаментальные концепции IAM.

Ключ IAM концепции

IAM Пользователь Является ли объектом, которое вы создаете в AWS, чтобы представлять человека или приложения, которое использует его для взаимодействия с AWS. Пользователи могут быть предоставлены доступ к консоли AWS или AWS APIS. Учитывая соответствующие Разрешения Пользователи могут вызывать действия на ресурсах инфраструктуры AWS. Пользователи также могут быть назначены Группы — коллекция пользователей IAM. Группы позволяют указать разрешения для нескольких пользователей, что может облегчить управление разрешениями для тех пользователей. Пользователи IAM могут быть назначены несколькими разными группами (один пользователь может быть назначен многим группам, но сама группа не может быть назначена другой группе).

Я Разрешения назначены через политики Отказ Существует принцип, который гласит, что то, что явно не допускается, запрещен по умолчанию, и это хорошая идея, чтобы предотвратить случайно превышать привилегию.

IAM роль Является ли идентификация IAM, которая имеет определенные разрешения. Это похоже на пользователя IAM, в том, что это идентичность AWS с политиками разрешений, которые определяют то, что может сделать идентичность и не может сделать в AWS. Однако вместо того, чтобы быть однозначно связанным с одним человеком, роль предназначена, чтобы быть предпочтительной любой, кому это нужно.

А политика это набор разрешений, написанных в формате JSON. Есть шесть типов политик, но этот пост будет сосредоточен на двух из них; политики на основе личности и политики на основе ресурсов.

Политики на основе личности

Политики на основе личности дают разрешения на личность. Политика, основанная на удостоверении личности, диктует ли идентичность, к которой прикреплена эта политика, разрешена вызовам API для конкретных ресурсов AWS или нет. Например, следующая политика позволит пользователю вызывать любой запрос GET или списка на любом ресурсе S3.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": "*"
        }
    ]
}

Ключевые элементы определения политики:

  • Эффект — разрешать ли или отрицать действия (ы)
  • Действие — API (ы) Политика, применяемая для запросов на ресурсы («*» означает подстановочный знак)
  • Ресурс — идентификатор ресурсов (ы), к которым применяется политика. Ресурсы идентифицируются именем ресурса Amazon (ARN) или подстановочным знаком.

Политика на основе ресурсов

Политики на основе ресурсов предоставляют разрешения к директору, которое указано в политике. Они указывают, кто или что может вызывать API из ресурса, к которому прилагается политика.

Например, Политика ниже указывает, что события S3 на ведре ARN: AWS: S3::: Test-Bucket-Cezary Может быть обработан лямбда (Lambda-S3) в учетной записи 1234567890 в регионе ЕС-Запад-1.

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "s3-event-cezary_for_lambda-s3",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:eu-west-1:1234567890:function:lambda-s3",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "1234567890:"
        },
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:s3:::test-bucket-cezary"
        }
      }
    }
  ]
}

В этом случае принципал является «абонером», который может вызывать конкретное действие на конкретный ресурс ARN: AWS: S3::: Test-Bucket-Cezary Отказ

Теперь, когда мы охватывали эти два типов политиков, давайте создадим некоторые демо-политики и исследовать типы вопросов, которые могут привести к смешиванию двух типов политиков и настроить слишком ограничительный или слишком разрешительный доступ.

Демо-окружающая среда

Предполагая, что у вас есть настройка учетной записи AWS, создайте два пользователя IAM:

  • «Пользователь администратора» со следующими политиками
    • АдминистраторCCess — эта политика позволяет почти неограниченному доступу ко всем услугам. Эта политика на основе личности доступна по умолчанию. Это создано и управляется AWS. Это также одна из так называемых AWS управляемых политик.
  • «Ограниченный пользователь» со следующими политиками
    • IamreadonLyAccess — доступ только для чтения к консоли IAM
    • Listallmybuckets (разрешение) — список всех ведер S3 ( но не их контент ). Вам нужно создать политику личности, чтобы установить разрешение внутри него.
    • Awscloudshellfullaccess — предоставляет полностью доступный доступ к Cloudshell в консоли AWS

Политика для Админ Пользователь:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}

Политика для Ограниченный пользователь является:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "iam:GenerateCredentialReport",
            "iam:GenerateServiceLastAccessedDetails",
            "iam:Get*",
            "iam:List*",
            "iam:SimulateCustomPolicy",
            "iam:SimulatePrincipalPolicy"
         ],
         "Resource":"*"
      }
   ]
}{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"VisualEditor0",
         "Effect":"Allow",
         "Action":"s3:ListAllMyBuckets",
         "Resource":"*"
      }
   ]
}{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Action":[
            "cloudshell:*"
         ],
         "Effect":"Allow",
         "Resource":"*"
      }
   ]
}

Теперь давайте создадим ведро через нашего пользователя администратора и проверить эти две политики. Вы можете сделать это через командную строку, или если вы не хотите устанавливать Интерфейс командной строки AWS (CLI) , через Cloudshell Отказ

# Create a bucket
aws s3api create-bucket --bucket YOUR_GLOBALLY_UNIQUE_NAME
--region YOUR_CHOSEN_REGION
--create-bucket-configuration LocationConstraint=YOUR_CHOSEN_REGION

# Response
{"Location": "http://YOUR_GLOBALLY_UNIQUE_NAME.s3.amazonaws.com/"}    
# Prohibit public access
aws s3api put-public-access-block --bucket YOUR_GLOBALLY_UNIQUE_NAME
--public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
# Put one object into a bucket (optional)
aws s3api put-object --bucket YOUR_GLOBALLY_UNIQUE_NAME
--key YOUR_FILE --body YOUR_FILE
# List your buckets (optional)
aws s3api list-buckets
#Response
{  "Buckets": [
        {
            "Name": "YOUR_GLOBALLY_UNIQUE_NAME",
            "CreationDate": "2021-06-12T11:12:55+00:00"
        },...

Проблемы политики и как их избежать

Создав и настроил проверку ведра с каждой консоли, либо через вызов API, что эта политика ведра (политика на основе ресурсов) пуста.

AWS S3API Get-Bucket-Policy —bucket Your_globally_unique_name — отсутствие политики —output текст

Хорошо, теперь мы готовы перечислить содержание нашего ведра.

# As the admin user
aws s3 ls s3://YOUR_GLOBALLY_UNIQUE_NAME
# Response: 2021-06-15 15:13:33     612870 mountains.jpg
# As the restricted user
aws s3 ls s3://YOUR_GLOBALLY_UNIQUE_NAME
# Response: An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

Как видите, ограниченный пользователь не имеет разрешения на список объектов в ведре. Чтобы исправить это, вы можете использовать либо политики на основе личности или политики на основе ресурсов (или оба, но это было бы избыточным). Давайте пойдем вперед и создадим ресурсную политику. Для этого мы могли бы использовать консоль, но давайте использовать AWS Police Generator вместо.

Перейдите на консоль AWS и выберите ведро, которое вы создали ранее. Затем перейдите к разрешениям, выберите «Ведро», а затем редактируйте и политики генератора. После заполнения шаблона нажмите Добавить оператор, а затем генерируйте политику.

В этом случае я выбрал политику ведра, потому что я знаю, что добавлю больше пользователей в будущем.

Скопируйте и вставьте политику в настройки ведра

{
  "Id": "Policy1624125393305",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1624125391986",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::YOUR_GLOBALLY_UNIQUE_NAME",
      "Principal": {
        "AWS": [
          "arn:aws:iam::ACCOUNT_ID:user/read-only-console-user"
        ]
      }
    }
  ]
}

Иногда вам нужно немного ждать для политики, чтобы ударить. Теперь вы должны иметь возможность перечислить содержимое вашего ведра.

aws s3 ls s3://YOUR_GLOBALLY_UNIQUE_NAME
#Response: 2021-06-15 15:13:33     612870 mountains.jpg

Что произойдет, когда мы четко чего-то отрицаем? Помните, что Я очень строгий. Явные отрицания — это реальный, правдивый, строгий отказ, и не имеет значения, разрешено ли вы что-то раньше. Когда вы говорите, что хотите заблокировать его, он заблокирован.

Самый простой способ проверить это — добавить политику на основе ресурсов на наше ведро.

{
    "Version": "2012-10-17",
    "Id": "Policy1623531542448",
    "Statement": [
        {
            "Sid": "Stmt1623531541369",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::YOUR_GLOBALLY_UNIQUE_NAME"
        }
    ]
}

Давайте проверим это

#IAM Admin bucket perspective
aws s3 ls s3://YOUR_GLOBALLY_UNIQUE_NAME
#Response: An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

Помните, что вы всегда можете имитировать ваши звонки в консоли IAM, как на этом скриншоте. Это безопаснее, особенно в производственных условиях. Этот симулятор учитывает уже установленные на основе идентификационных ресурсов политики. Вот почему я использовал уже созданное ведро, а не поддельный.

Тем не менее, я думаю, что тестирование его вручную гораздо веселее, хотя это гораздо более опасно. Ты не думаешь?

Если вы удивляетесь, вы можете кирпичать ваш доступ к ведрю даже для IAM Admin, прилагая эту политику.

Предупреждение: не попробуйте это дома!

{
    "Version": "2012-10-17",
    "Id": "Policy1623526933543",
    "Statement": [
        {
            "Sid": "Stmt1623526931104",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "*",
            "Resource": "arn:aws:s3:::YOUR_GLOBALLY_UNIQUE_NAME"
        }
    ]
}

Тогда вам нужно будет переключиться на корневую учетную запись и удалить эту политику.

Окончательные слова

Политики могут быть довольно сложными, но они также очень мощные. Я надеюсь, что этот пост служил полезным введением в некоторые понятия. Для получения дополнительной информации обязательно проверить AWS Identity и Документация по управлению доступом . Это действительно хорошо И это помогло мне много раз. Развлекайся!

Оригинал: «https://dev.to/sonalake/identity-vs-resource-based-aws-iam-policies-3e85»