by shigemk2

当面は技術的なことしか書かない

IAMのアクセスキーとシークレットキーが登録されているSecrets ManagerでローテーションさせるLambda

IAMのアクセスキーとシークレットキーが登録されているSecrets ManagerでローテーションさせるLambda。 プルリク自体は良いのにわりかし放置されているのがつらい。

ローテーションでLambdaを実行するには、最終的にこんな感じのリソースベースのポリシーが必要。

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE",
      "Effect": "Allow",
      "Principal": {
        "Service": "secretsmanager.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "<arn of the Lambda function that this trust policy is attached to - must match exactly>"
    }
  ]
}

リソースベースポリシー(Permission)とかちゃんとしないといけないから結局CloudFormationでLambda作った。 awscliでpermissionを追加する感じだし、マネコンじゃリソースベースポリシー登録できないんじゃないかな。 permissionを正しく設定しないとローテーションを登録するタイミングで権限ないって怒られる。

関数ポリシーがprincipal secretsmanager.amazonaws.comへのアクセスを許可していることを確認してください

登録はできたけど、問題点としては、以下。

  • Secrets Managerでアクセスキーとシークレットキーが対になるようにシークレットを予め登録しておく必要がある
  • このローテーション用Lambdaでは新キー作成、シークレットを新キーに更新、旧キー無効化、旧キー削除をいっぺんにやってしまう 新キー作成とシークレット更新は同時だけど、同じユーザーでキーが2つ以上発行されていたら古い方から消していく
  • ローテーションは複数登録できない
  • ローテーションの実行タイミングはざっくりしすぎてて曜日や時間を細かく指定できない