マネジメントコンソールを使ってリソースを設定していると自動的に「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 を使っておくのが良さそうだな〜と思った🤔