AWS勉強メモ

0x00 背景

0x01 サービス毎のメモ

  1. STS
    https://aws.amazon.com/premiumsupport/knowledge-center/iam-restrict-calls-ip-addresses/
    APIコールをIPで制限したい場合、公式にはこのようなやり方が推奨されている。自分は疑問に思うのは、ここの Sample IAM User Policy の所に aws:SourceIp の制限をつけるのと Sample IAM Role Trust Policy に aws:SourceIp の制限をつけるのは違うのか?

    実際に試してみよう。
    例えば test-user-nevermoe という user にこのようなポリシーをアタッチする:
    {
    "Version": "2012-10-17",
    "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::123456789012:role/test-role-nevermoe",
    "Condition": {
    "IpAddress": {
    "aws:SourceIp": "1.2.3.4/32"
    }
    }
    }
    }

    この場合は test-user-nevermoe という user は 1.2.3.4 からログインする時に限って、test-role-nevermoe に aAssumeRole できることが確認した。

    次に、このような Trust Policy を test-role-nevermoe にアタッチしてみよう:
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": "arn:aws:iam::0123456789012:user/test-user-wan"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
    "IpAddress": {
    "aws:SourceIp": "1.2.3.4/32"
    }
    }
    }]
    }

    この場合も同じく、test-user-wan のログイン IP が 1.2.3.4 の時にのみ、test-role-nevermoe に AssumeRole できる。

    この二つのやり方は違いがないが、role のほうに Policy で制限した方が管理しやすいかもしれない。ただし、個人的には、user を棚卸しするときの利便性を考えると、やはり user 側で IP 制限を書いた方が楽では?

  2. KMS
    KMS には Master Key が保存されており、Master Key は AWS から離れることはない。要するにユーザーである我々でも自分自身の Master Key を見ることはできない。データを暗号化する時に Data Key が発行され、データを Data Key で暗号化し (AWSがやってくれるか(Server-Side-Encryption)、ユーザー自身がやる(Client-Side-Encryption) )、平文の Data Key が破棄される (ユーザー自身で暗号化する時にユーザー自身で破棄する)。ただし Master Key で暗号化された Data Key は暗号化されたデータと一緒に保存される。復号したい時に暗号化された Data Key を KMS に復号を依頼して、平文の Data Key を手に入れる。平文の Data Key を使ってさらにデータを復号する。という仕組みらしい。