【Switch Role】特定のIAMユーザだけに権限を付与するには?信頼済アクセスを編集!

AWS

こんにちはますのです。
先日、複数のAWSアカウントを1つのIAMアカウントで跨いでアクセス出来るようにする方法を調べました。

【AWS SSO】【Switch Role】複数のAWSアカウントでログインを簡単に!

結果としてSwitch Roleを実装するようになり、IAMロールを触っていたのですが1つ問題が。。。
初期設定だとスイッチ元となる全IAMユーザ(正確にはAWSアカウントのroot権限)にアクセス権限を渡してしまうのです。
わたしの考えとしては「管理者グループに所属しているIAMユーザだけ」スイッチロールが出来るようにしたいのに…。

まぁ、グループを指定すれば余裕やで。と思い、信頼関係の編集からIAMロールのJSONを編集したところエラーが出ました。

エラーが発生しました: Invalid principal in policy: “AWS”:”arn:aws:iam::<スイッチ元AWSアカウントID>:group/<管理者グループ名>”
2020/9/26追記
検証アカウントに「AdministratorAccess」がついていたので、全IAMユーザと勘違いしていました…。
正確には「sts:AssumeRole」の権限をスイッチ元の各IAMグループに設定すれば行けることを確認しましたので訂正します。
【Switch Role】特定のIAMグループのみに権限を付与する

JSON:principalに対してIAMグループを設定することは出来ない

どうやら2020年8月時点では、JSONの要素「principal」にグループを指定することは出来ないようです。

指定出来るPrincipal一覧

ポリシーでは、次のいずれかのプリンシパルを指定できます。

  • AWS アカウントと ルートユーザー
  • IAM ユーザー
  • フェデレーティッドユーザー(ウェブ ID または SAML フェデレーションを使用)
  • IAM ロール
  • ロールを引き受けるセッション
  • AWS サービス
  • 匿名ユーザー(非推奨)

引用:AWS JSON ポリシーの要素:Principal

管理者のIAMグループにどうにかして付与出来るものは無いかと考えましたが、ポリシーしか当てられなさそうなので筆者の知識では「無い」と結論になりました。

IAMユーザを指定する方法

運用上、IAMポリシーを管理する必要が出てしまうので避けたかったのです。
そこまで人数が多くない、頻度は少ないということもあり色々なものを天秤にかけた結果、今回はIAMユーザを設定する方法を取りました。

参考:https://dev.classmethod.jp/articles/cross-account-iam-role-tips/

2020/9/26追記
筆者の環境では、スイッチ元のIAMグループに「sts:AssumeRole」の権限を付与して管理する方法を採用しました。
ここから先の設定はIAMユーザを個別に指定するやり方になります。

変更する場所

  1. スイッチ先のAWSアカウントにログイン
  2. IAM>ロール>スイッチ用の作成したIAMロールを選択
  3. タブ:信頼関係>信頼関係の編集をクリック

変更前のJSON(デフォルト状態)

このJSONは指定したAWSアカウント(123456789012)のrootにスイッチロールの権限が付与されます。

{ 
 "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {"Bool": { "aws:MultiFactorAuthPresent": "true"}}
    }
  ]
}

変更後のJSON(IAMユーザを指定)

指定したAWSアカウント(123456789012)のIAMユーザ1~3に対してのみ、スイッチロールの権限を付与します。

{ 
 "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/<iamユーザ名1>",
        "AWS": "arn:aws:iam::123456789012:user/<iamユーザ名2>",
        "AWS": "arn:aws:iam::123456789012:user/<iamユーザ名3>"
      },
      "Action": "sts:AssumeRole",
      "Condition": {"Bool": { "aws:MultiFactorAuthPresent": "true"}}
    }
  ]
}
MFAを設定しなくても良い場合は、「Condition」の中身を全部消しましょう。
“Condition”: {}
棚卸は面倒ですが、スイッチ元のIAMユーザのみ消してしまえば良いので良しとしましょう。
JSON側の許可設定が残っていても対象のIAMユーザを消していれば効果は発揮しませんからね。監査の時に何か言われるのでIAMユーザ削除とセットにしたほうが良いのは町が無い無いですが。。。
最新情報をチェックしよう!