web-dev-qa-db-ja.com

AWS CLIからサーバーで使用されているロールを見つける

IAMロールがアタッチされているEC2インスタンスで、AWS CLIからこのロールを実際に使用していることを確認できるようにしたいと思います。

私はこのようなものを呼び出すことができると想像しています(しかし、CLIドキュメントでそのようなものを見つけることができません):

$ aws get-current-role-details

この機能はありますか?

15
Ryan Tuck

AWS STSコマンドget-caller-identityを参照してください。

資格情報がAPIの呼び出しに使用されるIAM IDに関する詳細を返します。

$ aws sts get-caller-identity
{
    "Account": "0123456789",
    "UserId": "AROAxxx:i-abc123",
    "Arn": "arn:aws:sts::0123456789:assumed-role/EMR_EC2_DefaultRole/i-abc123"
}

次に、ロール名を取得し、IAMにロールの詳細をクエリできます。

$ aws iam list-attached-role-policies --role-name EMR_EC2_DefaultRole
{
    "AttachedPolicies": [
        {
            "PolicyName": "AmazonElasticMapReduceforEC2Role",
            "PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforEC2Role"
        },
        {
            "PolicyName": "AmazonEC2RoleforDataPipelineRole",
            "PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforDataPipelineRole"
        }
    ]
}
33
Tyrone321

残念ながら、その情報を取得する簡単な方法はありません。次のパスを経由する必要があります。

手順1.インスタンスメタデータから現在のEC2インスタンスIDを取得します。

curl -s http://169.254.169.254/latest/meta-data/instance-id

現在のリージョンも必要になる場合があります。

curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/\(.*\)[a-z]/\1/'

ステップ2. EC2インスタンスにアタッチされているIAMインスタンスプロファイルのIDを取得します。

aws ec2 describe-instances \
    --region us-east-1 \
    --instance-id i-12345678 \
    --query 'Reservations[0].Instances[0].IamInstanceProfile.Id'

必要に応じて、EC2インスタンスIDとリージョンを忘れずに置き換えてください。

ステップ3. IAMインスタンスプロファイルの役割を取得します。

aws iam list-instance-profiles \
    --query "InstanceProfiles[?InstanceProfileId=='ABCDEFG'].Roles"

IAMインスタンスプロファイルIDを忘れずに置き換えてください。

ノート:

  • IAMインスタンスプロファイルには、複数のIAMロールが関連付けられている場合があります。通常は1つだけですが、さらに多くなることもあります。
7
Matt Houser

現在のロールの詳細を取得する、よりシンプルでエレガントな方法があります。

$ curl http://169.254.169.254/latest/meta-data/iam/info

{
  "Code" : "Success",
  "LastUpdated" : "2019-05-08T13:15:52Z",
  "InstanceProfileArn" : "arn:aws:iam::xxxxxxxxxxxx:instance-profile/rolename",
  "InstanceProfileId" : "AIPAIFNV5UU4JJLAXXXXX"
}

InstanceProfileArnでは、ロール名を確認できます

6
Aditya Jangid