0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

あるユーザに、ある情報だけを共有

Last updated at Posted at 2022-01-10

自分の組織で、あるユーザに、ある情報だけを共有したいとなった場合の方法です。

具体的には、s3 バケットを作成して、その中に情報を入れます。そのバケットを、IAM および s3 のポリシーにより制御します。

新しいユーザーを新しいグループに所属させ、そのグループに、新しいロールをアタッチします。

1 管理者権限ユーザで IAM を開きます。
IAM グループを作成します。
(一例)
custom-group

2 管理者権限ユーザで IAM を開きます。
以下の内容でポリシーを作成します。
ポリシー名(一例)
My-read-s3-custom-bucket

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowBucketList1",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::<BucketName>"
        },
        {
            "Sid": "AllowBugetGet1",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketVersioning",
                "s3:GetObject*"
            ],
            "Resource": [
                "arn:aws:s3:::<BucketName>",
                "arn:aws:s3:::<BucketName>/*"
            ]
        }
    ]
}

上記ポリシーを、グループに紐付けます。

3 管理者権限ユーザで s3 を開きます。
BucketName の「アクセス許可」を開きます。
以下のバケットポリシーを作成します。
なお、複数のユーザーを追加する場合は、配列にします。
ユーザーグループは有効な Principal ではないため。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CustomBucketPolicy1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<ACCOUNT_ID>:user/user1"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<BucketName>/*"
        }
    ]
}

ユーザーを作成します。

ユーザを追加します。
(一例)
user1, user2(user2 を追加するために、上記バケットポリシーを修正してみてください)。

ユーザーに、以下のリンクを教えます。
ユーザーは s3 全体をリストできないので、リンクを教えておく必要があるためです。

https://s3.console.aws.amazon.com/s3/buckets/<BucketName>

端的に言えば、上記リンクを LMS ログイン後のページに書いてリンクさせます。

ここまででも、十分だとは思いますが、バケットの閲覧に、MFA を必須にしてみます。
user1 は、custom-group に所属しており、custom-group は、ある特定のバケットのみの閲覧ができるのみで、他はなにもできません。
ここで、MFA の設定のみが可能なようにしてあげましょう。

4 管理者権限ユーザで IAM を開きます。
以下の内容でポリシーを作成します。
ポリシー名(一例)
My-enable-MFA-setting

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListUsers"
            ],
            "Resource": [
                "arn:aws:iam::<ACCOUNT_ID>:user/"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListVirtualMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::<ACCOUNT_ID>:mfa/"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:EnableMFADevice",
                "iam:DeactivateMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::<ACCOUNT_ID>:user/${aws:username}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:DeleteVirtualMFADevice",
                "iam:CreateVirtualMFADevice"
            ],
            "Resource": [
                "arn:aws:iam::<ACCOUNT_ID>:mfa/${aws:username}"
            ]
        }
    ]
}

custom-group に、このポリシーをアタッチします。
この段階で、custom-group には、My-read-s3-custom-bucketポリシーと、My-enable-MFA-setting ポリシーがアタッチされている状態となります・

5 バケットポリシーに、MFA を使っていれば閲覧できるような条件を追加します。

現在のバケットポリシーを編集して、以下のように Condition を追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CustomBucketPolicy1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<ACCOUNT_ID>:user/user1"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<BucketName>/*"
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        }
    ]
}

user1 で、https://s3.console.aws.amazon.com/s3/buckets/<BucketName> を叩き、バケットの中のファイルを「開く」で開いてみると、MFA を設定していない場合はエラーとなります。

IAM に行き、ページの真ん中に「MFA 設定」のボタンがあります。

それをクリックして設定すると、バケットの中のファイルを「開く」で開いた場合に、オブジェクトの中身が確認できました。

じ後のログインからは、user1 は MFA が求められるようになります。

これで、安全に、あるユーザー(user1)に情報を提供できるようになりました。
なお、上記の手順では、このユーザーから情報を提供してもらうことはできません。

(参考)

https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html
https://dev.classmethod.jp/articles/iam-mfa-policy/
https://aws.amazon.com/jp/premiumsupport/knowledge-center/enforce-mfa-other-account-access-bucket/
0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?