TL;DR
IAMユーザーのアクセスキーを使わずIAMロールを使おう。
背景
無性にアプリケーションにAWSのアクセス権限を付与したいときありますよね。
過去にAWSを触っていた際に、頑張ってたどり着いたのがコード上でクライアントにアクセスキーを付与する方法でした。
C#AmazonS3Client(Access Key, Secret Key);
当時はやったー動いたと思っていたのですが、AWS認定試験の勉強をする際になんとこの方法はセキュリティを弱めるのでNGと不正解の選択肢になっていました。
ちなみに正しいやり方はIAMロールをインスタンスに割り当てることです。
なぜIAMロールを使うべきなのか
まず、IAMユーザーのアクセスキーは「長期的な認証情報」作成します。なのでアプリケーションにアクセスキーを埋め込むと同じ認証情報を使いまわすことになり、これは漏洩のリスクを高めることになります。
対してIAMロールは、一時的なセキュリティ認証情報を提供します。この認証情報は自動的にローテーションされるため漏洩のリスクが格段に低くなります。またIAMロールの使用状況を監査することができます。こちらのが安全なうえに管理もしやすそうです。
じゃあアクセスキーいつ使うの
IAMロールの方がセキュリティ上優れていることは明白ですが、アクセスキーにも使用すべき場面があります。調べた結果下記の用途で使用されるそうです。
1. IAMロールを使用できないワークロード
例えば、WordPressプラグインの中にはAWSへのアクセス権限を必要とするが、ロールを付与できないものがあります。その場合にアクセスキーを入力することで権限を与えます。
2. サードパーティのAWSクライアント
そもそもそんなものがあるんですねとまたひとつ知識が増えました。例を挙げると、Cyberduckといったサービスがある様です。
おまけ
認証情報は複数の場所に配置されるのでどの認証情報を使うかわからないと困りますね。安心してください。優先順位をつけてくれています。
詳しくは下記リンクを参考にしてください。