EC2インスタンスプロファイルによってAssumeRoleされた認証情報の有効期限は短くできるのでしょうか
2021/08/20
「EC2インスタンスプロファイルによってAssumeRoleされた認証情報の有効期限を短くする」方法がわからなかったので、CLIで無理やり実験してみました。
目次
結論
EC2インスタンスプロファイルに頼るのではなく、sts:AssumeRoleをCLIやSDKで実行して有効期限を指定してあげたほうがいいですね。
IAMロール
S3:ListAllMyBucketsのみ許可したIAMロールを作ってEC2インスタンスに設定しました。
あとセッションマネージャー使いたいのでAWS管理ポリシーのAmazonSSMManagedInstanceCoreはアタッチしてます。
1 2 3 4 5 6 7 8 9 10 11 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" } ] } |
EC2メタデータから取得
1 2 |
$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/S3LSforEC2 |
EC2インスタンスにセッションマネージャーで接続して、メタデータから認証情報を取得しました。
1 2 3 4 |
export AWS_ACCESS_KEY_ID= export AWS_SECRET_ACCESS_KEY= export AWS_SESSION_TOKEN= |
取得した認証情報をローカルのmacOSのターミナルで環境変数に設定しました。
1 2 3 4 5 6 7 |
$ aws sts get-caller-identity { "UserId": "AROARFDUEEVTDCNWI5K3W:i-092e5563d3b1e27a9", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/S3LSforEC2/i-092e5563d3b1e27a9" } |
sts get-caller-identityコマンドで確認してみるとIAMロールにたいしてEC2インスタンスプロファイルが取得したセッションの認証になっていることがわかりました。
1 2 |
$ aws s3 ls |
s3 lsコマンドで該当のバケット一覧を確認しました。
EC2からIAMロールをデタッチしてみる
CloudShellから以下 CLIでAssociationIdを確認しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ aws ec2 describe-iam-instance-profile-associations { "IamInstanceProfileAssociations": [ { "AssociationId": "iip-assoc-0daa74c36a84893ac", "InstanceId": "i-092e5563d3b1e27a9", "IamInstanceProfile": { "Arn": "arn:aws:iam::123456789012:instance-profile/S3LSforEC2", "Id": "AIPARFDUEEVTKCUPD6M4M" }, "State": "associated" } ] } |
そのままCloudShellからIAMロールのEC2との関連付けをデタッチしてみました。
1 2 3 |
$ aws ec2 disassociate-iam-instance-profile \ --association-id iip-assoc-0daa74c36a84893ac |
EC2との関連付けをデタッチしたあとに認証はまだ有効なのか?
有効です。
そのまま10分ぐらい経過しても aws s3 lsでバケット一覧は取得できました。
関連付けがなくなるだけで認証情報が無効化されたわけではないのですね。
セッション無効化しないといけないのか?
マネジメントコンソールの[アクティブなセッション無効化]を実行すると以下のインラインポリシーがアタッチされます。
[policy creation time]には無効化を実行した時間が入ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "*" ], "Resource": [ "*" ], "Condition": { "DateLessThan": { "aws:TokenIssueTime": "[policy creation time]" } } } ] } |
無効化してからmacOSのターミナルで試してみます。
1 2 3 |
$ aws s3 ls An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied |
aws:TokenIssueTimeが指定時間よりも過去になる条件が追加されたので拒否されました。
そりゃそうですね。
まとめ
- 無効化するためには、条件つきのインラインポリシーを追加する。
- “aws:TokenIssueTime”がインラインポリシーよりも後の認証情報を作成するために、IAMプロファイルインスタンスをdisassociateして、associateする。
って、こんなことするのであれば、sts:AssumeRoleで有効期限を指定するのが普通のやりかたですね。
EC2インスタンスプロファイルのローテーション期間を指定できるのなら嬉しいですが。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
slackのbotをAWS Lambda(Python)+API Gatewayで構築
slackで投稿した内容に応じて返信したり調べ物したりしてくれるbotですが、こ …
-
-
AWS Lambda KMSを使って環境変数を暗号化、復号化する(Python)
Lambda内で外部APIを使用する場合などをユースケースとして、環境変数をKM …
-
-
AWS Organizations EC2宣言型ポリシーを設定する
2024/12/1に発表されましたOrganizationsの宣言型ポリシーを設 …
-
-
Amazon Quantum Ledger Database(QLDB)でサンプル台帳の作成と検証
Quantum Ledger Database(QLDB)を触ったことなかったの …
-
-
AWS CLIを使用せずにCodeCommitへSSHユーザーで接続する
AWS CLIやアクセスキーID、シークレットアクセスキーなどを開発環境にセット …
-
-
EC2ハードウェア専有インスタンス(Dedicated Instances)を起動して請求書を確認してみました
EC2ハードウェア専有インスタンスのサイトには、次の料金と表記されています。 * …
-
-
AWS KMSマルチリージョンキーを確認しました
2021年6月にKMS マルチリージョンキーがリリースされました。 マルチリージ …
-
-
AtomエディタでEC2のファイルを直接編集する
Webページを編集していてEC2のファイルをvimエディタでさわったりしています …
-
-
AWSアカウント内のLambda関数を削除するLambda(Python)
やりたいこと 特定のAWSアカウントの特定リージョンのAWS Lambda関数を …
-
-
「JAWS-UG DE&I AWS re:Invent 2024 recap サーバーレス ハンズオン」でサポーターしてきました
JAWS-UG DE&I開催の「AWS re:Invent 2024 r …