0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EC2 に S3 権限を渡すなら Access Key 配布は禁止|IAM Role と iam:PassRole を整理する

0
Posted at

EC2 に S3 権限を渡すなら Access Key 配布は禁止|IAM Role と iam:PassRole を整理する

EC2 から S3 にアクセスさせたいとき、まだ Access Key をサーバーに置く 方向で考えてしまう人がいます。

ですが、これは AWS ではかなり筋の悪い設計です。鍵の配布、ローテーション、漏えい時の追跡、不要になった後の回収まで、全部あとで自分の首を絞めます。

この記事では、EC2 に S3 権限を安全に渡す基本形 を整理します。結論から言うと、使うのは長期 Access Key ではなく IAM Role です。そして、その Role を EC2 に渡す操作を許可する権限が iam:PassRole です。


まず結論

先に結論を書くと、考え方はシンプルです。

  • EC2 に S3 権限を渡すなら IAM Role を使う
  • EC2 に長期 Access Key を埋め込まない
  • その Role を EC2 に関連付ける権限として iam:PassRole が必要になる

つまり、

  • 何の権限を持たせるか → IAM Role
  • 誰がその Role を EC2 に渡せるか �� iam:PassRole

この 2 つは別の論点です。ここを混ぜると、試験でも実務でも簡単に事故ります。


なぜ Access Key 配布が危ないのか

EC2 インスタンスに Access Key と Secret Access Key を直接置く方式は、動くことは動きます。ですが、運用としてはかなり危ないです。

たとえば次の問題が出ます。

  • サーバー内に長期認証情報が残る
  • 誰が使った鍵か追いにくい
  • ローテーションが面倒
  • AMI や設定ファイルに鍵が残る事故が起きやすい
  • 複数台構成だと配布と回収が地味に破綻する

たとえば Auto Scaling で EC2 が増減する構成だと、毎回鍵を配って整合を取る運用はかなり不格好です。AWS らしく設計するなら、インスタンス自身が一時認証情報を受け取る 形に寄せるべきです。


IAM Role を使うと何が変わるのか

IAM Role を EC2 に付与すると、EC2 はインスタンスメタデータ経由で一時的な認証情報を取得できます。

これにより、アプリケーションは Access Key をベタ書きしなくても、SDK や CLI の標準認証フローで S3 にアクセスできます。

たとえば EC2 側では、次のように普通に AWS CLI を使えます。

aws s3 ls s3://example-bucket

コードや設定ファイルに鍵を埋めなくてよいので、かなり健全です。

IAM Role を使うメリット

  • 長期 Access Key を配布しなくてよい
  • 認証情報が自動でローテーションされる
  • インスタンス単位で役割を分けやすい
  • 最小権限で設計しやすい
  • 漏えい面積を減らしやすい

要するに、鍵を配る設計から、役割を割り当てる設計へ切り替える のがポイントです。


インスタンスプロファイルも一緒に押さえる

実務や試験で少しややこしいのが、IAM Role とインスタンスプロファイル の関係です。

EC2 に Role を関連付けるとき、裏側ではインスタンスプロファイルが使われます。細かい内部構造まで毎回意識する必要はありませんが、少なくとも次の整理はしておくと迷いません。

  • IAM Policy:何をしてよいかを定義する
  • IAM Role:その権限の入れ物
  • Instance Profile:EC2 に Role をひも付けるための仕組み

試験では細かい API 名より、EC2 に権限を持たせるならユーザーではなく Role という軸を持っておく方が大事です。


iam:PassRole は���を許可するのか

ここがよく混同されるポイントです。

iam:PassRole は、ある IAM Role を AWS サービスへ渡すことを許可する権限です。EC2 の場合なら、特定の Role をインスタンスにアタッチす���ときに関係します。

つまり、iam:PassRole が見ているのは S3 へのアクセス権そのもの ではありません。

見ているのは、その Role を渡してよいかどうか です。

たとえばこう分けて考える

論点 使うもの
EC2 から S3 を読ませたい S3 権限を持つ IAM Role
その Role を EC2 に付けさせたい iam:PassRole

この切り分けができると、問題文で「EC2 に権限を付与したい」と「管理者がその Role を割り当てたい」が別の話だと見抜けます。


最小構成のイメージ

たとえば、EC2 から特定バケットのオブジェクトを読むだけなら、次のような構成が基本です。

  1. S3 読み取り権限を持つ IAM Policy を作る
  2. その Policy を IAM Role に付与する
  3. その Role を EC2 に関連付ける
  4. EC2 上のアプリは SDK / CLI の標準認証を使う

S3 側の権限イメージはたとえばこうです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject"],
      "Resource": ["arn:aws:s3:::example-bucket/*"]
    }
  ]
}

本番では s3:* のような雑な権限ではなく、���要なバケットと必要な操作だけに絞るべきです。ここを雑にすると、Role を使っていても普通に危ないです。


試験で迷いやすいポイント

AWS 認定試験では、次のようなひっかけがよく出ます。

1. Access Key を EC2 に保存させる選択肢

  • 一見すぐ動きそうですが、基本的には外れ寄りです
  • 正解は IAM Role を選ばせたいケースが多いです

2. iam:PassRole を S3 権限と勘違いする

  • iam:PassRole は Role を渡すための権限 です
  • S3 そのものを読む権限は Role に付いた Policy で決まります

3. IAM User を EC2 用に作る

  • 人の認証とワークロードの認証を混ぜると荒れます
  • EC2 のような AWS リソースには Role を使う のが基本です

問題文で「安全に AWS サービスへアクセスしたい」「認証情報の管理を簡素化したい」「長期キーを避けたい」と書いてあれば、まず Role を疑うべきです。


実務で見るべきチェックポイント

実務では、Role を使えば終わりではありません。少なくとも次は確認したいです。

  • Role の権限が広すぎないか
  • 対象バケットが限定されているか
  • CloudTrail で利用状���を追えるか
  • インスタンス起動時に正しい Role が付くか
  • 不要になった Role が放置されていないか

たとえば開発環境では雑に通っても、本番で AdministratorAccess 相当の Role を EC2 に付けるのは、さすがに雑すぎます。Role を使うこと最小権限で設計すること はセットです。


まとめ

EC2 に S3 権限を渡したいとき、長期 Access Key をサーバーへ配るのは、もう古くて危ないやり方です。

  • EC2 に権限を持たせるなら IAM Role
  • Role を EC2 に渡す操作の制御は iam:PassRole
  • S3 権限そのものは Role に付いた Policy で決まる

この 3 つを分けて理解しておくと、試験でも実務でもかなり強いです。

AWS では、鍵を配るより役割を渡す。まずはこの基本を崩さないのが正解です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?