LoginSignup
1
0

More than 1 year has passed since last update.

【OpenSearch】IMDSv2のEC2でIAMロールを利用してOpenSearchにアクセスする際に注意すること

Posted at

はじめに

下記リンクで「IAMロールでアクセス制限したOpenSearch(旧: ElasticSearch)にリクエストする」内容を紹介していますが、こちらはIMDSv1を前提としているかと思います。本記事ではIMDSv2の場合に同様のことを実現する方法を紹介します。
https://chariosan.com/2021/09/26/curl_aws-sigv4_iamrole_access_opensearch/

結論

メタデータ情報をトークン付きでリクエストしてください

概要

・下記に記載の通りメタデータを取得する際にはトークンが必要になる
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html#instance-metadata-v2-how-it-works
・ロールに関連するメタデータは下記のパスから取得できるが2番目の方のパスを使って取得する→トークン情報は取得できるがエラーが発生するため(もし原因がわかればどなたか教えてください)

メタデータのパス
/meta-data/identity-credentials/ec2/security-credentials/ec2-instance/
/meta-data/iam/security-credentials/ →こっち
エラー
The request signature we calculated does not match the signature you provided

前提

タスクロール→対象サービスへの必要アクセスを許可
パスワード認証を利用してロールマッピング
jqコマンド必要
curlコマンドは7.~以上が必要

実施内容

#環境変数設定
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
ROLE_NAME=`curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/iam/security-credentials/`
CRED=`curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/${ROLE_NAME}/`
AWS_ACCESS_KEY_ID=`echo $CRED | jq -r ".AccessKeyId"`
AWS_SECRET_ACCESS_KEY=`echo $CRED | jq -r ".SecretAccessKey"`
AWS_SESSION_TOKEN=`echo $CRED | jq -r ".Token"`
REGION="ap-northeast-1"
SERVICE="es"
#動作確認例
curl -k -XGET -H "Content-Type: application/json" 'https://<OpenSearchドメイン>/_cat/indices' -H "X-Amz-Security-Token: ${AWS_SESSION_TOKEN}" --aws-sigv4 "aws:amz:${REGION}:${SERVICE}" --user "${AWS_ACCESS_KEY_ID}:${AWS_SECRET_ACCESS_KEY}"
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0