この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
以前、OktaとAWS SSOの連携をご紹介しました。今回はその延長線上で、oktaのユーザー属性を使ったアクセス制限を試してみました。属性値に応じてstart/stopできるインスタンスを制限します。
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がない場合も権限不足のメッセージが表示されました。