AWS IAM Роли и политики на простом английском языке?
Я работал с AWS PHP SDK и, похоже, получил все, кроме ролей и разрешений IAM.
Может кто-нибудь, пожалуйста, объясните мне самым простым образом, как работают роли IAM, и объясните следующие термины: StatementId
, Action
, ARN
и, самое главное Principal
простым английским?
Чтобы дать вам источник моего замешательства, вот проблема, с которой я недавно столкнулся. Я пытаюсь создать API-шлюз, в котором метод Resource запускает лямбда-функцию. Это не работало, пока я не вставил копию:
$lambdaClient->addPermission([
'FunctionName' => 'fn name',
'StatementId' => 'ManagerInvokeAccess',
'Action' => 'lambda:InvokeFunction',
'Principal' => 'apigateway.amazonaws.com',
]);
Но в каком-то другом потоке кто-то предложил использовать следующее для того же:
const permissions = {
FunctionName: target,
StatementId: 'api-gateway-execute',
Action: 'lambda:InvokeFunction',
Principal: 'apigateway.amazonaws.com',
SourceArn: 'arn:aws:execute-api:' + nconf.get('awsRegion') + ':' + nconf.get('awsAccountId') + ':' + nconf.get('apiGatewayId') + '/*'};
Почему первый не содержит информации об учетной записи, а второй - нет? Кроме того, есть еще один человек, который вставил что-то совершенно другое, чтобы заставить его работать на него. В последнем примере так много ключей (например, "Fn::Join"), что я даже не знаю, с чего начать и что он делает.
Как определить, где найти эти политики? Мы просто копируем и вставляем их откуда-то, если есть способ установить их. Если так, какие ключи всегда должны быть указаны.
Любая помощь будет оценена, потому что я сейчас совершенно сбит с толку.
3 ответа
Прежде всего, добро пожаловать в мир AWS!!! :-D
Позвольте мне попытаться объяснить ваши сомнения по поводу того, как понимать IAM(в целом), по аналогии.
Подумайте, что существует организация под названием ORG1.
Deparments of ORG1:
HR-отдел, Test-Dept, DEV-Dept
Employees of ORG1:
EMP1, EMP2, EMP3... EMP10
Members of HR dept:
HR1, HR2, HR3
Теперь я хочу создать для отдела кадров роль, позволяющую им нанимать / увольнять сотрудника. Политика будет выглядеть следующим образом:
{
"Version": "2012-10-17", // This is version of the template. Don't change this. This is NOT a date field for your use.
"Statement": [
{
"Sid": "SOME-RANDOM-ID-WITH-NUMBER-1P1PP43EZUVRM", // This is used as ID in some cases to identify different statments
"Principal": HR-dept, // the dept who is allowed to assume this role or the one who is allowed to invoke this role
"Effect": "Allow", // has only 2 values: ALLOW/DENY. Either You want to provided the below privileges or you want to striped off these privileges.
"Action": [
"hire",
"suspend",
], // these are privileges which are granted
"Resource": "EMP1", // the entity on whom do you want to apply those actions on. In this case employee EMP1.
"Condition": {
"ArnLike": {
"AWS:SourceArn": "HR*" // You want anyone from HR-dept whose id starts with HR to be able to execute the action.ie HR1,HR2 or HR3 .
}
}
}
]
}
Теперь попытайтесь понять приведенный ниже код с той же точки зрения (внутренне этот код создает шаблон, аналогичный приведенному выше):
const permissions = {
FunctionName: target,
StatementId: 'api-gateway-execute', // This is just an ID. Dont sweat about it.
Principal: 'apigateway.amazonaws.com', //which entity group the invoker belongs to
Action: 'lambda:InvokeFunction', // The privilege you are giving to API gateway api's
SourceArn: 'arn:aws:execute-api:.. blah blah blah' // ie. the exact Id of api-gateway which all has rights to invoke lambda function
};
В AWS ARN
это уникальный ID
ресурса. Вроде как EmployeeId
в компании. Это уникально во всем мире.
Поверьте мне, на первый взгляд может показаться, что то, что вы пытаетесь сделать в AWS, трудно понять, но в какой-то момент вы начнете чувствовать себя комфортно, преодолевая все препятствия, с которыми сталкиваетесь. И тогда вы будете восхищаться, насколько настраиваемые функции AWS.
How does one figure out where to find these policies?
Вам необходимо обратиться к документации AWS для конкретной службы, чтобы узнать, какие принципы, действия и заявления они поддерживают. Например, если вам нужно узнать политики для DynamoDB, проверьте разрешения API DynamoDB. Поначалу это может сбивать с толку, поскольку AWS необходимо обслуживать с помощью IAM для авторизации всех своих сервисов, но со временем это становится понятным.
Позвольте мне объяснить каждую часть политики
StatementId (Sid) - это справедливый и необязательный идентификатор оператора (например, 1, 2, abcd и т. Д.), А для некоторых услуг (например, SQS, SNS) требуется уникальность.
Действие. Что позволяет ваша политика в отношении службы AWS. Например, для DynamoDB вы можете разрешить создание таблиц, добавление новых элементов и т. д. Для экземпляра EC2 можно разрешить запуск и остановку.
ARN (Amazon Resource Name) - это уникальное имя для уникальной идентификации ресурсов AWS, таких как сервер EC2, сегмент S3, таблица DynamoDB и даже политика IAM, роль и т. Д.
Принципал - Принципал должен ограничить, кому разрешено использовать эту политику. Это может быть пользователь (пользователь IAM, федеративный пользователь или пользователь с предполагаемой ролью), учетная запись AWS, служба AWS или другой основной объект, которому разрешен или запрещен доступ к ресурсу.
Кроме того, вам нужно включить параметр Resource, где вы можете использовать подстановочный знак '*' или ARN с идентификатором учетной записи внутри него.
Я думаю, что большинство ответов верны, но вот из уст лошади / отличный документ AWS (полный кредит)
Роль : роль IAM - это идентификатор IAM, который вы можете создать в своей учетной записи с определенными разрешениями.
Политики : политики IAM определяют разрешения для действия независимо от метода, который вы используете для выполнения операции.
обычно у вас есть роль, и вы назначаете ей политики.
Чтобы ответить на последнюю часть вашего вопроса «Как понять, где найти эти политики». Все зависит от того, что вы пытаетесь сделать, но всегда начинайте с наименьшего количества разрешений (та же концепция, что и разрешение файла linux, не дает 777). Как вы определяете свои политики? Стандартные политики уже определены в вашей учетной записи AWS, но вы можете использовать инструмент для настройки своих политик с помощью инструмента ниже