Credentialなしで他のAWSにアクセスする方法

こちらも面接官の方にいただいた質問で、きちんと答えられなかったので知らながらまとめてみます。

Assume role, trust policy

Policyを作って、その中のActionにAssumeRoleを指定し、許可を与える先のアカウントと、そのロールを指定する。

これが最もシンプルな例

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

こんな感じで、アクセスする時間(期間)を限定することもできる

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "DateGreaterThan": {
          "aws:CurrentTime": "2020-09-01T12:00:00Z"
        },
        "DateLessThan": {
          "aws:CurrentTime": "2020-09-07T12:00:00Z"
        }
      }
    }
  ]
}

これはアクセス元のIPアドレスを限定する例

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "203.0.113.0/24"
        }
      }
    }
  ]
}

まとめ

ここに挙げた様に、Policyを設定することにより他のアカウントからのアクセスを簡単に許可することができる。シンプルに指定するだけでも良いが、よりセキュリティを強固にするために、できるだけ期間の指定やMFAの指定をすることにより安全性を高めたい。


この記事が気に入ったらサポートをしてみませんか?