AWS のサービスにアクセスしようとしたときに、アクセス拒否または不正なエラーが表示されました。AWS アカウントのアクセス拒否エラーをトラブルシューティングするにはどうすればよいですか?
簡単な説明
AWS Identity and Access Management (IAM) ポリシーが特定の条件に関する要件を満たしていないことにより、アクセス拒否または不正なエラーが表示されることがあります。まず、お使いのアカウントでサービスコントロールポリシー (SCP) を確認してから、リソースベースのポリシーに拒否が存在しないことをチェックします。それでもエラーが解決しない場合は、アクセス許可の境界が存在することが問題の原因である可能性があります。
アクセス許可の境界は、管理ポリシーを使用して、アイデンティティベースのポリシーが IAM エンティティ (ユーザーまたはロール) に付与できる最大の権限を設定できるようにする機能です。エンティティにアクセス許可の境界を設定すると、そのエンティティは、アイデンティティベースのポリシーとアクセス許可の境界の両方で許可されているアクションのみを実行できます。
注: アクセス許可の境界はエンティティの最大の権限を設定しますが、それらの権限を付与するものではありません。
認証エラーをトラブルシューティングするには、以下の手順に従います。
- アクションが自分の IAM ポリシーでは許可されているが、アクセス許可の境界では許可されていないかどうかを確認する
- IAM コンソールを使用して、必要なすべてのアクションをアクセス許可の境界に含める
- 自分の IAM ポリシーで「iam:PermissionsBoundary」条件キーを使用する
解決方法
アクションが IAM ポリシーでは許可されているが、アクセス許可の境界では許可されていないかどうかを確認する
次の例は、IAM ポリシーでは許可されているが、アクセス許可の境界では許可されていないアクションを示しています。この例では、IAM ユーザーにはアタッチされている USER_IAM_POLICY というポリシーがあります。
IAM policy:(USER_IAM_POLICY)
“Effect”: “Allow”,
“Action”: [
“ec2:*”,
“s3:*”
],
このポリシーにより、ユーザーは Amazon Elastic Compute Cloud (Amazon EC2) と Amazon Simple Storage Service (Amazon S3) サービスへのフルアクセスが付与されます。このユーザーには USER_PB_POLICY というアクセス許可の境界も設定されています。
Permissions Boundary:(USER_PB_POLICY)
“Effect”: “Allow”,
“Action”: [
“cloudwatch:*”,
“s3:*”
],
アクセス許可の境界は、ユーザーが実行できる最大の権限を設定します。この例では、アクセス許可の境界により Amazon CloudWatch と Amazon S3 サービスへのフルアクセスが許可されています。ただし、IAM ポリシーとアクセス許可の境界の両方で許可されているサービスは Amazon S3 だけであるため、ユーザーがアクセスできるのは S3 のみです。ユーザーが Amazon EC2 にアクセスしようとすると、アクセス拒否エラーが表示されます。
このエラーを解決するには、アクセス許可の境界を編集して Amazon EC2 へのアクセスを許可します。
“Effect”: “Allow”,
“Action”: [
“cloudwatch:*”,
“s3:*”,
“ec2:*”
],
IAM コンソールを使用して、必要なすべてのアクションをアクセス許可の境界に含める
以下の手順に従って、ユーザーが必要とするすべてのアクションが含まれるようにアクセス許可の境界を編集します。
- IAM コンソールを開きます。
- ナビゲーションペインで、[ ロール/ユーザー]を選択します。
- 編集する IAM エンティティを選択します。
- [アクセス許可の境界] セクションで、設定を確認します。アクセス許可の境界が 設定済みになっている場合は、アクセス許可の境界が設定されていることになります。このセクションには、IAM エンティティのアクセス許可の境界として使用される管理ポリシーの名前が一覧表示されています。
- JSON ポリシーを拡張し、アクセス許可の境界で必要なアクションがホワイトリストに登録されているかどうかを確認します。アクションがホワイトリストに登録されていない場合は、IAM エンティティが必要とするすべてのアクションを許可するように JSON ポリシーを編集します。
ポリシーの編集の詳細については、「IAM ポリシーの編集」を参照してください。
自分の IAM ポリシーで iam:PermissionsBoundary 条件キーを使用する
iam:PermissionsBoundary 条件キーを、IAM ポリシーに追加します。この条件キーは、特定のポリシーが IAM エンティティのアクセス許可の境界としてアタッチされているかどうかをチェックします。
以下の例は、RestrictedRegionpermissionsBoundary という名前の IAM ポリシーを示しています。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EC2RestrictRegion",
"Effect": “Allow”,
"Action": "ec2:*”
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": [
"us-east-1"
]
}
}
}
ポリシーを作成して、ユーザーを作成する責任がある委任管理者にアタッチします。以下のサンプルポリシーを管理者にアタッチすると、管理者は RestrictedRegionPermissionsBoundary ポリシーをそのユーザーにアタッチした場合にのみ IAM ユーザーを作成できるようになります。管理者がポリシーをアタッチせずに IAM ユーザーを作成しようとすると、アクセス拒否エラーが表示されます。
{
"Sid": "CreateUser",
"Effect": "Allow",
"Action": [
"iam:CreateUser"
],
"Resource": "arn:aws:iam::111222333444:user/test1*",
"Condition": {
"StringEquals": {
"iam:PermissionsBoundary": "arn:aws:iam::111222333444:policy/RestrictedRegionPermissionsBoundary"
}
}
新規ユーザーを作成するときに、 IAM ポリシーの RestrictedRegionPermissionsBoundary をアクセス権限の境界として設定するには、以下の手順に従います。
- IAM コンソールを開きます。
- ナビゲーションペインで [ ユーザー]を選択してから、 [ ユーザーの追加]を選択します。
- 編集するユーザー名を入力し、 [ AWS アクセスタイプ]、 [ 次へ]の順に選択します。
- [ アクセス許可の境界を設定 ] セクションを展開し、 [ アクセス許可の境界を使用して最大ロールのアクセス許可を制御する]を選択します。
- 検索フィールドに「 RestrictedRegionPermissionsBoundary」と入力し、ポリシーのラジオボタンを選択します。
- [ 次へ: タグ]を選択します。
- 設定を確認してユーザーを作成します。
関連情報
IAM エンティティのアクセス許可の境界
境界を設定した場合の有効なアクセス許可の評価