[アップデート] IAM ポリシーで AWS Certificate Manager の条件キーが使えるようになり、証明書リクエストの内容などを管理者が制御出来るようになりました

2023.08.25

いわさです。

IAM ポリシーでは条件キーを使って、要求されたアクションに対してコンテキストを条件に承認するか拒否するかを制御することが可能です。

本日のアップデートで、AWS Certificate Manager (ACM) の条件キーが追加され、ACM で管理する証明書のコンテキストをもとに制御することが出来るようになりました。

これらを使うことで、例えば管理者が ACM の発行権限をユーザーに与える際に、特定のサブドメインのみを許可するとかそういった制御が出来るようになります。

  • acm:ValidationMethod
  • acm:DomainNames
  • acm:KeyAlgorithm
  • acm:CertificateTransparencyLogging
  • acm:CertificateAuthority

本日時点で使えるキーは上記で、詳しくは以下の公式ドキュメントに記載があります。
ドキュメントによると全てRequestCertificateアクションでのみサポートされているようです。対象アクションはもしかすると今後拡張される可能性もあるかもしれないですね。

検証方法、ドメイン名、キーアルゴリズムあたりはマネジメントコンソールからも選択するので認識しやすいと思います。
acm:CertificateTransparencyLogging(証明書の透明性ログ記録)はデフォルトで有効化されているオプションで、API (CLI) から発行する場合に無効化することが可能です。
詳細は以下をご確認ください。

なお、これらの条件キーは既に、IAM ポリシーのリクエスト条件追加画面でも選択出来るようになっています。

本日は特によく使うことが多そうな、検証方法とドメイン名での制御を試してみましたので紹介します。

DNS 検証のみ許可する

次のようなポリシーを作成し、ユーザー(ロール)にアタッチしました。
該当ユーザーはacm:RequestCertificateの権限は元々許可されているのですが、その上でこの追加のポリシーによってacm:ValidationMethodEMAILの場合はリクエストを拒否するよにしてみました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": "acm:RequestCertificate",
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "acm:ValidationMethod": "EMAIL"
                }
            }
        }
    ]
}

試してみると、次のように E メール検証での発行は拒否されました。

試しに DNS 検証を選択して発行してみたところ、期待どおり発行することが出来ました。

特定ドメインのリクエストのみを許可

続いて、特定のドメインのみのリクエストのみを許可してみます。
先程と同様にacm:RequestCertificateが元々許可されているという前提で、次のような拒否ポリシーを作成しました。

tak1wa.comというドメインのサブドメイン以外は拒否出来る想定です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": "acm:RequestCertificate",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringNotLike": {
                    "acm:DomainNames": ["*.tak1wa.com"]
                }
            }
        }
    ]
}

試してみたところ、次のようにxxx.iwasa.comの場合は証明書発行リクエストが拒否されました。

xxx.tak1wa.comの場合は証明書発行リスエストが成功しました。期待どおり動作していますね。

さいごに

本日は IAM ポリシーで AWS Certificate Manager の条件キーが使えるようになったので、特定ドメイン・検証方法でのみリクエスト出来るようなポリシーを作って試してみました。

証明書発行権限を委譲したいという場合など、委譲しつつ出来る内容を少し制限したいというシーンがあったと思いますが、これは役立ちそうですね。
ぜひ使ってみてください。