share facebook facebook twitter menu hatena pocket slack

2019.07.01 MON

AWSのSupportは各操作へ個々のアクセス可否を独立して設定できない

高橋 修一

WRITTEN BY 高橋 修一

概要

IAMポリシーでは、各操作毎にAllow/Denyを設定できるが、Supportに関しては個別に設定できない。

Support全体という単位でしかAllow/Denyできない。

ので注意がいる。。。

公式ドキュメント

サポートでは、個々の操作へのアクセス権を許可または拒否することはできません。そのため、ポリシーの Action 要素は常に support:* に設定されます。

https://docs.aws.amazon.com/ja_jp/awssupport/latest/user/getting-started.html#accessing-support

どういうこと?

support操作のAllowDenyを書くとき

"Action": "support:DescribeTrustedAdvisorChecks",

とか

"Action": "support:Describe*",

といった記載は、意味をなさない。

"Action": "support:*",

という書き方のみ有効。

検証

LambdaからTrustedAdvisor(以降、TA)のDescribeTrustedAdvisorChecksを呼び出し、TAが対応しているチェック項目を取得します。

Lambda

lambda_function.py

import json
import boto3

def lambda_handler(event, context):
    support = boto3.client("support", region_name="us-east-1")
    res = support.describe_trusted_advisor_checks(language="ja")
    print(f"checks len = {len(res['checks'])}")
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

IAM policy

成功するパターン

正常にTAのチェック項目を取得できるパターン。

support:* をAllow

policy.json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "condition0",
            "Effect": "Allow",
            "Action": "support:*",
            "Resource": "*"
        }
    ]
}
support:* をAllow + support:Describe*をDeny

policy.json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "condition0",
            "Effect": "Allow",
            "Action": "support:*",
            "Resource": "*"
        },
        {
            "Sid": "condition1",
            "Effect": "Deny",
            "Action": "support:Describe*",
            "Resource": "*"
        }
    ]
}

Denyに書いている “Action”: “support:Describe*”, が無効なので、Describeできてしまう。

失敗するパターン

support:DescribeTrustedAdvisorChecks をAllow

policy.json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "condition0",
            "Effect": "Allow",
            "Action": "support:DescribeTrustedAdvisorChecks",
            "Resource": "*"
        }
    ]
}
support:Describe* をAllow

policy.json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "condition0",
            "Effect": "Allow",
            "Action": "support:Describe*",
            "Resource": "*"
        }
    ]
}

上記はいずれも、以下のようなエラーが出て失敗します。

error.log

An error occurred (AccessDeniedException) when calling the DescribeTrustedAdvisorChecks operation: User: arn:aws:sts::nnnnnnnnn:assumed-role/rolename/lambdaname is not authorized to perform: support:

備考

IAM Policy Simulator

IAM Policy Simulator上では、この制限はシミュレートされてなさそうです。

“Action”: “support:DescribeTrustedAdvisorChecks”をAllowしているポリシーに対し
IAM Policy Simulatorで「AWS SupportDescribeTrustedAdvisorChecks」を「Run Simulation」したところallowedになりました。
ただ実際に動かすと前述の通り失敗します。

困った

ユーザーやロールに「サポートケース系は隠してTAだけアクセスさせる」というのをしたかったが、できない。
フィードバックはあげたので、個別設定できるようになればいいな。。。

参考

元記事はこちら

AWSのSupportは各操作へ個々のアクセス可否を独立して設定できない

高橋 修一

高橋 修一

社内サービスの開発を主にやっています。大阪オフィス所属。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。