
マネジメントコンソールを使ってリソースを設定していると自動的に「Service-Linked Role(サービスにリンクされたロール)」が作られていることがある💡実は AWS CloudFormation や Terraform を使って Service-Linked Role を IaC (Infrastructure as Code) で管理することもできて,今回はお試しとして Terraform の aws_iam_service_linked_role リソースを使って AWS Config の Service-Linked Role を作ってみる👌
👾 iam.tf
aws_iam_service_linked_role リソースの aws_service_name に AWS Config を表す config.amazonaws.com を設定しておけば OK👌 簡単❗️
resource "aws_iam_service_linked_role" "config" { aws_service_name = "config.amazonaws.com" }
ちなみに Service-Linked Role をサポートしているサービス一覧は以下のドキュメントで確認できる📝
デプロイ確認
Terraform コードを apply すると Service-Linked Role AWSServiceRoleForConfig を追加できていた \( 'ω')/

AWS Security Hub と AWS Config
AWS Config には Service-Linked Role AWSServiceRoleForConfig もしくは マネージドポリシー AWS_ConfigRole(AWSConfigRole ではなく)をアタッチした IAM Role を使うとドキュメントには書いてある📝実際にポリシーを比較しても基本的には同じ設定になっていた.
しかし AWS Security Hub のコントロール [Config.1] AWS Config should be enabled and use the service-linked role for resource recording はデフォルトで Service-Linked Role AWSServiceRoleForConfig を使うことを要求していて,マネージドポリシー AWS_ConfigRole をアタッチした IAM Role を使っていると警告が出てしまう(includeConfigServiceLinkedRoleCheck パラメータで無効化することは可能).
よって,特殊な要件がなく AWS Security Hub に準拠するのであれば Service-Linked Role を使っておくのが良さそうだな〜と思った🤔