LoginSignup
4
4

More than 5 years have passed since last update.

一部のRDSの情報の閲覧だけできるポリシーは作れなかった話

Last updated at Posted at 2017-07-06

ポリシー作ってみた

協力会社の人が、「AWSのRDSのリソースの状況とか自分たちでリアルタイムで見たいから、マネジメントコンソールのアカウント欲しい」というので、特定のRDSの情報を見ることだけできるユーザを作ることに。

で、ポリシーの作成とかあまりやったことなかったので、AmazonRDSReadOnlyAccessのポリシーのJSONのResource"*"からARN指定に変えればいけるんじゃね? と思いコピペ&修正で新しいポリシーをJSONで作ってみる。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "rds:Describe*",
                "rds:ListTagsForResource",
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeVpcs"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:rds:ap-northeast-1:999999999999:db:rds-postgresql-test1",
                "arn:aws:rds:ap-northeast-1:999999999999:db:rds-postgresql-test2"
            ]
        },
        {
            "Action": [
                "cloudwatch:GetMetricStatistics",
                "logs:DescribeLogStreams",
                "logs:GetLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

だめでした

このポリシーを付けたユーザでマネジメントコンソールにログインしたところ、怪しいメッセージが・・・。

アカウントの属性の取得に失敗しました。特定のコンソール機能に障害が発生している可能性があります。

RDSのインスタンス一覧を表示したところ、また違うエラーメッセージが。そして、一覧には何も表示されず。

User: arn:aws:iam::999999999999:user/testuser1 is not authorized to perform: rds:DescribeDBInstances 
(Service: AmazonRDS; Status Code: 403; Error Code: AccessDenied; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

その後、JSONの構造を変えてみたり、アクション名を足したり引いたりワイルドカードやめてみたりとかしたけど、何やってもエラーは変わらず。
もしかして、メッセージ通り何かの障害かもしれないと思い、サポートに問い合わせることに。

サポートの回答来た

英語で問い合わせたので、回答も英語。Google自動翻訳が以下の通り。

ポリシーのDescribe*権限は、コンソールからアクセスしたときのリソースレベル権限をサポートしていません。リソースレベルの権限とは、ユーザーがアクションを実行することを許可されているリソースを指定する機能を指します。サポートされていないアクション/権限は、すべてのリソース '*'で許可または拒否する必要があります。

たとえば、 'rds:DescribeDBInstances'を実行する権限があると言われているエラーの場合、 'rds-postgresql-test1'というリソースでこれを許可し、RDSコンソールを開くと、エラーが発生します。この理由は、RDSコンソールがすべてのリソースを記述し、単一のDBインスタンスだけを記述することができないためです。したがって、コンソールを介して 'rds:DescribeDBInstances'を呼び出すには、すべてのリソース '*'にアクセス権を許可する必要があります。

ということで、全てのアクションでリソース指定ができるわけじゃない、ということがわかりました。
DeleteDBInstanceのアクションとかだと指定できるみたいです。編集系だといけるんでしょうか。
AWSのドキュメントにも少し書いてました。

IAM と連携する AWS サービス

API がリソースレベルのアクセス権限をサポートしない場合、ポリシーのそのステートメントは Resource 要素で * を使用する必要があります。

可否の一覧とか無いと思ってググったけど、いい感じのは見つけられなかった。
そういうやり方ができない予感はしていたけど、出来ればポリシー作成時にエラーだして欲しかったぜ。

代替案あったら教えて

結局あきらめてすべてのRDSインスタンスのリードオンリー権限で作りました。
もしかしたら、タグで切り分けるとか他に方法があるかもしれません。
誰か知っていたら教えてください。

4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4