rus*_*rce 3 amazon-web-services terraform
如何使用 Terraform 设置 AWS Glue(特别是我希望它能够抓取我的 S3 存储桶并查看表结构)。一个快速的谷歌搜索出现了该特定服务的枯竭。我想要与之交互的 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
}
Run Code Online (Sandbox Code Playgroud)
下一个组件是将 AWSGlueServiceRole 托管策略附加到角色。亚马逊预先定义了这一点,以便角色几乎拥有所有需要的权限,以便走出大门。
resource "aws_iam_role_policy_attachment" "glue_service" {
role = "${aws_iam_role.glue.id}"
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole"
}
Run Code Online (Sandbox Code Playgroud)
如果您还没有为您的 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
}
Run Code Online (Sandbox Code Playgroud)
如果像我一样,您定义了该策略但已经将其附加到另一个角色,那么您可以重复使用它并将其附加到胶水角色,如下所示:
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}"
}
Run Code Online (Sandbox Code Playgroud)
您在此处更改以匹配您的配置的文本将为策略选项/键的“my_s3_policy”。
我的回答部分复制到了我的Medium 帖子中。
归档时间: |
|
查看次数: |
3975 次 |
最近记录: |