Как настроить AWS Glue с помощью Terraform (в частности, я хочу, чтобы он мог сканировать мои ведра S3 и просматривать структуры таблиц). Быстрый поиск в Google не дал результатов для этой конкретной услуги. Ведро S3, с которым я хочу взаимодействовать, уже существует, и я не хочу предоставлять Glue полный доступ ко всем моим ведрам.
Я отправил свое решение в стиле вопросов и ответов, но мне интересно узнать, есть ли какие-нибудь мысли о том, как я мог бы сделать это лучше.
Если у вас есть рекомендации, как это сделать лучше, отправьте ответ, чтобы в следующий раз у меня получилось лучше.
Мой пример здесь точно отражает ситуацию, в которой я оказался. В частности, сегмент S3, с которым я хотел взаимодействовать, уже был определен, и я не хотел предоставлять Glue полный доступ ко всем моим сегментам.
Первый компонент - это сама роль. Amazon рекомендует конкретное имя, которое я использую в этом разделе, чтобы роль могла быть передана от пользователей консоли к службе. Ознакомьтесь с разделом «Роль IAM» в «Руководстве по клею» в разделе «Ссылки», если это неприемлемо. Еще одна вещь, которая отличалась от шаблонного «Принять роль», - это «Принципал» и «Служба».
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
}
Следующим компонентом было присоединение управляемой политики AWSGlueServiceRole к роли. Amazon заранее определяет это, так что роль имеет почти все разрешения, необходимые для работы вне пределов ворот.
resource "aws_iam_role_policy_attachment" "glue_service" {
role = "${aws_iam_role.glue.id}"
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole"
}
Если у вас еще нет политики, определенной для вашей корзины S3, вы можете определить свою политику и прикрепить ее к этой связующей роли в одном блоке, например:
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
}
Если, как и я, вы определили эту политику, но уже прикрепили ее к другой роли, вы можете повторно использовать ее и присоединить к роли склеивания следующим образом:
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}"
}
Текст, который вы здесь измените, чтобы он соответствовал вашей конфигурации, будет «my_s3_policy» для параметра / ключа политики.
Мой ответ здесь частично воспроизведен в моем Средний пост.