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

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

Ответы

Ответ 1

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

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

Чтобы получить доступ к политике ведра, перейдите к ведру в веб-консоли S3. Там вы увидите вкладки Обзор/Свойства/Разрешения/Управление. В разделе "Разрешения" есть суб-вкладка "Политика ведра". В нижней части страницы политики Bucket есть ссылка на "Generator Policy", который будет генерировать 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 в поле "Принципал" генератора политик и выберите, какие действия предоставить пользователю из выпадающего списка.

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

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

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

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

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

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

Ответ 2

Есть два решения, которые вы можете использовать, чтобы предоставить этому пользователю доступ к корзине и контенту 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 можно использовать в S3

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

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

Ответ 3

Идентификатор пользователя canonical ID легче всего найти по вызову, так как пользователь, идентификатор которого вы хотите найти, 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"

Ответ 4

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

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

list-buckets aws docs: https://docs.aws.amazon.com/cli/latest/reference/s3api/list-buckets.html

Ответ 5

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 выше. Вы должны дать своему пользователю разрешение на:

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

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

Ответ 6

Как просмотреть Canonical ID в AWS.

В верхней части окна нажмите кнопку "Учетная запись пользователя". Нажмите Мои учетные данные безопасности. В консоли  Выберите Идентификаторы учетной записи. Пожалуйста, поделитесь своими учетными данными. Просмотр канонического идентификатора в AWS

Пала (VR.PL)

Ответ 7

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

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

Ответ 8

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

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

aws s3api list-buckets

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

aws s3api list-buckets | grep ID

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

Ответ 9

Чтобы найти идентификатор учетной записи Canonical, выполните следующие действия:

  1. Нажмите на свое имя пользователя, которое находится в верхней строке меню.
  2. Выпадающий появится. Выберите Мои учетные данные безопасности.
  3. Канонический идентификатор пользователя есть

Ответ 10

Существует еще один способ найти ваше каноническое имя, если вы не являетесь пользователем ROOT,

Вам нужно будет войти в систему с использованием CLI (используя ключ доступа и секретный ключ), после чего просто введите

Списки пользователей aws iam

и он покажет следующую информацию

{
    "Users": [
        {
            "UserName": "yoda",
            "PasswordLastUsed": "2018-02-24T17:47:15Z",
            "CreateDate": "2018-02-11T02:23:11Z",
            "UserId": "AIDASDY9WSX6QD",    <== Canonical Name
            "Path": "/",
            "Arn": "arn:aws:iam::7783412456453:user/yoda"
        }
    ]

Примечание. Идентификаторы пользователя и ARN были отредактированы :-)

Я надеюсь, это поможет

Нео