IAM ユーザーの MFA を有効化した後、アクセスキーを使用する既存処理に影響があるか教えてください

IAM ユーザーの MFA を有効化した後、アクセスキーを使用する既存処理に影響があるか教えてください

Clock Icon2021.05.28 11:47

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

IAM ユーザーのセキュリティを強化する施策を実施したいと考えています。MFA の有効化を全 IAM ユーザー必須にすることを検討しています。

アクセスキーを使用する IAM ユーザーで後から MFA を有効化した場合、既存のアクセスキーを使用する処理に影響は出ますか?

既存の処理が停止してしまうのは困りますので、影響の有無を確認したいです。

どう対応すればいいの?

アクセスキーを使用する IAM ユーザーで MFA を有効化した場合、既存のアクセスキーを使用する処理に影響は出ません。

ただし、MFA を有効化する際に、合わせて MFA を強制する IAM ポリシーを付与した場合、既存の処理に影響が出ます。

MFA を強制する IAM ポリシーの例は下記の記事を参照してください。

多要素認証(MFA)するまで使えません!なIAMユーザを作成してみた | DevelopersIO

注意点

MFA を強制する IAM ポリシーを IAM ユーザーへアタッチした場合、既存のアクセスキーを使用する処理では、MFA デバイスを使って一時的な認証情報を AWS Security Token Service (AWS STS) から取得する必要があります。

一時的な認証情報の期限は 2021/05/28 時点で最長 129,600 秒(36 時間)です。このため、バッチ処理などでアクセスキーを利用する場合は、一時的な認証情報の期限切れ後、再度一時的な認証情報を取得する処理の追加(変更)が必要です。

やってみた

S3 にアクセスキーを使用してファイルアップロードする処理を実施します。

前提として、S3 と MFA の有効化を許可した IAM ユーザーのアクセスキーを発行し、AWS CLI に設定しています。

MFA 無効

$ aws s3 cp ./blog.md  s3://<S3 バケット名>/blog.md
upload: blog.md to s3://<S3 バケット名>/blog.md

正常にアップロードできました。その後、MFA を有効化し、既存処理に影響があるか確認します。

MFA 有効

$ aws s3 cp ./blog.md  s3://<S3 バケット名>/blog.md
upload: blog.md to s3://<S3 バケット名>/blog.md

結果は変わりませんので、既存の処理に影響ないことが確認できました。

このユーザーに MFA を強制するポリシーを割り当てた後、再度ファイルをアップロードします。

MFA 有効 + IAM ポリシーで MFA 強制

$ aws s3 cp ./blog.md  s3://<S3 バケット名>/blog.md
upload failed: ./blog.md to s3://<S3 バケット名>/blog.md An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

注意点の通り失敗したので、MFA デバイスを使った一時的な認証情報を STS から取得し、その認証情報を使って再度同じ処理を実施します。

MFA デバイスを使った一時的な認証情報の取得

# MFA デバイスのシリアルナンバーを取得
$ SerialNumber=`aws iam list-mfa-devices --user-name arakawa-blog-user | jq -r '.MFADevices[].SerialNumber'`

# ワンタイムパスワードを使って一時的な認証情報を取得
$ aws sts get-session-token --serial-number ${SerialNumber} --token-code <MFA トークン(ワンタイムパスワード)>
{
    "Credentials": {
        "AccessKeyId": "ASIA...",
        "SecretAccessKey": "***",
        "SessionToken": "***",
        "Expiration": "..."
    }
}

# 環境変数に一時的な認証情報をセット
export AWS_ACCESS_KEY_ID=ASIA...
export AWS_SECRET_ACCESS_KEY=***
export AWS_SESSION_TOKEN=***

# 一時的な認証情報を使用して再度アップロード
$ aws s3 cp ./blog.md  s3://<S3 バケット名>/blog.md
upload: blog.md to s3://<S3 バケット名>/blog.md

MFA デバイスを使って一時的な認証情報を取得したので、アップロードに成功しました。

運用上の観点

AWS 環境へアクセスするためにはすべてにおいて MFA が必須とすることで、セキュアに運用できそうに見えますが、さらに IAM ポリシーで強制してしまうと、既存プログラム等の改修コストがかかります。

また、複数箇所でアクセスキーを使用している場合、影響範囲を調べることも困難となります。

基本的には、IAM でのセキュリティのベストプラクティスに則って、アクセスキーを極力使用せずに、IAM ロールが利用可能な箇所はアクセスキーと置き換えるなどの対応で、実装コストもかからずセキュアに運用できます。

とはいえ、AWS 環境外でアクセスキーを使用したいケースはありますので、その際は利用者へベストプラクティスを周知しましょう。

参考資料

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.