Ответ
В IAM (Identity and Access Management) роли и политики — это взаимосвязанные, но разные сущности для управления доступом.
IAM Policy (Политика) — это JSON-документ, который определяет разрешения (что можно или нельзя делать). Политика сама по себе ничего не разрешает, пока не будет прикреплена к какой-либо сущности (роли, пользователю или группе). Она содержит statements с Effect (Allow/Deny), Action (например, s3:GetObject) и Resource (ARN).
Пример политики, разрешающей чтение из конкретного S3-бакета:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3Read",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-application-logs",
"arn:aws:s3:::my-application-logs/*"
]
}
]
}
IAM Role (Роль) — это личность IAM с определенным набором разрешений (прикрепленными политиками), которая не имеет постоянных долгосрочных учетных данных (пароля или access keys). Роль предназначена для временного делегирования прав.
Ключевые отличия и взаимодействие:
- Назначение: Политика — это правило. Роль — это идентичность, которой можно временно стать.
- Использование: Политики прикрепляются к ролям (или пользователям). Роли принимаются (assume) AWS-сервисами (например, EC2-инстансом или Lambda-функцией) или пользователями федерации.
- Учетные данные: Роль при принятии предоставляет временные security credentials (через STS — Security Token Service), которые живут от 15 минут до 12 часов. Пользователь IAM имеет долгосрочные ключи.
Типичный DevOps-сценарий: Вы создаете роль EC2-S3-ReadRole, прикрепляете к ней политику (как в примере выше), а затем назначаете эту роль EC2-инстансу. Приложения на этом инстансе автоматически получают временные права для чтения S3, без необходимости хранить ключи в конфигах.