1. 主要ページへ移動
  2. メニューへ移動
  3. ページ下へ移動

QES ブログ

記事公開日

【AWS CLI】MFA認証でローカルからセキュアなS3ファイルアップロードを実現する方法

  • このエントリーをはてなブックマークに追加

はじめに

DXソリューション営業本部の三浦です。

この記事では、IAMユーザーに直接権限を付与する代わりに、MFA(多要素認証)を必須とし、さらに特定のIAMロールを引き受ける(AssumeRole)ことで初めて操作が可能になる、より安全なAWS CLIの利用方法について解説します。

この設定により、万が一アクセスキーが漏洩しても、MFAデバイスがなければ不正な操作を防ぐことができ、セキュリティを向上させることが可能です。

IAMユーザーの準備

まず、AWS CLIの認証元となるIAMユーザーを準備します。

AWS マネジメントコンソールでIAMサービスを開き、ユーザー(例: aws-cli-user)を作成します 。

このユーザーはプログラムによるアクセス(アクセスキー)のみを許可し、「AWSマネジメントコンソールへのユーザーアクセスを提供する」オプションはチェックを外します 。

a639_02.png

ユーザー作成後、「セキュリティ認証情報」タブでアクセスキーを作成し、アクセスキーID と シークレットアクセスキー を安全な場所に控えます 。

次に、同じ「セキュリティ認証情報」タブでMFAデバイスを割り当て、有効化します 。有効化後、MFAデバイスのARN(例: arn:aws:iam::123456789012:mfa/aws-cli-mfa-test)をコピーして控えておきます 。
a639_03.png


重要なポイント: このIAMユーザーには、S3操作などの直接的な権限ポリシーを一切アタッチしません 。代わりに、後ほど作成する特定のロールを引き受けることだけを許可する、以下のインラインポリシーのみを設定します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::[YOUR_AWS_ACCOUNT_ID]:role/aws-cli-s3-role"
    }
  ]
}

[YOUR_AWS_ACCOUNT_ID] はご自身のAWSアカウントIDに、aws-cli-s3-role は次に作成するロール名に置き換えてください。

AWS CLI実行用のロールとポリシーの作成

次に、IAMユーザーが引き受けるためのIAMロール(例: aws-cli-s3-role)を作成します 。このロールが、実際にS3を操作するための権限を持ちます。

信頼ポリシーの設定
このロールの最も重要な設定が「信頼ポリシー」です。ここで、MFA認証を通過した場合にのみ、先ほど作成した aws-cli-user がこのロールを引き受けることを許可します 。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::cli-test-s3sync-target/*"
    }
  ]
}

cli-test-s3sync-target の部分は、操作対象のS3バケット名に置き換えてください 。

ローカルPCのAWS CLI設定

次に、ローカルPCのAWS CLI環境を設定します。

基本プロファイルの作成
まず、aws configure コマンドを使い、先ほど控えた aws-cli-user のアクセスキー情報を設定します 。このプロファイルはMFA認証の「元」としてのみ使用します。--profile オプションで任意のプロファイル名(例: aws-cli-user)を指定します。

aws configure --profile aws-cli-user

プロンプトが表示されるので、控えておいた情報を入力します 。

AWS Access Key ID [None]: [aws-cli-userのアクセスキーID]
AWS Secret Access Key [None]: [aws-cli-userのシークレットアクセスキー]
Default region name [None]: ap-northeast-1
Default output format [None]: json

ロール切り替え用プロファイルの作成 次に、MFA認証とロールの切り替えを行うためのプロファイルを作成します 。 ローカルPCの ~/.aws/config ファイル(Windowsの場合は C:\Users\[USERNAME]\.aws\config)をテキストエディタで開きます 。 aws configure で作成された [profile aws-cli-user-base] セクションの下に、以下のロール切り替え用プロファイル(例: [profile s3-operation-role])を追記します 。

[profile aws-cli-user]
region = ap-northeast-1
output = json
[profile s3-operation-role] source_profile = aws-cli-user role_arn = arn:aws:iam::[YOUR_AWS_ACCOUNT_ID]:role/aws-cli-s3-role mfa_serial = arn:aws:iam::[YOUR_AWS_ACCOUNT_ID]:mfa/aws-cli-mfa-test region = ap-northeast-1 output = json

source_profile: 認証の起点となる、先ほど設定した基本プロファイル名(aws-cli-user)を指定します 。
role_arn: 引き受けるIAMロール(aws-cli-s3-role)のARNを指定します 。
mfa_serial: 認証に使用するMFAデバイスのARNを指定します 。これがMFAコード入力を要求するために不可欠です 。

S3へのファイルアップロード実行

すべての設定が完了しました。いよいよS3へファイルをアップロードしてみましょう。

aws s3 cp コマンドを実行し、--profile オプションには、先ほど config ファイルに追記したロール切り替え用プロファイル(s3-operation-role)を指定します 。

aws s3 cp cli_test_data.csv s3://cli-test-s3sync-target/ --profile s3-operation-role

コマンドを実行すると、以下のようにMFAコードの入力を求められます 。

Enter MFA code for arn:aws:iam::[...]:mfa/aws-cli-mfa-test: MFAデバイスに表示されている6桁のコードを入力してEnterキーを押します 。

認証が成功すると、CLIが一時的なクレデンシャルを取得し、S3へのアップロードが実行されます 。
upload: cli_test_data.csv to s3://cli-test-s3sync-target/cli_test_data.csv


AWSマネジメントコンソールで対象のS3バケットを確認し、ファイルが正常にアップロードされていることを確認できました。
a639_04.png

まとめ

今回は、AWS CLIのセキュリティを強化するため、IAMユーザーのアクセスキーに直接権限を与えず、MFA認証を必須とするIAMロール(sts:AssumeRole)を経由させる方法を紹介しました。

この設定により、万が一aws-cli-userのアクセスキーが漏洩したとしても、攻撃者はMFAデバイスを持っていないためロールを引き受けることができず、不正な操作を防ぐことができます 。

AWS CLIは非常に便利ですが、クレデンシャルの管理には細心の注意が必要です。より安全にAWS CLIを利用するために、ぜひこの設定を導入してみてください。


もし「このサービスについて知りたい」「AWS環境の構築、移行」などのリクエストがございましたら、弊社お問合せフォームまでお気軽にご連絡ください。 複雑な内容に関するお問い合わせの場合には直接営業からご連絡を差し上げます。 また、よろしければ以下のリンクもご覧ください!
<QES関連ソリューション/ブログ>

<QESが参画しているAWSのセキュリティ推進コンソーシアムがホワイトペーパーを公開しました>

※Amazon Web Services、”Powered by Amazon Web Services”ロゴ、およびブログで使用されるその他のAWS商標は、米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。



  • このエントリーをはてなブックマークに追加

お問い合わせ

Contact

ご質問やご相談、サービスに関する詳細など、何でもお気軽にご連絡ください。下記のお問い合わせフォームよりお気軽に送信ください。

お問い合わせ

資料ダウンロード

Download

当社のサービスに関する詳細情報を掲載した資料を、下記のページよりダウンロードいただけます。より深く理解していただける内容となっております。ぜひご活用ください。

資料ダウンロード