AWS IAMとは?Identity and Access Management
AWS IAM (Identity and Access Management) は、誰または何がどのAWS APIを呼べるかを決めるサービスです。すべてのAWSアクションはIAMによって許可または拒否されます。
IAMはあなたのAWSアカウントの玄関口です。principals (users、roles、services)、パーミッションを付与または拒否するpolicies、そしてそれらがどう認証するかのルールを定義します。IAMを理解することは不可欠です。なぜなら、IAMが許可するまでpipelineはAWSに何もデプロイできないからです。
IAMの中核の構成要素
- Users - キーやパスワードを持つ、人のための長期のアイデンティティ。
- Roles - 一時的なクレデンシャルを持つassume可能なアイデンティティ、workloadに理想的。
- Policies - 許可および拒否されたアクションを列挙するJSONドキュメント。
- Groups - policiesを共有するusersのコレクション。
policyとパーミッション
policyはprincipalにアタッチされ、リソース (特定のbucketなど) に対するアクション (s3:PutObjectなど) を、オプションの条件とともに列挙します。IAMはdeny-by-defaultです: policyが付与しない限り何も許可されず、明示的なdenyは常に勝ちます。
least privilege
指針となる原則はleast privilegeです: principalが実際に必要とするパーミッションだけを付与します。広すぎるpolicyはよくあるセキュリティリスクなので、deploy roleはpipelineが触れる正確なリソースとアクションにスコープすべきです。
一時的なクレデンシャル
roleは、恒久的なキーではなくSTS経由で短命のクレデンシャルを発行します。クレデンシャルが自動的に期限切れになり保存する必要が一切ないため、これはより安全であり、自動化されたpipelineにとってまさに望むものです。
CI/CDでの役割
pipelineがIAM roleをassumeして一時的なクレデンシャルを得て、それからデプロイします。現代的なパターンはOIDCです: GitHub Actionsが署名されたトークンを提示し、IAMがそれを信頼し、deploy roleにスコープされた一時的なクレデンシャルを返します。これにより、長期のAWSキーがsecretsから完全に取り除かれます。
重要なポイント
- IAMは、users、roles、policiesを通じてすべてのAWSアクションをゲートします。
- IAMはdeny-by-default; least privilegeがdeploy roleをきつくスコープします。
- pipelineは、理想的にはOIDCを通じて、一時的なクレデンシャルのためにroleをassumeすべきです。