Назад | Перейти на главную страницу

Как настроить AWS Glue с помощью Terraform?

Как настроить 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» для параметра / ключа политики.

Мой ответ здесь частично воспроизведен в моем Средний пост.