1. 作業背景・目的
Direct Connectで接続されたインターネット利用不可のWindows Server(オンプレミス)からS3バケットへの操作を行う必要が出てきた。
暗号化が必須な点やsftpが使えない環境のため、IAM Roles Anywhereで実現することにした。
2. 環境構成
- クライアントOS: Windows Server
- ネットワーク: AWS Direct Connect (閉域網・インターネット接続なし)
- 認証方式: IAM Roles Anywhere + AWS Private CA
- 操作対象: Amazon S3
-
使用ツール: AWS CLI v2,
aws_signing_helper
3. インフラ準備 (VPCエンドポイント)
閉域網からのアクセスのため、以下の2つのInterface型VPCエンドポイント(VPCE)を作成した。
| 用途 | サービス名 | 設定のポイント |
|---|---|---|
| 認証用 | com.amazonaws.ap-northeast-1.rolesanywhere |
SGでHTTPS(443)許可。DNS名は後で使用するため控えておく。 |
| S3アクセス用 | com.amazonaws.ap-northeast-1.s3 |
オンプレからの接続のため、Gateway型ではなくInterface型を使用すること。SGでHTTPS(443)許可。 |
4. AWS側設定 (IAM Roles Anywhere & Private CA)
- Private CA: クライアント証明書発行用のCAを準備。
- トラストアンカー: IAM Roles Anywhereにて、上記Private CAを信頼する設定を作成。
-
IAMロール: 信頼関係ポリシーで
rolesanywhere.amazonaws.comからのAssumeRoleを許可。
"Condition": { "ArnEquals": { "aws:SourceArn": "<トラストアンカーARN>" } }
- プロファイル: 作成したロールをIAM Roles Anywhereプロファイルに関連付け。
5. クライアント作業ログ (証明書発行〜設定)
手順⓪:作業用ディレクトリの準備とツールの配置
任意のフォルダ(例: C:\work)を作成し、事前に入手した aws_signing_helper.exe を配置する。
以降の作業は、コマンドプロンプトでこのディレクトリに移動して行う。
mkdir C:\work
cd C:\work
手順①:秘密鍵とCSRの作成 (OpenSSL)
同ディレクトリ(C:\work)でOpenSSLを実行し、鍵とCSRを生成する。
openssl genrsa -out private-key.pem 2048
openssl req -new -key private-key.pem -out csr.pem
手順②:証明書の発行 (AWS CLI)
作業端末からAWS Private CAへ署名リクエストを送信。
署名リクエスト:
aws acm-pca issue-certificate ^
--certificate-authority-arn <Private CA ARN> ^
--csr fileb://csr.pem ^
--signing-algorithm SHA256WITHRSA ^
--validity Value=365,Type=DAYS ^
--idempotency-token 1234
※実行後、出力される CertificateArn を控える。
証明書の取得と保存:
--query オプションで証明書本文のみを抽出し、同ディレクトリに保存する。
aws acm-pca get-certificate ^
--certificate-authority-arn <Private CA ARN> ^
--certificate-arn <発行されたCertificate ARN> ^
--output text --query Certificate > cert.pem
手順③:疎通確認(コマンド手打ち)
まずはコマンドで検証。
認証(クレデンシャル取得)テスト:
- 配置した証明書とキー (
C:\work\...) を指定する。 - 認証用VPCEのエンドポイントを
--endpointで指定。 - プロトコル
https://を忘れないこと。
aws_signing_helper credential-process ^
--certificate C:\work\cert.pem ^
--private-key C:\work\private-key.pem ^
--trust-anchor-arn <TrustAnchorARN> --profile-arn <ProfileARN> --role-arn <RoleARN> ^
--endpoint https://vpce-auth-xxxx.rolesanywhere.ap-northeast-1.vpce.amazonaws.com
S3アクセス(リスト取得)テスト:
- 環境変数 (
AWS_ACCESS_KEY_ID等) に一時キーをセットして実行。 - S3用VPCEの指定形式に注意。
bucket.を付けないとSSLエラーになる。
aws s3 ls --region ap-northeast-1 --endpoint-url https://bucket.vpce-s3-xxxx.s3.ap-northeast-1.vpce.amazonaws.com
手順④:AWS CLI Config設定 (~/.aws/config)
検証済みの値を設定ファイルに記述。credential_process 内のファイルパスはフルパス(C:\work\...)で記述しておくと確実。
設定ファイルのポイント:
-
credential_processは改行しない。 - S3用エンドポイントは
[services]セクションで定義し、bucket.プレフィックス付きURLを指定する。
最終的な config:
[profile rolesanywhere]
region = ap-northeast-1
credential_process = C:\work\aws_signing_helper.exe credential-process --certificate C:\work\cert.pem --private-key C:\work\private-key.pem --trust-anchor-arn <TrustAnchorARN> --profile-arn <ProfileARN> --role-arn <RoleARN> --endpoint https://vpce-auth-xxxx.rolesanywhere.ap-northeast-1.vpce.amazonaws.com
services = s3-private
[services s3-private]
s3 =
endpoint_url = https://bucket.vpce-s3-xxxx.s3.ap-northeast-1.vpce.amazonaws.com
6. トラブルシューティング・メモ
-
i/o timeout: 認証時にパブリックエンドポイントへ行こうとしている。credential_processに--endpointでRoles Anywhere用VPCEを指定して解決。 -
hostname mismatch(SSL Error): S3アクセス時にワイルドカード(*.vpce...)やバケット名直書き(bucketname.vpce...)のエンドポイントを指定すると発生。bucket.vpce...の形式に統一して解決。 -
unknown command:configファイル内でコマンドを見やすくするために改行を入れたら発生。1行で書くのが鉄則。 -
unsupported protocol scheme "": エンドポイントURLにhttps://を付け忘れて発生。
7. 確認コマンド
aws s3 ls --profile rolesanywhere
追記(1/17)
証明書や鍵の文字コードの関係でエラーが発生する可能性がある
使用している環境だとUTF-8の必要があったため、同じ作業のときは念頭に置いておく。

