こんばんは、小寺です。
IAM Role Anywhereで証明書のデータ抽出指定ができるアップデートが発表されました。
https://aws.amazon.com/about-aws/whats-new/2024/04/iam-roles-anywhere-modifying-mapping-certificate-attributes/

IAM Role Anywhereとは

IAM ロールの機能を AWS以外の外部のワークロードでも利用できる仕組みです。対象としてはオンプレミスのサーバ、コンテナや他のコンピューティングのサービスです。
対象のオンプレミスからAWSへ短期間クレデンシャルを提供し、IAMロールを使ってアクセスキーを使わずにセキュアにアクセスができるようにします。
メリットとしては、「アクセスキー排除」の仕組みなので、アクセスキーのローテーションをする運用のコストが削減でき、かつアクセスキー漏洩のリスクを避けることができセキュリティが向上したアクセスができることです。

利用されるシーンとしては以下が想定されます。

  • オンプレミスのデータをS3へバックアップする
  • オンプレミスの KubernetesのワークロードとAWSのDynamoDBなどが連携する
  • オンプレミスをデータの送信元としてSecurity Hubにデータを送信して連携する

証明書をワークロードで利用するには

AWS リソースへアクセスするために構成したのと同じ IAM ロールおよびポリシーを、AWS 外のワークロードが利用して AWSの各リソースにアクセスすることもできます。また、 オンプレミスからAWSへどのように通信しているのか、気になりますよね。公開鍵基盤 (PKI) の仕組みを使っています。
オンプレミスとAWSで認証を行うために、X.509 証明書を一時的な AWS クレデンシャルと交換します。

AWS内で「信頼アンカー」と呼ばれるものを使って認証情報をやり取りします。
「信頼アンカー」機能はオンプレミスからAWSに「オンプレミス上のCAで、ワークロード用に信頼をしている」と伝えるものです。このトラスト アンカーによって信頼が確立されると、引き受けることができるロールをまとめた「プロファイル」を作成します。
例えばオンプレミスのワークロードがAWSのS3バケットににアクセスする場合、CAによって署名された証明書をAWSに渡して、プライベート キーを使用してリクエストに署名します。
もし、証明書が有効な場合、AWSはそのロールの一時的な認証情報を呼び出し元のワークロードに返して認証が成り立つという仕組みです。

IAM Role AnywhereはコンソールのIAMサービスの「ロール」からセットアップができます。

ともあれ、IAM Role Anywhereを利用する最初の一歩として、オンプレミスのサーバーで秘密鍵と署名リクエスト(CSR)を作成します。

アップデート内容

デフォルトの仕様として、認証に使用するエンドエンティティ証明書の Issuer 、 Subject 内にある CN と OU の値が、Condition句内に定義した値と一致することでこれまでどのワークロードなのかを区別していました。AWSが管理する「 aws:principalTag」キーで設定します。ロールの信頼ポリシーの条件として利用されます。

今回のアップデートからマッピング ルールのカスタム セットを定義することができるようになりました。認証証明書からどのデータを抽出すればよいか選択ができるようになっています。タグの記載が簡易的になり、利用するための柔軟度が上がった感じですね。

設定するには以下の通りコマンドで設定ができます。CERTIFICATE_FIELD は、x509Subject、x509Issuer、および x509SAN のいずれかを指定することができます。

aws rolesanywhere put-attribute-mapping \
--certificate-field CERTIFICATE_FIELD \
--mapping-rules specifier=SPECIFIER \
--profile-id PROFILE_ID

よって以下の通りの指定ができます。

$aws rolesanywhere put-attribute-mapping \
--certificate-field x509Subject \
--mapping-rules specifier=CN specifier=OU \
--profile-id PROFILE_ID