Motivation
Terraform で AWS App Runner と AWS Secrets Manager を使うとき、IAMロールを設定する必要があります。例えばAPI Keyを設定するときに必要になります。
対処
以下の順序で設定します。App Runnerではインスタンスロールを使って、AWS Secrets Managerにアクセスさせられます。
- App Runnerのインスタンスロールのポリシードキュメントを作成する
- App Runnerのインスタンスロールを作成する
- AWS Secrets Managerのポリシーを作成する
- AWS Secrets ManagerのポリシーをApp Runnerのインスタンスロールに割り当てる
App Runnerのインスタンスロールのポリシードキュメントを作成する
ポイントは "tasks.apprunner.amazonaws.com"
です。ちなみに `"build.apprunner.amazonaws.com" もあって、ECRにアクセスするときに使います。
data "aws_iam_policy_document" "app_runner_secrets_policy_document" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["tasks.apprunner.amazonaws.com"]
}
}
}
App Runnerのインスタンスロールを作成する
名称は任意です。
resource "aws_iam_role" "app_runner_role" {
name = "AWSAppRunnerTaskExecutionRole"
assume_role_policy = data.aws_iam_policy_document.app_runner_secrets_policy_document.json
}
AWS Secrets ManagerのポリシーをApp Runnerのインスタンスロールに割り当てる
No.3 & 4 を同時に設定しています。
resource "aws_iam_role_policy" "secretmanager" {
name = "secretmanager"
role = "No.2で設定したロールのID"
policy = jsonencode({
Version = "2012-10-17"
Statement : [
{
Action : [
"secretsmanager:GetSecretValue"
],
Effect : "Allow"
Resource : [
"取得したいSecrets ManagerのARN"
]
}
]
})
}