Как использовать Terraform для создания роли AWS IAM без политики предполагаемых ролей?
При использовании AWS MediaConvert в инструкциях представлен образец политики IAM без раздела предполагаемых ролей. Точно так же при создании роли MediaConvert по умолчанию в консоли AWS IAM результирующая роль IAM также не имеет политики доверия.
В Terraform, как создать роль IAM с пустымassume_role_policy
аргумент?
Я пробовал следующие решения с различными результирующими ошибками:
- Задавать
assume_role_policy = ""
- Задавать
assume_role_policy = "{}"
- Создать пустой
data aws_iam_policy_document
и установите accept_role_policy на результат json документа.
Если пустая политика предполагаемых ролей не является решением, то как мне создать роль IAM, используя terraform, подходящую для MediaConvert?
Заранее благодарим вас за внимание и ответ.
1 ответ
Вы, кажется, не понимаете, где нужно определить политику предполагаемой роли. Это не используется самими политиками, вместо этого он используется ролью для определения того, каким службам или учетным записям разрешено использовать роль.
Роль нуждается в assume_role_policy
позволить mediaconvert
сервис, чтобы иметь возможность взять на себя роль. После этого роль может использовать любые разрешения, предоставляемые политикой / политиками, прикрепленными к роли (либо как управляемые политики, либо как встроенные).
Ваша политика предполагаемых ролей для этого должна выглядеть примерно так:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "mediaconvert.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Ваш код Terraform для создания роли и политики будет выглядеть примерно так:
data "aws_iam_policy_document" "mediaconvert_assume_role_policy" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["mediaconvert.amazonaws.com"]
}
}
}
resource "aws_iam_role" "mediaconvert" {
name = "example"
path = "/system/"
assume_role_policy = data.aws_iam_policy_document.mediaconvert_assume_role_policy.json
}
resource "aws_iam_role_policy_attachment" "mediaconvert_s3" {
role = aws_iam_role.mediaconvert.name
policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
}
resource "aws_iam_role_policy_attachment" "mediaconvert_api_gateway" {
role = aws_iam_role.mediaconvert.name
policy_arn = "arn:aws:iam::aws:policy/AmazonAPIGatewayInvokeFullAccess"
}
Это создаст роль, которую может взять на себя служба MediaConvert, а затем предоставит службе MediaConvert возможность делать что угодно с S3 или API-шлюзом. Возможно, вы захотите предоставить более детализированные разрешения для роли или просто будете счастливы, что MediaConvert в любом случае не будет делать то, чего вы не хотите.