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?

More than 1 year has passed since last update.

インスタンスプロファイルをとことん掘ってみた

Posted at

インスタンスプロファイル削除コマンド

aws iam remove-role-from-instance-profile --instance-profile-name instance-profile-name --role-name role-name

IAMロールのセッション時間:1時間
IAMロールには管理者権限付与

まとめ

  • インスタンスプロファイルがないと認証情報がセットされず、セッション有効期限後に権限がなくなる
  • セッション有効期限の間は認証情報が有効なので古いインスタンスプロファイルの権限操作ができる

インスタンスプロファイル削除することによる挙動

インスタンスプロファイル情報

インスタンスプロファイル削除後、IAMコンソールで確認してみるとEC2のロールを作成するとあるはずの「インスタンスプロファイルの ARN」がなくなっている
インスタンスプロファイルがないとIAMロールを結び付けられないのでこれは重要
(参考)インスタンスプロファイルとは
https://qiita.com/sakai00kou/items/a4b96dcfa6bb3e656cd9

  • 元の状態
{
    "InstanceProfiles": [
        {
            "InstanceProfileId": "**********", 
            "Roles": [
                {
                    "AssumeRolePolicyDocument": {
                        "Version": "2012-10-17", 
                        "Statement": [
                            {
                                "Action": "sts:AssumeRole", 
                                "Effect": "Allow", 
                                "Principal": {
                                    "Service": "ec2.amazonaws.com"
                                }
                            }
                        ]
                    }, 
                    "RoleId": "**********", 
                    "CreateDate": "2023-03-07T15:00:51Z", 
                    "RoleName": "role-name", 
                    "Path": "/", 
                    "Arn": "arn:aws:iam::**********:role/role-name"
                }
            ], 
            "CreateDate": "2023-03-07T15:00:53Z", 
            "InstanceProfileName": "instance-profile-name", 
            "Path": "/", 
            "Arn": "arn:aws:iam::**********:instance-profile/instance-profile-name"
        }
    ]
}
  • インスタンスプロファイル削除後
aws iam list-instance-profiles-for-role --role-name  role-name
{
    "InstanceProfiles": []
}

AWS CLIによる権限確認

  • 元の状態
aws s3 ls
→バケット一覧が問題なく表示
  • プロファイル削除後
aws s3 ls
→バケット一覧が問題なく表示
aws s3 ls
An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
  • セッション無効化解除
    • セッション取り消し解除のために下記インラインポリシー削除
      AWSRevokeOlderSessions
aws s3 ls
→バケット一覧が問題なく表示
  • セッション有効時間経過後
 aws s3 ls
Unable to locate credentials. You can configure credentials by running "aws configure".

インスタンスメタデータ

  • 元の状態
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
role-name
  • プロファイル削除後
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
role-name
  • セッション時間経過後
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>404 - Not Found</title>
 </head>
 <body>
  <h1>404 - Not Found</h1>
 </body>
</html>

インスタンス

オペレーションを呼び出すために認証情報が使用される IAM ユーザーまたはロールに関する詳細を返します。
これを実行するのにIAMロールの権限はいらない
しかし、セッション時間経過後に記載のエラーの通りクレデンシャルは必要になる。
https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html

  • 元の状態
 aws sts get-caller-identity
{
    "Account": "**********", 
    "UserId": "**********:i-**********", 
    "Arn": "arn:aws:sts::**********:assumed-role/role-name/i-**********"
}
  • プロファイル削除後
 aws sts get-caller-identity
{
    "Account": "**********", 
    "UserId": "**********:i-**********", 
    "Arn": "arn:aws:sts::**********:assumed-role/role-name/i-**********"
}
  • セッション時間経過後
aws sts get-caller-identity
Unable to locate credentials. You can configure credentials by running "aws configure".

設定ファイルと認証情報ファイルの設定

aws sts get-caller-identityが発生した理由は認証情報がセットされなかったと話したので確認する。

  • 元の状態
aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************ZOXG         iam-role    
secret_key     ****************tDAi         iam-role    
    region                <not set>             None    None
  • プロファイル削除後
aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************ZOXG         iam-role    
secret_key     ****************tDAi         iam-role    
    region                <not set>             None    None
  • セッション時間経過後
aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key                <not set>             None    None
secret_key                <not set>             None    None
    region                <not set>             None    None

インスタンスプロファイルを再度作成

再作成→IAMロールに関連付け→インスタンスに再アタッチ→再起動で正常になる
再度作成してみるとインスタンスプロファイルの ARNが再度表示された

aws iam create-instance-profile --instance-profile-name instance-profile-name
{
    "InstanceProfile": {
        "Path": "/",
        "InstanceProfileName": "instance-profile-name",
        "InstanceProfileId": "****************",
        "Arn": "arn:aws:iam::****************:instance-profile/instance-profile-name",
        "CreateDate": "2023-03-08T02:38:54+00:00",
        "Roles": []
    }
}
aws iam add-role-to-instance-profile --instance-profile-name instance-profile-name --role-name role-name
aws ec2 describe-iam-instance-profile-associations

下のようにメタデータを確認するとプロファイルがロールに関連づいてない旨のエラーが表示
インスタンスプロファイルは古いプロファイルの情報を参照しているため、コンソール画面から新しいインスタンスプロファイルをアタッチ
メタデータの更新のために停止して起動
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html

  • インスタンスプロファイル再アタッチ直後
curl http://169.254.169.254/latest/meta-data/iam/info
{
  "Code" : "Success",
  "Message" : "Instance Profile does not contain a role. Please see documentation at https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_iam-ec2.html#troubleshoot_iam-ec2_errors-info-doc.",
  "LastUpdated" : "2023-03-08T03:22:55Z",
  "InstanceProfileArn" : "arn:aws:iam::****************:instance-profile/instance-profile-name",
  "InstanceProfileId" : "****************"
}
  • インスタンス停止して起動後
curl http://169.254.169.254/latest/meta-data/iam/info
{
  "Code" : "Success",
  "LastUpdated" : "2023-03-09T07:52:06Z",
  "InstanceProfileArn" : "arn:aws:iam::**************:instance-profile/instance-profile-name",
  "InstanceProfileId" : "**************"
}

認証情報もセットされてるし、その他の操作も問題なくできてた

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?