it-swarm.com.ru

Как получить канонический идентификатор пользователя для добавления разрешения S3

Я хочу добавить разрешение S3 для конкретного пользователя. Консоль AWS запрашивает у меня канонический идентификатор для пользователя . Я использовал команду CLI AWS aws iam list-users для получения списка пользователей, но поле «Канонический идентификатор» отсутствовало, а «Идентификатор пользователя» не распознается. , давая мне сообщение «Неверный идентификатор». Я попытался также с ARN, и это не сработало.

19
jigarzon

Есть два решения, которые вы можете использовать, чтобы предоставить этому пользователю доступ к корзине и контенту Amazon S3.

  1. Политики пользователя IAM

    {
      "Version": "2012-10-17",
      "Id": "9758b97b-6fe0-4ba3-b5bd-3d0fe8896a83",
      "Statement": [
       {
        "Sid": "AllowMyUser",
        "Effect": "Allow",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::YOUR bucket name /*"
       }
      ]
    }
    
  2. Bucket Policy

    {
      "Version": "2012-10-17",
      "Id": "9758b97b-6fe0-4ba3-b5bd-3d0fe8896a83",
      "Statement": [{
        "Sid": "AllowMyUser",
        "Effect": "Allow",
        "Principal": {
            "AWS": "YOUR IAM User AWSId"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::YOUR bucket name /*"
     }]
    }
    

AWS CLI iam user Возвращает UserId, который в документации API states можно использовать в S3 

Например, вы можете создать пользователя IAM с именем David. Ваша компания использует Amazon S3 и имеет ведро с папками для каждого сотрудника; В корзине есть политика на основе ресурсов (политика корзины), которая позволяет пользователям получать доступ только к своим собственным папкам в корзине. Предположим, что сотрудник по имени Дэвид покидает вашу компанию, а вы удаляете соответствующего пользователя IAM. Но позже запускается другой сотрудник по имени Дэвид, и вы создаете нового пользователя IAM по имени Дэвид. Если в политике корзины указан пользователь IAM с именем David, политика может в конечном итоге предоставить новому David доступ к информации в корзине Amazon S3, оставленной прежним David.

https://docs.aws.Amazon.com/IAM/latest/APIReference/API_User.html

9
strongjz

Чтобы предоставить разрешения пользователю IAM для корзины, вам необходимо создать политику корзины - это документ JSON. Параметр «Доступ к другим учетным записям AWS» в ACL предназначен для предоставления доступа к другим (полностью отдельным) корневым учетным записям AWS, а не для предоставления доступа пользователям IAM в рамках вашей собственной корневой учетной записи.

Создание/редактирование политики

Чтобы получить доступ к политике корзины, перейдите к корзине в веб-консоли S3. Там вы увидите вкладки Обзор/Свойства/Разрешения/Управление. В разделе «Разрешения» имеется подвкладка «Политика корзины». Внизу страницы Bucket Policy есть ссылка на «Policy Generator», который сгенерирует JSON для вас. (или прямая ссылка: http://awspolicygen.s3.amazonaws.com/policygen.html )

Идентификация пользователя IAM для назначения прав на

Чтобы определить пользователя IAM, которому вы хотите предоставить разрешения, вы будете использовать ARN (имя ресурса Amazon). Формат ARN для пользователей IAM выглядит следующим образом: «arn: aws: iam :: {Account-ID}: user/{Username}» (обратите внимание, что фигурные скобки не являются частью формата). Пример IAM ARN выглядит следующим образом: arn: aws: iam :: 100123456789: пользователь/Daniel

Чтобы получить числовой идентификатор учетной записи, войдите в систему как пользователь root, щелкните свое имя пользователя в верхнем правом углу страницы и выберите «Моя учетная запись» (что приведет вас к https: //console.aws.Amazon. com/billing/home? #/account ). Идентификатор учетной записи указан в разделе «Настройки учетной записи» в верхней части страницы.

Вставьте ARN этого пользователя в поле «Principal» генератора политики и выберите, какие действия нужно предоставить пользователю из выпадающего списка.

Указание, что предоставить разрешения на

Чтобы предоставить разрешения корзине или набору файлов (объектов) внутри корзины, вам нужно ввести ARN, который идентифицирует корзину, или некоторое подмножество объектов в корзине в поле «Имя ресурса Amazon» (например, если у меня был корзина с именем daniels-stuff и папка в этой корзине с именем images, к которой я хотел предоставить доступ, тогда я мог предоставить ARN, такой как arn: aws: s3 ::: daniels-stuff /изображений/*

Нажмите «Добавить заявление», когда введете необходимую информацию, а затем нажмите «Создать политику». Обратите внимание, что вы можете поместить несколько операторов (прав доступа) в одну политику.

Больше информации

Наконец, есть хороший учебник по политикам корзины s3 в https://brandonwamboldt.ca/understanding-s3-permissions-1662/ , который включает в себя несколько примеров политик.

Удачи (хотя я предполагаю, что вы, вероятно, уже решили свою проблему, другие могут найти это полезным).

13
Daniel Scott

Для получения канонического идентификатора одним из самых простых способов является использование CLI и выполнение команды aws s3api list-buckets. Вы получите идентификатор в выходной.

Существуют и другие способы получения канонического идентификатора, которые четко описаны в документации aws: https://docs.aws.Amazon.com/general/latest/gr/acct-identifiers.html

список документов AWS: https://docs.aws.Amazon.com/cli/latest/reference/s3api/list-buckets.html

3
Rathan

Канонический идентификатор пользователя легче всего найти, позвонив пользователю, чей идентификатор вы хотите найти, aws s3api list-buckets:

aws --profile PROD s3api list-buckets
{
    "Owner": {
        "DisplayName": "a-display-name",
        "ID": "a-64?-char-hex-string"  <<-- this HERE is the canonical user ID
    },
    "Buckets": [
        {
            "CreationDate": "2018-03-28T21:50:56.000Z",
            "Name": "bucket-1"
        },
        {
            "CreationDate": "2018-03-22T14:08:48.000Z",
            "Name": "bucket-2"
        }
    ]
}

С помощью этого идентификатора вы можете затем вызвать s3api для предоставления доступа - например, для предоставления доступа для чтения - вот так:

aws --profile OTHER s3api put-object-acl \
    --bucket bucket-3 \
    --key path/to/file \
    --grant-read id="the-64-char-hex"
3
Enda Farrell

1. Создайте новую политику, используя следующий JSON

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListAllMyBuckets"
          ],
          "Resource": "arn:aws:s3:::*"
      },
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket",
              "s3:GetBucketLocation"
          ],
          "Resource": "arn:aws:s3:::<your_bucket_name_here>"
      },
      {
          "Sid": "VisualEditor0",
          "Effect": "Allow",
          "Action": [
              "s3:PutObject",
              "s3:GetObject",
              "s3:ListBucket",
              "s3:DeleteObject",
              "s3:GetObjectVersion"
          ],
          "Resource": "arn:aws:s3:::<your_bucket_name_here>/*"
      }
  ]
}

** 2. Назначьте политику пользователю или группе пользователей

Заметка:

Я продолжал получать ошибки Access Denied (Status code: 403), потому что мне не хватало первых двух объектов в массиве JSON выше. Вы должны дать своему пользователю разрешение на:

  • Смотреть все ваши ведра
  • Перечислите конкретное ведро и получите его местоположение

прежде чем он вообще получит возможность выполнить какие-либо действия с содержимым корзины.

0
RVP

Вы также можете получить свой Canonical ID для своего пользователя IAM с помощью команды CLI:

Перечислите все ведра и свой iam Canonical ID:

aws s3api list-buckets

И если вы просто хотите получить свой Canonical ID:

aws s3api list-buckets | grep ID

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

0
Stryker

Убедитесь, что у вас есть * в конце строки, чтобы предоставить разрешения на все!

arn:aws:s3:::daniels-stuff/images/*
0
Rachael