※当サイトの記事には、広告・プロモーションが含まれます。

AWSのIAM(AWS Identity and Access Management)とAWSのリソースの関係について整理してみる

gigazine.net

⇧ 若くて才能もあるのに、その能力を犯罪に活用してしまうとは惜しいことですな。

まさに、

YODA: Twisted by the dark side, young Skywalker has become. The boy you trained, gone he is . . . Consumed by Darth Vader.

https://imsdb.com/scripts/Star-Wars-Revenge-of-the-Sith.html

⇧「スター・ウォーズ エピソード3/シスの復讐 Star Wars: Episode III – Revenge of the Sith(監督:ジョージ・ルーカス)」での台詞が浮かんでしまいますな...

IAM(AWS Identity and Access Management)とは?

AWSAmazon Web Services)のドキュメントによりますと、

docs.aws.amazon.com

AWS Identity and Access Management (IAM) は、AWS リソースへのアクセスを安全に管理するためのウェブサービスです。IAM を使用すると、ユーザーがアクセスできる AWS のリソースを制御するアクセス許可を集中管理できます。IAM により、誰を認証 (サインイン) し、誰にリソースの使用を承認する (アクセス許可を持たせる) かを制御します。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/introduction.html

⇧ とのこと。

AWS リソース」はと言うと、

docs.aws.amazon.com

リソース

リソースはAWSユーザーが操作できるエンティティです。リソースはAWS のサービス、サービスの機能を使用するときに作成されます。

https://docs.aws.amazon.com/ja_jp/resource-explorer/latest/userguide/getting-started-terms-and-concepts.html

例として、Amazon EC2 インスタンスAmazon S3 バケットAWS CloudFormationスタックなどがあります。一部のリソースタイプには顧客データを含めることができます。

https://docs.aws.amazon.com/ja_jp/resource-explorer/latest/userguide/getting-started-terms-and-concepts.html

すべてのリソースタイプには、名前、説明、リソースを一意に参照するために使用する Amazon リソースネーム (ARN) など、リソースを説明する属性またはメタデータがあります。ほとんどのリソースタイプはタグもサポートしています。タグはカスタムメタデータで、請求時のコスト配分属性ベースのアクセス制御によるセキュリティ認証、その他の分類ニーズへの対応など、さまざまな目的でリソースに添付できます。

https://docs.aws.amazon.com/ja_jp/resource-explorer/latest/userguide/getting-started-terms-and-concepts.html

⇧ う~ん、AWSにおける「エンティティ」が何なのかについては、見つからなかった...用語の説明はちゃんとして欲しい...

AWSにおける「IAM(AWS Identity and Access Management)」の「IAM エンティティ」については、

docs.aws.amazon.com

規約

前の図では、リソースへのアクセスを取得する方法を説明するために特定の用語を使用しました。これらの IAM 用語は、AWS と連携する際によく使用されます。

IAM エンティティ

AWS によって認証に使用される IAM リソースオブジェクト。これらには、IAM ユーザーおよびロールが含まれます。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/intro-structure.html

⇧ という説明が出ては来るけども、AWSにおける「エンティティ」が何なのかは説明がないので推測になるんだが、何らかの「リソース オブジェクト」ってことになるんだろうか?

リクエス

プリンシパルAWS Management Console、AWS API、または AWS CLI を使用しようとすると、プリンシパルAWSリクエスを送信します。リクエストには、以下の情報が含まれます。

  • プリンシパル – エンティティ (ユーザーまたはロール) を使用してリクエストを送信するユーザーまたはアプリケーション。プリンシパルに関する情報には、プリンシパルがサインインに使用したエンティティに関連付けられたポリシーが含まれます。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/intro-structure.html

AWSにおける「エンティティ」が何なのか、ますます分からん...

docs.aws.amazon.com

AWS Identity and Access Management (IAM) のユーザーとは、AWS で作成したエンティティのことです。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_users.html

⇧ だから、AWSにおける「エンティティ」が何なのかを何故、ドキュメントで説明してくれないんだろうか...

AWSにおける「IAM(AWS Identity and Access Management)」のアーキテクチャ図はと言うと、

docs.aws.amazon.com

IAMの仕組み

IAM は、AWS アカウント の認証と許可を制御するために必要なインフラストラクチャを提供します。IAM のインフラストラクチャーは、次の図で示されています。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/intro-structure.html

⇧ ドキュメントに載ってはいるんだけど、登場人物とそれぞれの関係性が分かり辛い...

AWSのIAM(AWS Identity and Access Management)とAWSのリソースの関係について整理してみる

「IAM(AWS Identity and Access Management)」を経由して「AWS リソース」にアクセスする必要があるという話なので、「IAM(AWS Identity and Access Management)」へアクセスする必要があるのだと思うけど、

IAM へのアクセス

次のいずれかの方法で AWS Identity and Access Management を使用できます。

AWS Management Console

コンソールは IAM および AWS リソースを管理するためのブラウザーベースのインターフェイスです。コンソールから IAM にアクセスする方法の詳細については、AWS サインイン ユーザーガイドの「AWS へサインイン方法」を参照してください。

AWS コマンドラインツール

AWS コマンドラインツールを使用して、システムのコマンドラインでコマンドを発行することで、 IAM および AWS タスクを実行できます。コマンドラインを使用すると、コンソールよりも高速で便利になります。コマンドラインツールは、AWS のタスクを実行するスクリプトを作成する場合にも便利です。

AWS には、AWS Command Line Interface(AWS CLI) と AWS Tools for Windows PowerShellという 2 セットのコマンドラインツールが用意されています。AWS CLI のインストールおよび使用の方法については、「AWS Command Line Interface ユーザーガイド」を参照してください。Tools for Windows PowerShell のインストールおよび使用の方法については、AWS Tools for Windows PowerShellユーザーガイド を参照してください。

AWS SDK

AWS には、さまざまなプログラミング言語およびプラットフォーム (JavaPythonRuby、.NET、iOSAndroid など) のライブラリとサンプルコードで構成された SDK (ソフトウェア開発キット) が用意されています。SDK は、IAM や AWS へのプログラムによるアクセス権限を作成する際に役立ちます。例えば、SDK は要求への暗号を使用した署名、エラーの管理、要求の自動的な再試行などのタスクを処理します。AWS SDK のダウンロードやインストールなどの詳細については、「アマゾン ウェブ サービスのツール」ページを参照してください。

IAM Query API

サービスに HTTPS リクエストを直接発行できる IAM Query API を使用して、プログラムにより IAM と AWS にアクセスできます。Query API を使用する場合は、認証情報を使用してリクエストにデジタル署名するコードを含める必要があります。詳細については、「HTTP クエリリクエストを使用した IAM API の呼び出し および IAM API リファレンス」を参照してください。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/introduction.html

⇧ ドキュメントによると、

  1. AWS Management Console
  2. AWS コマンドラインツール
  3. AWS SDK
  4. IAM Query API

の4つの方法で「IAM(AWS Identity and Access Management)」を利用できるって言っているのだけど、

qiita.com

www.yone-it-note.site

blog.g-gen.co.jp

⇧ 上記サイト様によりますと、「プリンシパル」に「アプリケーション」が含まれることから、「アプリケーション」で「AWS SDK」を呼び出してることを考えると、「AWS SDK」は「IAM(AWS Identity and Access Management)」を構成する要素の一部になると言えるんじゃないかというので、自分の理解が混乱している...

ドキュメントの「IAM へのアクセス」の説明の書きっぷりだと、「AWS SDK」は「IAM(AWS Identity and Access Management)」を構成する要素の一部ではないということだと思うのだけど...

まぁ、何が言いたいかと言うと、「AWS SDK」を利用して「AWS リソース」のAPIを使用するのに用意する必要がある情報が分かり辛いんだわ...

aws.amazon.com

AWS Identity and Access Management (IAM) を使用すると、複数の種類の、IAM ユーザーの長期的なセキュリティ認証情報を管理できます。

IAM ユーザーに AWS のセキュリティ認証情報を割り当てるには、APICLI、または AWS マネジメントコンソールを使用します。これらの認証情報はいつでもローテーションや取り消しが可能です。

https://aws.amazon.com/jp/iam/features/managing-user-credentials/

このようなユーザー認証情報の管理に加え、Multi-Factor Authentication (MFA) を義務づけることで、AWS への IAM ユーザーアクセスのセキュリティをさらに強化できます。

AWS における長期的なセキュリティ認証情報の使用の詳細については、AWS セキュリティの認証情報を参照してください。

https://aws.amazon.com/jp/iam/features/managing-user-credentials/

⇧ とりあえず、「AWS SDK」を利用して「AWS リソース」を使用するには、「アクセスキー」を用意しておく必要がありますと。

「アクセスキー」はと言うと、

docs.aws.amazon.com

アクセスキーは、IAM ユーザーまたは AWS アカウントのルートユーザー の長期的な認証情報です。アクセスキーを使用して、AWS CLI または AWS API (直接または AWS SDK を使用) にプログラムでリクエストに署名することができます。詳細については、『AWS』の「Amazon Web Services 全般のリファレンス API リクエストの署名」を参照してください。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html

重要

ベストプラクティスとしては、アクセスキーのような長期的認証情報ではなく一時的なセキュリティ認証情報 (IAM ロール) を使用して、AWS アカウントのルートユーザー アクセスキーは作成しないようにします。ルートユーザーのアクセスキーを作成すると、請求情報を含むを含むすべての AWS のサービス のリソースへのフルアクセスが可能になるため、お勧めしません。詳細については、「AWS Account Management リファレンスガイド」の「AWS アカウント のベストプラクティス」を参照してください。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html

アクセスキーは、アクセスキー ID (例: AKIAIOSFODNN7EXAMPLE) とシークレットアクセスキー (例: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY) の 2 つの部分から構成されています。リクエストを認証するために、アクセスキー ID とシークレットアクセスキーの両方を使用する必要があります。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html

アクセスキーペアを作成する場合は、アクセスキー ID とシークレットアクセスキーを安全な場所に保存します。このシークレットアクセスキーは、作成時にのみ使用できます。シークレットアクセスキーを紛失した場合は、そのアクセスキーを削除し、新しく作成する必要があります。詳細については、「紛失したり忘れたりしたパスワードまたは AWS のアクセスキーのリセット」を参照してください。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html

⇧ とのこと。

何故か、ドキュメントの「トピック」で「AWS SDK」の場合の「アクセスキー」の扱い方について触れられていないという...

何やら、

docs.aws.amazon.com

Important

If you use an AWS SDKs (see Sample Code and Libraries) or AWS command line (CLI) tool to send API requests to AWS, you can skip this section because the SDK and CLI clients authenticate your requests by using the access keys that you provide. Unless you have a good reason not to, we recommend that you always use an SDK or the CLI.

In Regions that support multiple signature versions, manually signing requests mean you must specify which signature version is used. When you supply requests to Multi-Region Access Points, SDKs and the CLI automatically switch to using Signature Version 4A without additional configuration.

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html

⇧「アクセスキー」を使うことを推奨してる感じなんかね?

とりあえず、ザックリとまとめると、

  • AWS リソース」は、AWSのサービスを利用する時に作られるもの。
  • AWS リソース」を利用するには、「IAM(AWS Identity and Access Management)」経由でのアクセスが必要。
  • 「IAM(AWS Identity and Access Management)」へのアクセスは、
    1. AWS Management Console
    2. AWS コマンドラインツール
    3. AWS SDK
    4. IAM Query API
    の4つの方法がある。
  • AWS SDK」を利用して「AWS リソース」を使用するには、「アクセスキー」によるAPIの認証が必要。

ってことになる感じですかね?

AWS SDK」による「AWS リソース」の利用については、

docs.aws.amazon.com

SDK は、Amazon Web Servicesの使用をリクエストする前にAWS SDK for Java 2.x、によって発行された一時的な認証情報に暗号で署名します。AWS一時的な認証情報にアクセスするために、SDK は複数の場所を確認して設定値を取得します。

https://docs.aws.amazon.com/ja_jp/sdk-for-java/latest/developer-guide/credentials.html

⇧ とあるので、「アクセスキー」を元に更に「一時的な認証情報」を生成すると言った感じなんですかね?

「アクセスキー」はともかく、「一時的な認証情報」と「設定値」って用語が急に何の説明もなく出てくるので、具体的に何なのかがサッパリ分からんですな...

う~む、AWSもドキュメントが追い辛いっすな...

もう少し、必要な情報と必要な情報を用意するために必要なことがパッと分かるようなドキュメントに整備して欲しいと感じてしまうよね...

毎度モヤモヤ感が半端ない...

今回はこのへんで。