aws:SourceArn と aws:SourceAccount の役割を整理する
AWSサービス間のアクセスで、呼び出し元のリソースとAWSアカウントを制限する aws:SourceArn と aws:SourceAccount の違いを整理する
今日やったこと
aws:SourceArnとaws:SourceAccountの役割を整理した- AWSサービスを
Principalに指定するだけでは、許可範囲が広くなる場合があると確認した Conditionを使って、呼び出し元のリソースやAWSアカウントを限定する方法を確認した- これらの条件が confused deputy 問題への対策になることを知った
学んだこと
AWSサービスをPrincipalにする場合の注意点
AWSサービスにリソースへのアクセスを許可する場合、次のようにサービスを Principal に指定する。
{
"Principal": {
"Service": "s3.amazonaws.com"
}
}
ただし、これだけでは「S3サービスからの呼び出し」という大きな範囲で許可することになる。
そこで Condition に aws:SourceArn や aws:SourceAccount を指定し、呼び出し元をさらに限定する。
aws:SourceArnとは
aws:SourceArn は、どのAWSリソースを発生元とする呼び出しなのかを確認する条件キー。
たとえば、特定のS3バケットからSNSトピックへの通知だけを許可したい場合、次のように指定できる。
{
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:ap-northeast-1:123456789012:example-topic",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:s3:::example-bucket"
}
}
}
この例では、S3サービス全体ではなく、example-bucket を発生元とする呼び出しに限定している。
aws:SourceAccountとは
aws:SourceAccount は、呼び出し元リソースを所有するAWSアカウントを確認する条件キー。
"Condition": {
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
これにより、指定したAWSアカウントが所有するリソースからの呼び出しだけを許可できる。
両方を指定する例
S3バケットのARNにはAWSアカウントIDが含まれないため、aws:SourceArn と aws:SourceAccount を組み合わせると、リソースと所有アカウントの両方を確認できる。
{
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:ap-northeast-1:123456789012:example-topic",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:s3:::example-bucket"
},
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
}
役割を整理すると、次のようになる。
| 条件キー | 確認するもの |
|---|---|
aws:SourceArn |
どのAWSリソースからの呼び出しか |
aws:SourceAccount |
そのリソースを所有するAWSアカウントはどこか |
confused deputy問題への対策
AWSサービスにアクセスを委任すると、そのサービスが意図しない第三者の依頼まで処理してしまう可能性がある。
このような問題を confused deputy 問題という。
aws:SourceArn や aws:SourceAccount を使うことで、AWSサービスからの呼び出しを、意図したリソースやアカウントに限定できる。
Principal:
どのAWSサービスを許可するか
aws:SourceArn:
どのリソースを発生元とする呼び出しか
aws:SourceAccount:
どのアカウントが所有するリソースか
ただし、これらの条件キーを利用できるかどうかは、AWSサービス間の連携方法によって異なる。
実際にポリシーを書くときは、利用するAWSサービスの公式ドキュメントを確認する必要がある。
次にやること
- confused deputy問題について詳しく整理する
ArnEqualsとArnLikeの違いを整理するaws sts assume-roleを手動で実行する方法を確認する- IAM Identity Centerとは何かを整理する