Получить имя роли IAM с помощью идентификатора роли IAM - PullRequest
0 голосов
/ 28 февраля 2020

Все AWS Роли IAM имеют связанные имя роли и идентификатор роли. Идентификатор роли обычно не виден, потому что консоль AWS отображает только имя роли. В сообщении JSON события S3 есть значение PrincipalID , содержащее идентификатор роли роли, которая использовалась для выполнения действия S3, например, "principalId":"AWS:AROAKJDKSDKF93HSA:123456789.

From этот документ мы видим,

Каждый объект IAM (пользователь, группа или роль) имеет определенную переменную aws: userid. Эта переменная понадобится вам для использования в политике сегмента, чтобы указать роль или пользователя как исключение в условном элементе. aws: userId предполагаемой роли определяется как UNIQUE-ROLE-ID: ROLE-SESSION-NAME (например, AROAEXAMPLEID: userdefinedsessionname).

Итак, мы знаем, что PrincipalId в S3 Сообщение о событии - это идентификатор роли для роли IAM. Как я могу использовать этот Role ID, чтобы получить Role Name? Я искал в библиотеках IAM и STS, но не вижу API, который позволял бы мне передавать идентификатор роли и получать имя роли. STS GetCallerIdentity не помогает, а IAM GetRole принимает только имя роли в качестве ввода.

Любая помощь будет принята с благодарностью. Я просто потребляю S3 Events , считываю значение PrincipalID из сообщения S3 Event json, извлекаю идентификатор роли IAM из PrincipalID, и мне нужен способ получить IAM Имя роли с использованием идентификатора роли IAM.

1 Ответ

1 голос
/ 28 февраля 2020

Например, используя python, вы можете использовать list_roles.
В результате вы получите идентификатор роли для каждой роли. Просто l oop it и ищите RoleId, который вы хотите.

{
    'Roles': [
        {
            'Path': 'string',
            'RoleName': 'string',
            'RoleId': 'string',
            'Arn': 'string',
            'CreateDate': datetime(2015, 1, 1),
            'AssumeRolePolicyDocument': 'string',
            'Description': 'string',
            'MaxSessionDuration': 123,
            'PermissionsBoundary': {
                'PermissionsBoundaryType': 'PermissionsBoundaryPolicy',
                'PermissionsBoundaryArn': 'string'
            },
            'Tags': [
                {
                    'Key': 'string',
                    'Value': 'string'
                },
            ],
            'RoleLastUsed': {
                'LastUsedDate': datetime(2015, 1, 1),
                'Region': 'string'
            }
        },
    ],
    'IsTruncated': True|False,
    'Marker': 'string'
}

RoleId (string)
Стабильная и уникальная строка, идентифицирующая роль. Для получения дополнительной информации об идентификаторах см. Идентификаторы IAM в Руководстве пользователя IAM.

Ссылка: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iam.html#IAM .Client.list_roles

Также я рекомендую вам используйте Paginator.

Некоторые операции AWS возвращают результаты, которые являются неполными и требуют последующих запросов для получения всего набора результатов. Процесс отправки последующих запросов на продолжение, если предыдущий запрос прерван, называется нумерацией страниц

Ссылка: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html

...