OktaとAWS SSOを使った属性値によるアクセスコントロールを試してみた

2022.02.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

以前、OktaとAWS SSOの連携をご紹介しました。今回はその延長線上で、oktaのユーザー属性を使ったアクセス制限を試してみました。属性値に応じてstart/stopできるインスタンスを制限します。

OktaとAWS Single Sign-Onを連携してみた

Oktaコンソールで属性値を設定

Okta管理コンソールを開きます。Applicationsから、AWS Single Sign-On appを開き、Sign Onタブを開きます。SAMLセクションのAttributes (Optional)を開きます。

今回はDepartment(部署)でアクセス制限することにしました。その場合、Nameに「https://aws.amazon.com/SAML/Attributes/AccessControl:Department」と入力します。Department部分は使用する属性に変更してください。Name formatは「URI reference」とし、Valueは「user.department」とします。こちらも"department"部分を使用する属性値にあわせて変更します。入力後、Saveします。

Oktaユーザーの属性値の設定

Okta管理コンソールからユーザーの属性値を設定します。Directory>People>Profileを開き、Departmentを設定します。

AWS SSOコンソールを開き、Usersから属性値を確認すると反映されたかを確認できます。

属性値コントロールの有効化

AWS SSOコンソールの設定から、Attributes for access controlを有効にします。

パーミッションセットの作成

AWS SSOコンソールのAWS accounts>Create permission setを選択します。属性値を使ったパーミッションセットを作るので、Create a custom permission setを選びます。

custom permissions policyに以下の内容を入力します。ec2:ResourceTag/Departmentタグが一致する場合にstart/stopを許可するポリシーです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/Department": "${aws:PrincipalTag/Department}"
                }
            }
        }
    ]
}

作成したパーミッションセットのAWS accountsタブ>アカウント名を開きます。

ユーザーのパーミッションセットを作成したものに変更します。

EC2にDepartmentタグを割り当て、OktaユーザーがAWS SSOアプリでログイン後に、ユーザーと同じDepartmentタグの値をもつインスタンスだけstart/stopできることを確認しました。タグの値が一致しない場合「インスタンス i-xxxxxxxxxx の 開始 に失敗しました」のように権限不足のメッセージが表示されます。ユーザーの属性値Departmentが設定されていて、EC2にタグが存在しない場合やタグのValueがない場合も権限不足のメッセージが表示されました。

参考