Se você tiver recomendações sobre como fazer isso melhor, envie uma resposta para que eu possa fazer melhor da próxima vez.
Meu exemplo aqui refletirá de perto a situação em que eu estava. Em particular, o bucket S3 com o qual eu queria interagir já estava definido e eu não queria dar à Glue acesso total a todos os meus buckets.
O primeiro componente é o papel em si. A Amazon recomenda o nome específico que eu uso nesta seção para que a função possa ser transmitida dos usuários do console para o serviço. Confira a seção de função do IAM do Manual de cola, na seção "Referências", se isso não for aceitável. A outra coisa que era diferente de um boilerplate “Assume Role“ era “Principal” e “Serviço”.
resource "aws_iam_role" "glue" {
name = "AWSGlueServiceRoleDefault"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "glue.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
O próximo componente foi anexar a política gerenciada AWSGlueServiceRole à função. A Amazon pré-define isso para que o papel tenha quase todas as permissões necessárias para que funcione fora do portal.
resource "aws_iam_role_policy_attachment" "glue_service" {
role = "${aws_iam_role.glue.id}"
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole"
}
Se você ainda não tiver uma política definida para o seu intervalo do S3, poderá definir sua política e anexá-la a essa função de colagem, tudo no mesmo bloco, assim:
resource "aws_iam_role_policy" "my_s3_policy" {
name = "my_s3_policy"
role = "${aws_iam_role.glue.id}"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"
]
}
]
}
EOF
}
Se, como eu, você definiu essa política, mas já a anexou a outra função, você pode reutilizá-la e anexá-la à função de cola, assim:
resource "aws_iam_role_policy" "glue_service_s3" {
name = "glue_service_s3"
role = "${aws_iam_role.glue.id}"
policy = "${aws_iam_role_policy.my_s3_policy.policy}"
}
O texto que você alteraria aqui para corresponder à sua configuração seria "my_s3_policy" para a opção / chave da política.
Minha resposta aqui foi reproduzida em parte na minha Postagem média .