インスタンスプロファイル削除コマンド
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" : "**************"
}
認証情報もセットされてるし、その他の操作も問題なくできてた