LoginSignup
0
0

【Python x AWS】「botocore.exceptions.ClientError.......is not authorized to perform: sts:AssumeRole」エラーの原因と解決法

Posted at

概要

IAMユーザーでboto3を使ったら以下の権限エラーになりました。
解決できたので原因と解決方法を紹介します。

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::xxx:user/taro is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::xxx:role/xxxxx

原因と解決方法

エラーメッセージから、IAMユーザーtarosts:AssumeRole操作を行う権限がないことがわかります。sts:AssumeRole操作は、一つのIAMエンティティ(ユーザー、グループ、ロール)が別のIAMロールを「引き受ける」ために必要なもの。

Roleという名前が入っているのでややまぎわらしいですが、これ自体はIAMロールではありません。「アクセスキー」、「シークレットキー」、「セッショントークン」、3つの認証情報を発行してくれるサービスです。

AWS Security Token Service (AWS STS) を使用して、AWS リソースへのアクセスをコントロールできる一時的セキュリティ認証情報を持つ、信頼されたユーザーを作成および提供することができます。
引用元:https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_temp.html

sts:AssumeRole操作の権限を付与するポリシーを追加するには以下のようにします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::xxx:role/xxxxx"
        }
    ]
}

これでもまだ同様のエラーが発生する場合は、引き受けようとしているIAMロール(上記ではxxx:role/xxxxx)の信頼ポリシーが、IAMユーザーtaroがそのロールを引き受けることを許可していない、という可能性があり。

ロールの信頼ポリシーを更新してあげれば良いということになります。
AWS管理コンソールの「IAM」->「ロールxxx:role/xxxxx」->「信頼関係」->「編集」から、以下のように信頼ポリシーを付与します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::xxx:user/taro"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

上記は、あくまで疎通確認的な試験で実施したもの。
恒久的に上記のような例外的な特別な信頼関係とポリシーを付与しておくのはあまり推奨されないと思いますので、あくまで試験的(一時的)に使う時には良いかなと思います。

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